Details
-
Improvement
-
Resolution: Fixed
-
Minor
-
None
-
None
-
None
Description
Reply…
Also send to incommon-grouper-core
incommon-grouper
Justin Robinson and you
Justin Robinson
18 days ago
Running 2.6.9 provisioner for Duo, I was able to get it setup and running smoothly - wonderful! Ran into a small difficulty which I am not sure how to handle. The membership in Grouper contains users that have not yet setup accounts in Duo. We are not letting Grouper handle entity updates at this time. The membership fails though and halts the incremental. Thoughts on how to adjust it to ignore if not in target? (edited)
Justin Robinson
18 days ago
Mship(group: "Affiliates", entity: "<omitted>", groupId: "<omitted>", entityId: "", matchingId: MultiKey[<omitted>, ], attr[id]: <null>, recalc: true)
null
at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningMatchingIdIndex.indexMatchingIdMemberships(GrouperProvisioningMatchingIdIndex.java:143)
at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningLogic.provisionIncremental(GrouperProvisioningLogic.java:986)
at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningType$3.provision(GrouperProvisioningType.java:100)
at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningLogic.provision(GrouperProvisioningLogic.java:69)
at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioner.provision(GrouperProvisioner.java:703)
at edu.internet2.middleware.grouper.app.provisioning.ProvisioningConsumer.dispatchEventList(ProvisioningConsumer.java:91)
at edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbConsumer.processChangeLogEntries(EsbConsumer.java:503)
at edu.internet2.middleware.grouper.changeLog.ChangeLogHelper.processRecords(ChangeLogHelper.java:261)
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderType$6.runJob(GrouperLoaderType.java:674)
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderJob.runJob(GrouperLoaderJob.java:541)
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)
, finalLog: true, queryCount: 19, tookMillis: 1906, took: 0:00:01.906
at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioner.provisionFinallyBlock(GrouperProvisioner.java:798)
at edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioner.provision(GrouperProvisioner.java:732)
at edu.internet2.middleware.grouper.app.provisioning.ProvisioningConsumer.dispatchEventList(ProvisioningConsumer.java:91)
at edu.internet2.middleware.grouper.changeLog.esb.consumer.EsbConsumer.processChangeLogEntries(EsbConsumer.java:503)
at edu.internet2.middleware.grouper.changeLog.ChangeLogHelper.processRecords(ChangeLogHelper.java:261)
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderType$6.runJob(GrouperLoaderType.java:674)
at edu.internet2.middleware.grouper.app.loader.GrouperLoaderJob.run
Chris Hyzer
16 days ago
can you send your provisioner config? and the debug object logs for the full run that fails (including full stack)
New
Justin Robinson
6 days ago
@mchyzer
- I think the relevant log is this:
java.lang.RuntimeException: Why do multiple memberships have the same matching id???
Mship(group: “Affiliates”, entity: “user1", groupId: “groupid1”, entityId: “”, matchingId: MultiKey[groupid1, ], attr[id]: <null>, recalc: true, delete: true)
null
Mship(group: “Affiliates”, entity: “user2", groupId: “groupid1”, entityId: “”, matchingId: MultiKey[groupid1, ], attr[id]: <null>, recalc: true, delete: true)
since the entity didn’t exist - the multikey is the same with entity id nothing
config
provisioner.duoUsers.class = edu.internet2.middleware.grouper.app.duo.GrouperDuoProvisioner
provisioner.duoUsers.createGroupDuringDiagnostics = true
provisioner.duoUsers.customizeGroupCrud = true
provisioner.duoUsers.duoExternalSystemConfigId = duo
provisioner.duoUsers.entityAttributeValueCache2entityAttribute = id
provisioner.duoUsers.entityAttributeValueCache2has = true
provisioner.duoUsers.entityAttributeValueCache2source = target
provisioner.duoUsers.entityAttributeValueCache2type = entityAttribute
provisioner.duoUsers.entityAttributeValueCacheHas = true
provisioner.duoUsers.entityMatchingAttribute0name = loginId
provisioner.duoUsers.entityMatchingAttributeCount = 1
provisioner.duoUsers.failsafeMinGroupSize = 100
provisioner.duoUsers.failsafeMinManagedGroups = 5
provisioner.duoUsers.failsafeUse = true
provisioner.duoUsers.groupAttributeValueCache2groupAttribute = id
provisioner.duoUsers.groupAttributeValueCache2has = true
provisioner.duoUsers.groupAttributeValueCache2source = target
provisioner.duoUsers.groupAttributeValueCache2type = groupAttribute
provisioner.duoUsers.groupAttributeValueCacheHas = true
provisioner.duoUsers.groupMatchingAttribute0name = name
provisioner.duoUsers.groupMatchingAttributeCount = 1
provisioner.duoUsers.hasTargetEntityLink = true
provisioner.duoUsers.hasTargetGroupLink = true
provisioner.duoUsers.loadEntitiesToGrouperTable = true
provisioner.duoUsers.numberOfEntityAttributes = 2
provisioner.duoUsers.numberOfGroupAttributes = 3
provisioner.duoUsers.operateOnGrouperEntities = true
provisioner.duoUsers.operateOnGrouperGroups = true
provisioner.duoUsers.operateOnGrouperMemberships = true
provisioner.duoUsers.provisioningType = membershipObjects
provisioner.duoUsers.selectAllEntities = true
provisioner.duoUsers.showFailsafe = true
provisioner.duoUsers.showProvisioningDiagnostics = true
provisioner.duoUsers.startWith = this is start with read only
provisioner.duoUsers.subjectSourcesToProvision = ldap
provisioner.duoUsers.targetEntityAttribute.0.name = id
provisioner.duoUsers.targetEntityAttribute.0.select = true
provisioner.duoUsers.targetEntityAttribute.0.showAdvancedAttribute = true
provisioner.duoUsers.targetEntityAttribute.0.showAttributeCrud = true
provisioner.duoUsers.targetEntityAttribute.1.name = loginId
provisioner.duoUsers.targetEntityAttribute.1.showAdvancedAttribute = true
provisioner.duoUsers.targetEntityAttribute.1.translateExpressionType = grouperProvisioningEntityField
provisioner.duoUsers.targetEntityAttribute.1.translateFromGrouperProvisioningEntityField = subjectId
provisioner.duoUsers.targetGroupAttribute.0.insert = false
provisioner.duoUsers.targetGroupAttribute.0.name = id
provisioner.duoUsers.targetGroupAttribute.0.showAdvancedAttribute = true
provisioner.duoUsers.targetGroupAttribute.0.showAttributeCrud = true
provisioner.duoUsers.targetGroupAttribute.0.update = false
provisioner.duoUsers.targetGroupAttribute.1.name = name
provisioner.duoUsers.targetGroupAttribute.1.translateExpressionType = grouperProvisioningGroupField
provisioner.duoUsers.targetGroupAttribute.1.translateFromGrouperProvisioningGroupField = displayExtension
provisioner.duoUsers.targetGroupAttribute.2.name = description
provisioner.duoUsers.targetGroupAttribute.2.translateExpressionType = grouperProvisioningGroupField
provisioner.duoUsers.targetGroupAttribute.2.translateFromGrouperProvisioningGroupField = description