Description
Under certain conditions, when processing an Enrollment feed in SaaS, an error is thrown in the SIS logs.
Symptoms
Jan 10, 2018 12:20:36 PM - Unexpected exception happened during batch processing! - blackboard.persist.PersistenceException: org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block
at blackboard.db.DbUtil.callWithSavepointRollback(DbUtil.java:273)
at blackboard.db.DbUtil.callWithSavepointRollback(DbUtil.java:208)
at blackboard.platform.dataintegration.mapping.BatchCommitter$1.run(BatchCommitter.java:86)
at blackboard.db.ConnectionManager.performTransaction(ConnectionManager.java:591)
at blackboard.platform.dataintegration.mapping.BatchCommitter.commit(BatchCommitter.java:111)
at blackboard.platform.dataintegration.mapping.BatchCommitter.addOperation(BatchCommitter.java:136)
at blackboard.dataintegration.flatfile.mapping.handler.BaseDataHandler.handleRecord(BaseDataHandler.java:289)
at blackboard.dataintegration.flatfile.parser.FlatFileParser.parse(FlatFileParser.java:146)
at blackboard.dataintegration.flatfile.queue.FlatFileMessageQueueHandler.onMessage(FlatFileMessageQueueHandler.java:179)
at blackboard.platform.messagequeue.impl.activemq.ActiveMQMessageQueueConsumer$ConsumerThread.run(ActiveMQMessageQueueConsumer.java:194)
Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:403)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:331)
at org.postgresql.jdbc3.AbstractJdbc3Connection.setSavepoint(AbstractJdbc3Connection.java:108)
at sun.reflect.GeneratedMethodAccessor3980.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126)
at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108)
at org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:70)
at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108)
at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:81)
at com.sun.proxy.$Proxy24.setSavepoint(Unknown Source)
at org.apache.commons.dbcp2.DelegatingConnection.setSavepoint(DelegatingConnection.java:671)
at org.apache.commons.dbcp2.DelegatingConnection.setSavepoint(DelegatingConnection.java:671)
at org.apache.commons.dbcp2.DelegatingConnection.setSavepoint(DelegatingConnection.java:671)
at blackboard.db.DbUtil.callWithSavepointRollback(DbUtil.java:251)
... 9 more
Steps to Replicate
Log into Blackboard Learn as a System Administrator
Create 2 Courses and Merge them as Children into a Parent Course
Create 2 Users
Create a new SIS Snapshot Flat File integration
Click the Integration's chevron and choose Advanced Configuration
Click the chevron for Enrollments and choose Field Mapping
Locate Move Cross-listed Enrollment
Uncheck Change on Update?
Change Source Field to Do not populate this field with feed data
Submit
Use SIS to Enroll the User into one of the Child Courses as a Student. Example:
EXTERNAL_PERSON_KEY|EXTERNAL_COURSE_KEY|ROLE|ROW_STATUS
student1|merge_child1|Student|enabled
Run another SIS feed that enrolls the second User in the first Child Course, and moves the first User to the second Child Course. Example:
EXTERNAL_PERSON_KEY|EXTERNAL_COURSE_KEY|ROLE|ROW_STATUS
student2|merge_child1|Student|enabled
student1|merge_child2|Student|enabled
Check the SIS logs
Expected Behavior:
The Enrollment feed is processed successfully, and the changes are made
Observed Behavior:
An error is thrown, and the changes are not made
Resolution / Workaround
Re-enable Change on update and Source Field for the Move Cross-listed Enrollment Field Mapping.
Target Release
Will Not Fix
