Description
More than one thread calling
MemberFinder.findBySubject();
may result in
GrouperDAOException: Could not execute JDBC batch update at edu.internet2.middleware.grouper.internal.dao.hibernate.HibernateMemberDAO.create(HibernateMemberDAO.java:76)
at edu.internet2.middleware.grouper.MemberFinder.internal_findOrCreateBySubject(MemberFinder.java:139)
at edu.internet2.middleware.grouper.MemberFinder.internal_findBySubject(MemberFinder.java:123)
at edu.internet2.middleware.grouper.MemberFinder.findBySubject(MemberFinder.java:53)
...
JDBCExceptionReporter:58 - ERROR: duplicate key violates unique constraint "grouper_members_subject_id_key"
Our provisioning software uses one thread per provisioned resource, of which we have around 10. When evaluating group membership for the first time for a subject, we've seen this exception. Our workaround is along the lines of
Member member;
try {
member = MemberFinder.findBySubject(s, SubjectFinder.findById());
} catch (GrouperDAOException e) {
// try again
member = MemberFinder.findBySubject(s, SubjectFinder.findById());
}