Details
-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
None
Description
Error: o365unified threw an exception processing change log entry sequence number 22091155., sequenceNumber: 22091155, java.lang.NullPointerException
|
at edu.internet2.middleware.grouper.changeLog.ChangeLogConsumerBaseImpl$ChangeLogEventType$5.process(ChangeLogConsumerBaseImpl.java:282)
|
at edu.internet2.middleware.grouper.changeLog.ChangeLogConsumerBaseImpl.processChangeLogEntry(ChangeLogConsumerBaseImpl.java:871)
|
at edu.internet2.middleware.grouper.changeLog.ChangeLogConsumerBaseImpl.processChangeLogEntries(ChangeLogConsumerBaseImpl.java:791)
|
at edu.internet2.middleware.grouper.changeLog.ChangeLogHelper.processRecords(ChangeLogHelper.java:247)
|
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderType$6.runJob(GrouperLoaderType.java:673)
|
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderJob.runJob(GrouperLoaderJob.java:465)
|
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderJob.execute(GrouperLoaderJob.java:345)
|
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
|
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
|
Did not get all the way through the batch! 22091155 != 22092154java.lang.RuntimeException: Error in loader job: null, check logs: Error: o365unified threw an exception processing change log entry sequence number 22091155., sequenceNumber: 22091155, java.lang.NullPointerException
|
at edu.internet2.middleware.grouper.changeLog.ChangeLogConsumerBaseImpl$ChangeLogEventType$5.process(ChangeLogConsumerBaseImpl.java:282)
|
at edu.internet2.middleware.grouper.changeLog.ChangeLogConsumerBaseImpl.processChangeLogEntry(ChangeLogConsumerBaseImpl.java:871)
|
at edu.internet2.middleware.grouper.changeLog.ChangeLogConsumerBaseImpl.processChangeLogEntries(ChangeLogConsumerBaseImpl.java:791)
|
at edu.internet2.middleware.grouper.changeLog.ChangeLogHelper.processRecords(ChangeLogHelper.java:247)
|
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderType$6.runJob(GrouperLoaderType.java:673)
|
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderJob.runJob(GrouperLoaderJob.java:465)
|
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderJob.execute(GrouperLoaderJob.java:345)
|
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
|
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
|
Did not get all the way through the batch! 22091155 != 22092154
|
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderJob.runJob(GrouperLoaderJob.java:474)
|
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderJob.execute(GrouperLoaderJob.java:345)
|
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
|
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
|
For implementations based on ChangeLogConsumerBaseImpl (mainly the O365 provisioner), the deleteMembership event type requires a subject with the id from the changelog entry. However, if the subject is a group, and it was removed due to the group being deleted, the subject can't be found.
There is no easy way to convert this to use a PITMember, since there aren't suitable finder functions like there is with PITGroup. The best option might be to findPITMembersBySubjectIdSourceAndType, which returns a set for some reason, even though it should return either 0 or 1 results.
The quick but imperfect fix is to look at the changelog entry and reject it where the source type is g:gsa. It's already skipping subjects that are non-person types, but it needs to resolve it to a subject to figure out the type (which causes the NPE since the subject is null). It's an imperfect fix because it's unlikely but possible that a person would be deleted from the members table.