- Created by Chris Hyzer (upenn.edu), last modified on Oct 14, 2023
Note, this is for a provisioner before renames of DN were handled properly... This should be addressed in v4.7.3+...
The concept of this workaround is to keep the cache configuration (so Grouper knows when to lookup entities, e.g. always), but to clear it out after each run so Grouper looks up entities. Also mark the entities as not in target. There is a provisioner configuration to do this (look entities under a certain number, in advanced config), but it is not working correctly. This will be fixed too
Configuration
Schedule the provisioning incremental and full daemons to not run:
0 0 6 * * ? 2099
Create an incremental script daemon wrapper which runs the incremental and clears the cache DN for entities. Note, you can remove these after you get the fixed container. And dont run the provisioning daemons directly (e.g. from provisioning screen), only run the wrappers. The logs of the provisioners will be in the job for the provisioners, not the wrappers.
Note: you need to set your provisioner config id and the job name of your provisioner incremental job in the script. Schedule this job to run however often you had your incremental provisioner running (e.g. every minute)
String provisionerConfigId = "prodActiveDirectory"; String provisionerJobName = "CHANGE_LOG_consumer_provisioner_incremental_prodActiveDirectory"; import edu.internet2.middleware.grouperClient.jdbc.GcDbAccess; RuntimeException exception = null; try { loaderRunOneJob(provisionerJobName); } catch (RuntimeException re) { exception = re; } // clear the cache for entity cache bucket 0 for this provisioner new GcDbAccess().sql("update grouper_sync_member gsm set member_from_id2 = null, " + " in_target = 'F', in_target_start = null where " + " gsm.grouper_sync_id in (select gs.id from grouper_sync gs where gs.provisioner_name = '" + provisionerConfigId + "')").executeSql(); // if there was an exception in provisioner, throw it if (exception != null) { throw exception; }
Create a full script daemon wrapper which runs the full and clears the cache DN for entities
Note: you need to set your provisioner config id and the job name of your provisioner full job in the script. Schedule this job to run however often you had your full provisioner running (e.g. every minute)
String provisionerConfigId = "prodActiveDirectory"; String provisionerJobName = "OTHER_JOB_provisioner_full_prodActiveDirectory"; import edu.internet2.middleware.grouperClient.jdbc.GcDbAccess; RuntimeException exception = null; try { loaderRunOneJob(provisionerJobName); } catch (RuntimeException re) { exception = re; } // clear the cache for entity cache bucket 0 for this provisioner new GcDbAccess().sql("update grouper_sync_member gsm set member_from_id2 = null, " + " in_target = 'F', in_target_start = null where " + " gsm.grouper_sync_id in (select gs.id from grouper_sync gs where gs.provisioner_name = '" + provisionerConfigId + "')").executeSql(); // if there was an exception in provisioner, throw it if (exception != null) { throw exception; }
Provision some groups and entities
Change a DN on the LDAP side
Note this is for the entity, and the memberships will change automatically in LDAP
Note the cache value in grouper is not there
Make some membership changes
Remove from a group, add to a group
Run incremental
(obviously run the new incremental wrapper daemon, and check the logs in the provisioning incremental daemon)
2023-10-14 17:14:31.044: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'configure' type 'incrementalProvisionChangeLog': {} (vx0szkdb): Provisioner (GrouperProvisioner: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapSync, TargetDao: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapProvisioningTargetDao, Configuration: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapSyncConfiguration, Compare: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapSyncCompare, ConfigurationValidation: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapSyncConfigurationValidation, DiagnosticsContainer: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapSyncDiagnosticsContainer, Logic: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapSyncLogic, LogicIncremental: edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningLogicIncremental, ObjectMetadata: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapSyncObjectMetadata, Translator: edu.internet2.middleware.grouper.app.ldapProvisioning.LdapProvisioningTranslator) (vx0szkdb): Configuration (allowLdapGroupDnOverride = 'false', allowPolicyGroupOverride = 'true', allowProvisionableRegexOverride = 'true', attributeNameForMemberships = 'member', configured = 'true', createEntityDuringDiagnostics = 'false', createGroupDuringDiagnostics = 'false', createMembershipDuringDiagnostics = 'false', customizeEntityCrud = 'false', customizeGroupCrud = 'true', customizeMembershipCrud = 'true', deleteEntities = 'false', deleteEntitiesIfGrouperCreated = 'false', deleteEntitiesIfGrouperDeleted = 'false', deleteEntitiesIfNotExistInGrouper = 'false', deleteEntityDuringDiagnostics = 'false', deleteGroupDuringDiagnostics = 'false', deleteGroups = 'true', deleteGroupsIfGrouperCreated = 'false', deleteGroupsIfGrouperDeleted = 'false', deleteGroupsIfNotExistInGrouper = 'true', deleteGroupsIfUnmarkedProvisionable = 'true', deleteMembershipDuringDiagnostics = 'false', deleteMemberships = 'true', deleteMembershipsForUnprovisionableUsers = 'false', deleteMembershipsIfGrouperCreated = 'false', deleteMembershipsIfGrouperDeleted = 'false', deleteMembershipsIfNotExistInGrouper = 'true', deleteMembershipsOnlyInTrackedGroups = 'true', deleteValueIfManagedByGrouper = 'false', diagnosticsEntitiesAllSelect = 'false', diagnosticsGroupsAllSelect = 'false', diagnosticsMembershipsAllSelect = 'false', entityAttributeDbCaches = 'Array size: 4: [0]: entityCache(index: 0, source: target, type: attribute, attributeName: ldap_dn), [1]: null, [2]: null, [3]: null, ', entityAttributeValueCacheHas = 'true', entityMatchingAttributeSameAsSearchAttribute = 'true', entitySelectAttributes = 'HashSet size: 2: [0]: ldap_dn, [1]: mail, ', errorHandlingInvalidDataIsAnError = 'true', errorHandlingLengthValidationIsAnError = 'true', errorHandlingLogCountPerType = '5', errorHandlingLogErrors = 'true', errorHandlingMatchingValidationIsAnError = 'true', errorHandlingMinutesLevel1 = '180.0', errorHandlingMinutesLevel2 = '120.0', errorHandlingMinutesLevel3 = '12.0', errorHandlingMinutesLevel4 = '3.0', errorHandlingPercentLevel1 = '1.0', errorHandlingPercentLevel2 = '5.0', errorHandlingPercentLevel3 = '10.0', errorHandlingPercentLevel4 = '100.0', errorHandlingProvisionerDaemonShouldFailOnObjectError = 'true', errorHandlingRequiredValidationIsAnError = 'true', errorHandlingTargetObjectDoesNotExistIsAnError = 'true', filterAllLDAPOnFull = 'true', folderObjectClasses = 'LinkedHashSet size: 2: [0]: top, [1]: organizationalUnit, ', folderRdnAttribute = 'ou', groupAttributeDbCaches = 'Array size: 4: [0]: groupCache(index: 0, source: target, type: attribute, attributeName: ldap_dn), [1]: null, [2]: null, [3]: null, ', groupAttributeValueCacheHas = 'true', groupAttributesMultivalued = 'HashSet size: 2: [0]: member, [1]: objectClass, ', groupAttributesRecalcMembershipsOnIncremental = 'false', groupAttributesSelectAllSqlOnFull = 'false', groupDnType = 'bushy', groupMatchingAttributeSameAsSearchAttribute = 'true', groupMembershipAttributeName = 'member', groupMembershipAttributeValue = 'entityAttributeValueCache0', groupRdnAttribute = 'cn', groupSearchBaseDn = 'ou=Groups,dc=example,dc=edu', groupSelectAttributes = 'HashSet size: 5: [0]: ldap_dn, [1]: member, [2]: objectClass, [3]: businessCategory, [4]: cn, ', grouperProvisioningBehaviorMembershipType = 'groupAttributes', grouperProvisioningMembershipFieldType = 'members', groupsRequireMembers = 'false', hasEntityAttributes = 'false', hasGroupAttributes = 'false', hasTargetEntityLink = 'true', hasTargetGroupLink = 'false', insertEntities = 'false', insertGroups = 'true', insertMemberships = 'true', ldapExternalSystemConfigId = 'personLdap', loadEntitiesToGrouperTable = 'false', logAllObjectsVerbose = 'true', logAllObjectsVerboseToDaemonDbLog = 'true', logAllObjectsVerboseToLogFile = 'true', logCertainObjects = 'false', logCommandsAlways = 'true', logCommandsOnError = 'false', logMaxErrorsPerType = '10', makeChangesToEntities = 'false', membershipsConvertToGroupSyncThreshold = '500', numberOfMetadata = '0', onlyAddMembershipsIfUserExistsInTarget = 'false', onlyLdapGroupDnOverride = 'false', onlyProvisionPolicyGroups = 'false', operateOnGrouperEntities = 'true', operateOnGrouperGroups = 'true', operateOnGrouperMemberships = 'true', readOnly = 'false', recalculateAllOperations = 'false', refreshEntityLinkIfLessThanAmount = '1000000', refreshGroupLinkIfLessThanAmount = '20', refreshSubjectLinkIfLessThanAmount = '20', removeAccentedChars = 'false', replaceMemberships = 'false', resolveAttributesWithLdap = 'false', resolveAttributesWithSql = 'false', resolveGroupAttributesWithSql = 'false', scoreConvertToFullSyncThreshold = '10000', selectAllEntities = 'false', selectAllGroups = 'true', selectAllSqlOnFull = 'true', selectEntities = 'true', selectGroups = 'true', selectMemberships = 'true', sleepBeforeSelectAfterInsertMillis = '0', subjectSourcesToProvision = 'LinkedHashSet size: 1: [0]: personLdapSource, ', threadPoolSize = '5', unresolvableSubjectsInsert = 'false', unresolvableSubjectsRemove = 'false', updateEntities = 'false', updateGroups = 'true', useGlobalLdapResolver = 'false', useGlobalSqlResolver = 'false', userSearchBaseDn = 'ou=People,dc=example,dc=edu', groupMatchingAttributes: businessCategory, groupSearchAttributes: businessCategory, entityMatchingAttributes: mail, entitySearchAttributes: mail (vx0szkdb): - target group attribute config: businessCategory: caseSensitiveCompare = 'true', checkForNullsInScript = 'false', configIndex = '4', grouperProvisioningConfigurationAttributeType = 'group', insert = 'true', multiValued = 'false', name = 'businessCategory', required = 'false', select = 'true', translateExpressionType = 'grouperProvisioningGroupField', translateFromGrouperProvisioningGroupField = 'idIndexString', unprovisionableIfNull = 'false', update = 'true', valueType = 'STRING' (vx0szkdb): - target group attribute config: cn: caseSensitiveCompare = 'true', checkForNullsInScript = 'false', configIndex = '1', grouperProvisioningConfigurationAttributeType = 'group', insert = 'true', multiValued = 'false', name = 'cn', required = 'false', select = 'true', translateExpressionType = 'grouperProvisioningGroupField', translateFromGrouperProvisioningGroupField = 'extension', unprovisionableIfNull = 'false', update = 'true', valueType = 'STRING' (vx0szkdb): - target group attribute config: ldap_dn: caseSensitiveCompare = 'true', checkForNullsInScript = 'false', configIndex = '0', grouperProvisioningConfigurationAttributeType = 'group', insert = 'true', multiValued = 'false', name = 'ldap_dn', required = 'false', select = 'true', unprovisionableIfNull = 'false', update = 'true', valueType = 'STRING' (vx0szkdb): - target group attribute config: member: caseSensitiveCompare = 'true', checkForNullsInScript = 'false', configIndex = '2', defaultValue = '<emptyString>', grouperProvisioningConfigurationAttributeType = 'group', insert = 'true', multiValued = 'true', name = 'member', required = 'false', select = 'true', translateExpressionType = 'grouperProvisioningGroupField', translateFromGrouperProvisioningGroupField = 'groupAttributeValueCache0', unprovisionableIfNull = 'false', update = 'true', valueType = 'STRING' (vx0szkdb): - target group attribute config: objectClass: caseSensitiveCompare = 'true', checkForNullsInScript = 'false', configIndex = '3', grouperProvisioningConfigurationAttributeType = 'group', insert = 'true', multiValued = 'true', name = 'objectClass', required = 'false', select = 'true', translateExpressionType = 'staticValues', translateFromStaticValues = 'top,groupOfNames', unprovisionableIfNull = 'false', update = 'true', valueType = 'STRING' (vx0szkdb): - target entity attribute config: ldap_dn: caseSensitiveCompare = 'true', checkForNullsInScript = 'false', configIndex = '0', grouperProvisioningConfigurationAttributeType = 'entity', insert = 'true', multiValued = 'false', name = 'ldap_dn', required = 'false', select = 'true', translateExpressionType = 'grouperProvisioningEntityField', translateFromGrouperProvisioningEntityField = 'entityAttributeValueCache0', unprovisionableIfNull = 'false', update = 'true', valueType = 'STRING' (vx0szkdb): - target entity attribute config: mail: caseSensitiveCompare = 'true', checkForNullsInScript = 'false', configIndex = '1', grouperProvisioningConfigurationAttributeType = 'entity', insert = 'true', multiValued = 'false', name = 'mail', required = 'false', select = 'true', translateExpressionType = 'grouperProvisioningEntityField', translateFromGrouperProvisioningEntityField = 'subjectId', unprovisionableIfNull = 'false', update = 'true', valueType = 'STRING') (vx0szkdb): Target Dao capabilities (canDeleteEntity = 'true', canDeleteGroup = 'true', canInsertEntity = 'true', canInsertGroup = 'true', canRetrieveAllEntities = 'true', canRetrieveAllGroups = 'true', canRetrieveEntities = 'true', canRetrieveGroups = 'true', canRetrieveMembership = 'true', canRetrieveMembershipOneByGroup = 'true', canRetrieveMembershipsWithEntity = 'false', canRetrieveMembershipsWithGroup = 'true', canUpdateEntity = 'true', canUpdateGroup = 'true', canUpdateGroupMembershipAttribute = 'true', defaultBatchSize = '100', deleteEntitiesBatchSize = '100', deleteGroupsBatchSize = '100', deleteMembershipsBatchSize = '100', insertEntitiesBatchSize = '100', insertGroupsBatchSize = '100', insertMembershipsBatchSize = '100', retrieveEntitiesBatchSize = '100', retrieveGroupsBatchSize = '100', retrieveMembershipsBatchSize = '100', updateEntitiesBatchSize = '100', updateGroupsBatchSize = '100', updateMembershipsBatchSize = '100') (vx0szkdb): Provisioner behaviors (allowPolicyGroupOverride = 'true', allowProvisionableRegexOverride = 'true', createGroupsAndEntitiesBeforeTranslatingMemberships = 'true', deleteEntities = 'false', deleteEntitiesIfGrouperCreated = 'false', deleteEntitiesIfGrouperDeleted = 'false', deleteEntitiesIfNotExistInGrouper = 'false', deleteGroups = 'true', deleteGroupsIfGrouperCreated = 'false', deleteGroupsIfGrouperDeleted = 'false', deleteGroupsIfNotExistInGrouper = 'true', deleteGroupsIfUnmarkedProvisionable = 'true', deleteMemberships = 'true', deleteMembershipsIfGrouperCreated = 'false', deleteMembershipsIfGrouperDeleted = 'false', deleteMembershipsIfNotExistInGrouper = 'true', grouperProvisioningBehaviorMembershipType = 'groupAttributes', grouperProvisioningType = 'incrementalProvisionChangeLog', hasSubjectLink = 'false', hasTargetEntityLink = 'true', hasTargetGroupLink = 'true', insertEntities = 'false', insertGroups = 'true', insertMemberships = 'true', onlyProvisionPolicyGroups = 'false', replaceMemberships = 'false', selectAllData = 'false', selectEntities = 'true', selectEntitiesAll = 'false', selectEntitiesForRecalc = 'true', selectEntityMembershipsForRecalc = 'false', selectEntityMissingIncremental = 'true', selectGroupMembershipsForRecalc = 'true', selectGroupMissingIncremental = 'true', selectGroups = 'true', selectGroupsAll = 'true', selectGroupsForRecalc = 'true', selectMembershipsAll = 'true', selectMembershipsAllForEntity = 'false', selectMembershipsAllForGroup = 'true', selectMembershipsAllWithRetrieveAllMembershipsDao = 'false', selectMembershipsForMembership = 'true', selectMembershipsForRecalc = 'true', selectMembershipsInGeneral = 'true', selectMembershipsSomeForEntity = 'false', selectMembershipsSomeForGroup = 'true', selectMembershipsWithEntity = 'false', selectMembershipsWithGroup = 'true', subjectIdentifierForMemberSyncTable = 'subjectIdentifier0', updateEntities = 'false', updateGroups = 'true', updateMemberships = 'true') 2023-10-14 17:14:31.169: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'logIncomingDataUnprocessed' type 'incrementalProvisionChangeLog': {state=incrementalCheckChangeLog, changeLogRawCount=3, changeLogItemsApplicableByType=3} (vx0szkdb): Incoming data unprocessed groups (0) (vx0szkdb): Incoming data unprocessed entities (0) (vx0szkdb): Incoming data unprocessed memberships (3): (vx0szkdb): 0. ProvisioningStateMembership(groupId='17a6fd17c56f4563a3bbfe0d8750b3f7', memberId='17207e84e25947bd947c4d669893678b', create='false', delete='false', deleteResultProcessed='false', grouperIncrementalDataAction='insert', insertResultProcessed='false', loggable='false', millisSince1970='1697318026551', recalcObject='false', select='false', selectResultProcessed='false', update='false', updateResultProcessed='false', valueExistsInGrouper='false') (vx0szkdb): 1. ProvisioningStateMembership(groupId='17a6fd17c56f4563a3bbfe0d8750b3f7', memberId='1437dcf7154547e8b79ea5dea1755da4', create='false', delete='false', deleteResultProcessed='false', grouperIncrementalDataAction='insert', insertResultProcessed='false', loggable='false', millisSince1970='1697318012855', recalcObject='false', select='false', selectResultProcessed='false', update='false', updateResultProcessed='false', valueExistsInGrouper='false') (vx0szkdb): 2. ProvisioningStateMembership(groupId='c6377d59709e4d27bea6a0c9738f8cb2', memberId='1437dcf7154547e8b79ea5dea1755da4', create='false', delete='false', deleteResultProcessed='false', grouperIncrementalDataAction='delete', insertResultProcessed='false', loggable='false', millisSince1970='1697318000704', recalcObject='false', select='false', selectResultProcessed='false', update='false', updateResultProcessed='false', valueExistsInGrouper='false') 2023-10-14 17:14:31.185: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'logIncomingDataToProcess' type 'incrementalProvisionChangeLog': {state=recalcActionsDuringEntitySync, recalcEventsDuringFullSync=0, checkErrorsMinutes=3, syncGroupsToQuery_Pass1=2, syncGroupCount_Pass1=2, retrieveSyncGroupsMillis_Pass1=1, syncMembersToQuery_Pass1=2, syncMemberCount_Pass1=2, retrieveSyncMembersMillis_Pass1=1, convertToFullSyncScore=7, recalcEventsDuringGroupSync=0, recalcEventsDuringEntitySync=0} (vx0szkdb): Incoming data processed groups (2): (vx0szkdb): 0. GcGrouperSyncGroup(groupAttributeValueCache0='cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu', groupId='17a6fd17c56f4563a3bbfe0d8750b3f7', groupIdIndex='1000041', groupName='test:testGroup3', id='af9b097a58144940b7a77657c017f5bd', inTargetDb='T', inTargetEnd='2023-10-14 15:19:03.248', inTargetInsertOrExistsDb='T', inTargetStart='2023-10-14 15:20:08.647', lastGroupSyncStart='1969-12-31 18:59:59.999', provisionableDb='T', provisionableEnd='2023-10-14 15:19:03.018', provisionableStart='2023-10-14 15:20:08.47') (vx0szkdb): 1. GcGrouperSyncGroup(groupAttributeValueCache0='cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu', groupId='c6377d59709e4d27bea6a0c9738f8cb2', groupIdIndex='1000039', groupName='test:testGroup', id='12a1eaade1cf4528ab05be11b79c640f', inTargetDb='T', inTargetEnd='2023-10-14 15:19:03.248', inTargetInsertOrExistsDb='T', inTargetStart='2023-10-14 15:20:08.647', lastGroupSyncStart='1969-12-31 18:59:59.999', provisionableDb='T', provisionableEnd='2023-10-14 15:19:03.018', provisionableStart='2023-10-14 15:20:08.47') (vx0szkdb): Incoming data processed entities (2): (vx0szkdb): 0. GcGrouperSyncMember(id='54c1438ede104d4186a01ca9bc154102', inTargetDb='F', inTargetInsertOrExistsDb='F', memberId='17207e84e25947bd947c4d669893678b', provisionableDb='T', provisionableStart='2023-10-14 17:09:00.986', sourceId='personLdapSource', subjectId='abrown@example.edu', subjectIdentifier='abrown@example.edu') (vx0szkdb): 1. GcGrouperSyncMember(id='37415d381c844f5e80a4f68396e914c9', inTargetDb='F', inTargetInsertOrExistsDb='F', memberId='1437dcf7154547e8b79ea5dea1755da4', provisionableDb='T', provisionableStart='2023-10-14 17:09:00.986', sourceId='personLdapSource', subjectId='aanderson727@example.edu', subjectIdentifier='aanderson727@example.edu') (vx0szkdb): Incoming data processed memberships (3): (vx0szkdb): 0. ProvisioningStateMembership(groupId='17a6fd17c56f4563a3bbfe0d8750b3f7', memberId='17207e84e25947bd947c4d669893678b', create='false', delete='false', deleteResultProcessed='false', grouperIncrementalDataAction='insert', insertResultProcessed='false', loggable='true', millisSince1970='1697318026551', recalcObject='false', select='false', selectResultProcessed='false', update='false', updateResultProcessed='false', valueExistsInGrouper='false') (vx0szkdb): 1. ProvisioningStateMembership(groupId='17a6fd17c56f4563a3bbfe0d8750b3f7', memberId='1437dcf7154547e8b79ea5dea1755da4', create='false', delete='false', deleteResultProcessed='false', grouperIncrementalDataAction='insert', insertResultProcessed='false', loggable='true', millisSince1970='1697318012855', recalcObject='false', select='false', selectResultProcessed='false', update='false', updateResultProcessed='false', valueExistsInGrouper='false') (vx0szkdb): 2. ProvisioningStateMembership(groupId='c6377d59709e4d27bea6a0c9738f8cb2', memberId='1437dcf7154547e8b79ea5dea1755da4', create='false', delete='false', deleteResultProcessed='false', grouperIncrementalDataAction='delete', insertResultProcessed='false', loggable='true', millisSince1970='1697318000704', recalcObject='false', select='false', selectResultProcessed='false', update='false', updateResultProcessed='false', valueExistsInGrouper='false') 2023-10-14 17:14:31.201: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'retrieveDataFromGrouper' type 'incrementalProvisionChangeLog': {state=retrieveIncrementalMembershipsFromGrouper, retrieveDataStartMillisSince1970=1697318071193, retrieveGrouperGroupsMillis_Pass1=2, grouperGroupCount_Pass1=2, retrieveGrouperEntitiesMillis_Pass1=3, grouperEntityCount_Pass1=2, retrieveGrouperGroupsEntitiesMillis=8, convertEntitiesToRecalc=2, syncMembershipsToQuery=3, syncMembershipsFromMembership=3, retrieveSyncMembershipsMillis=0, syncMembershipCount=3, retrieveGrouperGroupsMillis_Pass2=0, grouperGroupCount_Pass2=0, retrieveGrouperEntitiesMillis_Pass2=0, grouperEntityCount_Pass2=0, syncGroupsToQuery_Pass2=0, syncGroupCount_Pass2=0, retrieveSyncGroupsMillis_Pass2=0, syncMembersToQuery_Pass2=0, syncMemberCount_Pass2=0, retrieveSyncMembersMillis_Pass2=0, retrieveGrouperMshipsMillis=7, grouperMshipCount=2, retrieveGrouperGroups2Millis=0, grouperGroup2Count=0, retrieveGrouperEntities2Millis=0, grouperEntity2Count=0, provisioningMshipsToDelete=1, retrieveGrouperMembershipsMillis=7} (vx0szkdb): Grouper provisioning groups (2): (vx0szkdb): 0. Group(attr[description]: <null>, attr[displayName]: "test:testGroup3", attr[id]: "17a6fd17c56f4563a3bbfe0d8750b3f7", attr[idIndex]: 1000041, attr[name]: "test:testGroup3", recalcObject: false, recalcMships: false) (vx0szkdb): 1. Group(attr[description]: <null>, attr[displayName]: "test:testGroup", attr[id]: "c6377d59709e4d27bea6a0c9738f8cb2", attr[idIndex]: 1000039, attr[name]: "test:testGroup", recalcObject: false, recalcMships: false) (vx0szkdb): Grouper provisioning entities (2): (vx0szkdb): 0. Entity(attr[description]: "abrown@example.edu", attr[email]: <null>, attr[id]: "17207e84e25947bd947c4d669893678b", attr[idIndex]: 1000068, attr[name]: "abrown@example.edu", attr[subjectId]: "abrown@example.edu", attr[subjectIdentifier0]: "abrown@example.edu", attr[subjectIdentifier1]: <null>, attr[subjectIdentifier2]: <null>, attr[subjectResolutionResolvable]: true, attr[subjectSourceId]: "personLdapSource", recalcObject: true, recalcMships: false) (vx0szkdb): 1. Entity(attr[description]: "aanderson727@example.edu", attr[email]: <null>, attr[id]: "1437dcf7154547e8b79ea5dea1755da4", attr[idIndex]: 1000067, attr[name]: "aanderson727@example.edu", attr[subjectId]: "aanderson727@example.edu", attr[subjectIdentifier0]: "aanderson727@example.edu", attr[subjectIdentifier1]: <null>, attr[subjectIdentifier2]: <null>, attr[subjectResolutionResolvable]: true, attr[subjectSourceId]: "personLdapSource", recalcObject: true, recalcMships: false) (vx0szkdb): Grouper provisioning memberships (3): (vx0szkdb): 0. Mship(group: "testGroup3", entity: "abrown@example.edu", groupId: "17a6fd17c56f4563a3bbfe0d8750b3f7", entityId: "17207e84e25947bd947c4d669893678b", attr[id]: "542677bfd55c49e199115b50c2e12a92:f02c29d632ec4be4a9ec0ef5bc700fd3", action: insert, recalcObject: false, millis1970: 1697318026551) (vx0szkdb): 1. Mship(group: "testGroup3", entity: "aanderson727@example.edu", groupId: "17a6fd17c56f4563a3bbfe0d8750b3f7", entityId: "1437dcf7154547e8b79ea5dea1755da4", attr[id]: "19eb48fa7e7a4abba43fba56423dfbc0:f02c29d632ec4be4a9ec0ef5bc700fd3", action: insert, recalcObject: false, millis1970: 1697318012855) (vx0szkdb): 2. Mship(group: "testGroup", entity: "aanderson727@example.edu", groupId: "c6377d59709e4d27bea6a0c9738f8cb2", entityId: "1437dcf7154547e8b79ea5dea1755da4", action: delete, recalcObject: false, delete: true, millis1970: 1697318000704) (vx0szkdb): Sync objects groups (2): (vx0szkdb): 0. GcGrouperSyncGroup(groupAttributeValueCache0='cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu', groupId='17a6fd17c56f4563a3bbfe0d8750b3f7', groupIdIndex='1000041', groupName='test:testGroup3', id='af9b097a58144940b7a77657c017f5bd', inTargetDb='T', inTargetEnd='2023-10-14 15:19:03.248', inTargetInsertOrExistsDb='T', inTargetStart='2023-10-14 15:20:08.647', lastGroupSyncStart='1969-12-31 18:59:59.999', provisionableDb='T', provisionableEnd='2023-10-14 15:19:03.018', provisionableStart='2023-10-14 15:20:08.47') (vx0szkdb): 1. GcGrouperSyncGroup(groupAttributeValueCache0='cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu', groupId='c6377d59709e4d27bea6a0c9738f8cb2', groupIdIndex='1000039', groupName='test:testGroup', id='12a1eaade1cf4528ab05be11b79c640f', inTargetDb='T', inTargetEnd='2023-10-14 15:19:03.248', inTargetInsertOrExistsDb='T', inTargetStart='2023-10-14 15:20:08.647', lastGroupSyncStart='1969-12-31 18:59:59.999', provisionableDb='T', provisionableEnd='2023-10-14 15:19:03.018', provisionableStart='2023-10-14 15:20:08.47') (vx0szkdb): Sync objects members (2): (vx0szkdb): 0. GcGrouperSyncMember(id='54c1438ede104d4186a01ca9bc154102', inTargetDb='F', inTargetInsertOrExistsDb='F', memberId='17207e84e25947bd947c4d669893678b', provisionableDb='T', provisionableStart='2023-10-14 17:14:31.2', sourceId='personLdapSource', subjectId='abrown@example.edu', subjectIdentifier='abrown@example.edu') (vx0szkdb): 1. GcGrouperSyncMember(id='37415d381c844f5e80a4f68396e914c9', inTargetDb='F', inTargetInsertOrExistsDb='F', memberId='1437dcf7154547e8b79ea5dea1755da4', provisionableDb='T', provisionableStart='2023-10-14 17:14:31.2', sourceId='personLdapSource', subjectId='aanderson727@example.edu', subjectIdentifier='aanderson727@example.edu') (vx0szkdb): Sync objects memberships (3): (vx0szkdb): 3. GcGrouperSyncMembership(grouperSyncGroupId='af9b097a58144940b7a77657c017f5bd', grouperSyncMemberId='37415d381c844f5e80a4f68396e914c9', id='bc34cf823fad4b1b9d225309aa359744', lastUpdated='2023-10-14 17:14:31.19') (vx0szkdb): 3. GcGrouperSyncMembership(grouperSyncGroupId='12a1eaade1cf4528ab05be11b79c640f', grouperSyncMemberId='37415d381c844f5e80a4f68396e914c9', id='12b756374ce64a2985250c7b079241aa', inTargetDb='T', inTargetInsertOrExistsDb='T', inTargetStart='2023-10-14 17:09:01.012', lastUpdated='2023-10-14 17:09:01.018') (vx0szkdb): 3. GcGrouperSyncMembership(grouperSyncGroupId='af9b097a58144940b7a77657c017f5bd', grouperSyncMemberId='54c1438ede104d4186a01ca9bc154102', id='a7128c3adf3941d89ba1cb80b1da0aba', lastUpdated='2023-10-14 17:14:31.19') 2023-10-14 17:14:31.201: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'translateGrouperGroupsToTarget' type 'incrementalProvisionChangeLog': {state=translateGrouperGroupsEntitiesToTarget} (vx0szkdb): Grouper target groups (2): (vx0szkdb): 0. Group(attr[businessCategory]: "1000041", attr[cn]: "testGroup3", attr[ldap_dn]: "cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu", attr[member]: LinkedHashSet(1): [0]: cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu, attr[objectClass]: LinkedHashSet(2): [0]: top, [1]: groupOfNames, recalcObject: false, recalcMships: false) (vx0szkdb): 1. Group(attr[businessCategory]: "1000039", attr[cn]: "testGroup", attr[ldap_dn]: "cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu", attr[member]: LinkedHashSet(1): [0]: cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu, attr[objectClass]: LinkedHashSet(2): [0]: top, [1]: groupOfNames, recalcObject: false, recalcMships: false) 2023-10-14 17:14:31.201: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'translateGrouperEntitiesToTarget' type 'incrementalProvisionChangeLog': {} (vx0szkdb): Grouper target entities (2): (vx0szkdb): 0. Entity(attr[ldap_dn]: <null>, attr[mail]: "abrown@example.edu", recalcObject: true, recalcMships: false) (vx0szkdb): 1. Entity(attr[ldap_dn]: <null>, attr[mail]: "aanderson727@example.edu", recalcObject: true, recalcMships: false) 2023-10-14 17:14:31.201: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'matchingIdGrouperGroupsEntities' type 'incrementalProvisionChangeLog': {state=matchingIdGrouperGroupsEntities} (vx0szkdb): Grouper target groups (2): (vx0szkdb): 0. Group(matchingAttrs: LinkedHashSet(1): [0]: [businessCategory, val: 1000041, compareVal: 1000041, currentValue: true], attr[businessCategory]: "1000041", attr[cn]: "testGroup3", attr[ldap_dn]: "cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu", attr[member]: LinkedHashSet(1): [0]: cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu, attr[objectClass]: LinkedHashSet(2): [0]: top, [1]: groupOfNames, recalcObject: false, recalcMships: false) (vx0szkdb): 1. Group(matchingAttrs: LinkedHashSet(1): [0]: [businessCategory, val: 1000039, compareVal: 1000039, currentValue: true], attr[businessCategory]: "1000039", attr[cn]: "testGroup", attr[ldap_dn]: "cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu", attr[member]: LinkedHashSet(1): [0]: cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu, attr[objectClass]: LinkedHashSet(2): [0]: top, [1]: groupOfNames, recalcObject: false, recalcMships: false) (vx0szkdb): Grouper target entities (2): (vx0szkdb): 0. Entity(matchingAttrs: LinkedHashSet(1): [0]: [mail, val: abrown@example.edu, compareVal: abrown@example.edu, currentValue: true], attr[ldap_dn]: <null>, attr[mail]: "abrown@example.edu", recalcObject: true, recalcMships: false) (vx0szkdb): 1. Entity(matchingAttrs: LinkedHashSet(1): [0]: [mail, val: aanderson727@example.edu, compareVal: aanderson727@example.edu, currentValue: true], attr[ldap_dn]: <null>, attr[mail]: "aanderson727@example.edu", recalcObject: true, recalcMships: false) 2023-10-14 17:14:31.223: vx0szkdb, prodActiveDirectory, incrementalProvisionChangeLog: INFO: Command log for provisioner 'prodActiveDirectory' - 'vx0szkdb', retrieveEntities: Ldaptive searchRequest (personLdap): [org.ldaptive.SearchRequest@-143173989::baseDn=ou=People,dc=example,dc=edu, searchFilter=[org.ldaptive.SearchFilter@45098644::filter=(|(mail=abrown@example.edu)(mail=aanderson727@example.edu)), parameters={}], returnAttributes=[ldap_dn, mail], searchScope=SUBTREE, timeLimit=PT0S, sizeLimit=0, derefAliases=null, typesOnly=false, binaryAttributes=null, sortBehavior=UNORDERED, searchEntryHandlers=null, searchReferenceHandlers=null, controls=null, referralHandler=null, intermediateResponseHandlers=null] Ldaptive searchResponse (personLdap): [org.ldaptive.Response@618424116::result=[org.ldaptive.SearchResult@-1549083442::entries=[[dn=uid=abrown,ou=People,dc=example,dc=edu[[mail[abrown@example.edu]]], responseControls=null, messageId=-1], [dn=uid=aanderson727_new,ou=People,dc=example,dc=edu[[mail[aanderson727@example.edu]]], responseControls=null, messageId=-1]], references=[]], resultCode=SUCCESS, message=null, matchedDn=null, responseControls=null, referralURLs=null, messageId=-1] Ldaptive searchResults (personLdap): [org.ldaptive.SearchResult@-1549083442::entries=[[dn=uid=abrown,ou=People,dc=example,dc=edu[[mail[abrown@example.edu]]], responseControls=null, messageId=-1], [dn=uid=aanderson727_new,ou=People,dc=example,dc=edu[[mail[aanderson727@example.edu]]], responseControls=null, messageId=-1]], references=[]] 2023-10-14 17:14:31.223: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'retrieveTargetDataGroupsAndEntities' type 'incrementalProvisionChangeLog': {state=retrieveIncrementalTargetGroupsAndEntities, duplicateTargetEntities=2, targetEntitiesRetrieved=2, originalTargetEntitiesRetrieved=2, originalTargetTotalCount=2, retrieveIncrementalTargetGroupsAndEntitiesMillis=22} (vx0szkdb): Grouper target request from target group only groups (0) (vx0szkdb): Grouper target request from target entity only entities (2): (vx0szkdb): 0. Entity(matchingAttrs: LinkedHashSet(1): [0]: [mail, val: aanderson727@example.edu, compareVal: aanderson727@example.edu, currentValue: true], attr[ldap_dn]: <null>, attr[mail]: "aanderson727@example.edu", recalcObject: true, recalcMships: false, selectProcessed: true) (vx0szkdb): 1. Entity(matchingAttrs: LinkedHashSet(1): [0]: [mail, val: abrown@example.edu, compareVal: abrown@example.edu, currentValue: true], attr[ldap_dn]: <null>, attr[mail]: "abrown@example.edu", recalcObject: true, recalcMships: false, selectProcessed: true) (vx0szkdb): Target provisioning groups (0) (vx0szkdb): Target provisioning entities (2): (vx0szkdb): 0. Entity(matchingAttrs: LinkedHashSet(1): [0]: [mail, val: abrown@example.edu, compareVal: abrown@example.edu, currentValue: true], attr[ldap_dn]: "uid=abrown,ou=People,dc=example,dc=edu", attr[mail]: "abrown@example.edu") (vx0szkdb): 1. Entity(matchingAttrs: LinkedHashSet(1): [0]: [mail, val: aanderson727@example.edu, compareVal: aanderson727@example.edu, currentValue: true], attr[ldap_dn]: "uid=aanderson727_new,ou=People,dc=example,dc=edu", attr[mail]: "aanderson727@example.edu") 2023-10-14 17:14:31.223: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'linkDataEntities' type 'incrementalProvisionChangeLog': {state=updateEntityLinkFull, calculateGroupActionReset=2, targetGroupsForLinkNull=2, provisioningEntityWrappersWithMatch=2} (vx0szkdb): Grouper target objects changed in link entities (2): (vx0szkdb): 0. Entity(matchingAttrs: LinkedHashSet(1): [0]: [mail, val: abrown@example.edu, compareVal: abrown@example.edu, currentValue: true], attr[ldap_dn]: "uid=abrown,ou=People,dc=example,dc=edu", attr[mail]: "abrown@example.edu", recalcObject: true, recalcMships: false, selectProcessed: true) (vx0szkdb): 1. Entity(matchingAttrs: LinkedHashSet(1): [0]: [mail, val: aanderson727@example.edu, compareVal: aanderson727@example.edu, currentValue: true], attr[ldap_dn]: "uid=aanderson727_new,ou=People,dc=example,dc=edu", attr[mail]: "aanderson727@example.edu", recalcObject: true, recalcMships: false, selectProcessed: true) 2023-10-14 17:14:31.224: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'translateGrouperMembershipsToTarget' type 'incrementalProvisionChangeLog': {state=translateGrouperMembershipsToTarget, provisioningEntityWrappersWithMatch=4, linkGcSyncEntitiesUpdated=2} (vx0szkdb): Grouper target groups (2): (vx0szkdb): 0. Group(matchingAttrs: LinkedHashSet(1): [0]: [businessCategory, val: 1000041, compareVal: 1000041, currentValue: true], attr[businessCategory]: "1000041", attr[cn]: "testGroup3", attr[ldap_dn]: "cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu", attr[member]: LinkedHashSet(2): [0]: uid=abrown,ou=People,dc=example,dc=edu, [1]: uid=aanderson727_new,ou=People,dc=example,dc=edu, attr[objectClass]: LinkedHashSet(2): [0]: top, [1]: groupOfNames, recalcObject: false, recalcMships: false) (vx0szkdb): 1. Group(matchingAttrs: LinkedHashSet(1): [0]: [businessCategory, val: 1000039, compareVal: 1000039, currentValue: true], attr[businessCategory]: "1000039", attr[cn]: "testGroup", attr[ldap_dn]: "cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu", attr[member]: LinkedHashSet(1): [0]: uid=aanderson727_new,ou=People,dc=example,dc=edu, attr[objectClass]: LinkedHashSet(2): [0]: top, [1]: groupOfNames, recalcObject: false, recalcMships: false) 2023-10-14 17:14:31.224: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'retrieveTargetDataMemberships' type 'incrementalProvisionChangeLog': {state=retrieveIncrementalTargetMemberships, retrieveIncrementalTargetMemberships=0} (vx0szkdb): Target data request some group mships groups (0) (vx0szkdb): Target data request all group mships groups (0) (vx0szkdb): Target provisioning groups (0) 2023-10-14 17:14:31.226: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'compareTargetObjects' type 'incrementalProvisionChangeLog': {state=compareTargetObjectsIncremental, provisioningMembershipWrappersWithNoMatch=3, groupUpdatesAfterCompare=2} (vx0szkdb): Target inserts groups (0) (vx0szkdb): Target inserts entities (0) (vx0szkdb): Target inserts memberships (0) (vx0szkdb): Target updates groups (2): (vx0szkdb): 0. Group(matchingAttrs: LinkedHashSet(1): [0]: [businessCategory, val: 1000041, compareVal: 1000041, currentValue: true], attr[businessCategory]: "1000041", attr[cn]: "testGroup3", attr[ldap_dn]: "cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu", attr[member]: LinkedHashSet(2): [0]: uid=abrown,ou=People,dc=example,dc=edu, [1]: uid=aanderson727_new,ou=People,dc=example,dc=edu, attr[objectClass]: LinkedHashSet(2): [0]: top, [1]: groupOfNames, ins member "uid=aanderson727_new,ou=People,dc=example,dc=edu", ins member "uid=abrown,ou=People,dc=example,dc=edu", del member "", recalcObject: false, recalcMships: false) (vx0szkdb): 1. Group(matchingAttrs: LinkedHashSet(1): [0]: [businessCategory, val: 1000039, compareVal: 1000039, currentValue: true], attr[businessCategory]: "1000039", attr[cn]: "testGroup", attr[ldap_dn]: "cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu", attr[member]: LinkedHashSet(1): [0]: uid=aanderson727_new,ou=People,dc=example,dc=edu, attr[objectClass]: LinkedHashSet(2): [0]: top, [1]: groupOfNames, del member "uid=aanderson727_new,ou=People,dc=example,dc=edu", recalcObject: false, recalcMships: false) (vx0szkdb): Target updates entities (0) (vx0szkdb): Target updates memberships (0) (vx0szkdb): Target deletes groups (0) (vx0szkdb): Target deletes entities (0) (vx0szkdb): Target deletes memberships (0) (vx0szkdb): Target replaces groups (0) 2023-10-14 17:14:31.231: vx0szkdb, prodActiveDirectory, incrementalProvisionChangeLog: INFO: Command log for provisioner 'prodActiveDirectory' - 'vx0szkdb', updateGroup: Ldaptive modifyRequest (personLdap): [org.ldaptive.ModifyRequest@61707115::modifyDn=cn=testGroup,ou=test,ou=Groups,dc=example,dc=edu, attrMods=[[org.ldaptive.AttributeModification@1664948030::attrMod=REMOVE, attribute=[member[uid=aanderson727_new,ou=People,dc=example,dc=edu]]]], controls=null, referralHandler=null, intermediateResponseHandlers=null] Ldaptive modifyResponse (personLdap): [org.ldaptive.Response@759108688::result=null, resultCode=SUCCESS, message=null, matchedDn=null, responseControls=null, referralURLs=null, messageId=-1] 2023-10-14 17:14:31.231: vx0szkdb, prodActiveDirectory, incrementalProvisionChangeLog: INFO: Command log for provisioner 'prodActiveDirectory' - 'vx0szkdb', updateGroup: Ldaptive modifyRequest (personLdap): [org.ldaptive.ModifyRequest@766816743::modifyDn=cn=testGroup3,ou=test,ou=Groups,dc=example,dc=edu, attrMods=[[org.ldaptive.AttributeModification@137624869::attrMod=REMOVE, attribute=[member[]]], [org.ldaptive.AttributeModification@1558602886::attrMod=ADD, attribute=[member[uid=aanderson727_new,ou=People,dc=example,dc=edu, uid=abrown,ou=People,dc=example,dc=edu]]]], controls=null, referralHandler=null, intermediateResponseHandlers=null] Ldaptive modifyResponse (personLdap): [org.ldaptive.Response@846077340::result=null, resultCode=SUCCESS, message=null, matchedDn=null, responseControls=null, referralURLs=null, messageId=-1] 2023-10-14 17:14:31.239: Provisioner 'prodActiveDirectory' (vx0szkdb) state 'end' type 'incrementalProvisionChangeLog': {state=sendChangesToTarget, grouperTargetGroupsForCacheNull=2, syncObjectStoreCount=7, finalLog=true, queryCount=26, tookMillis=201, took=00:00:00.201} provisionerClass: LdapSync, configId: prodActiveDirectory, provisioningType: incrementalProvisionChangeLog, state: sendChangesToTarget, changeLogRawCount: 3, changeLogItemsApplicableByType: 3, recalcEventsDuringFullSync: 0, checkErrorsMinutes: 3, syncGroupsToQuery_Pass1: 2, syncGroupCount_Pass1: 2, retrieveSyncGroupsMillis_Pass1: 1, syncMembersToQuery_Pass1: 2, syncMemberCount_Pass1: 2, retrieveSyncMembersMillis_Pass1: 1, convertToFullSyncScore: 7, recalcEventsDuringGroupSync: 0, recalcEventsDuringEntitySync: 0, retrieveDataStartMillisSince1970: 1697318071193, retrieveGrouperGroupsMillis_Pass1: 2, grouperGroupCount_Pass1: 2, retrieveGrouperEntitiesMillis_Pass1: 3, grouperEntityCount_Pass1: 2, retrieveGrouperGroupsEntitiesMillis: 8, convertEntitiesToRecalc: 2, syncMembershipsToQuery: 3, syncMembershipsFromMembership: 3, retrieveSyncMembershipsMillis: 0, syncMembershipCount: 3, retrieveGrouperGroupsMillis_Pass2: 0, grouperGroupCount_Pass2: 0, retrieveGrouperEntitiesMillis_Pass2: 0, grouperEntityCount_Pass2: 0, syncGroupsToQuery_Pass2: 0, syncGroupCount_Pass2: 0, retrieveSyncGroupsMillis_Pass2: 0, syncMembersToQuery_Pass2: 0, syncMemberCount_Pass2: 0, retrieveSyncMembersMillis_Pass2: 0, retrieveGrouperMshipsMillis: 7, grouperMshipCount: 2, retrieveGrouperGroups2Millis: 0, grouperGroup2Count: 0, retrieveGrouperEntities2Millis: 0, grouperEntity2Count: 0, provisioningMshipsToDelete: 1, retrieveGrouperMembershipsMillis: 7, duplicateTargetEntities: 2, targetEntitiesRetrieved: 2, originalTargetEntitiesRetrieved: 2, originalTargetTotalCount: 2, retrieveIncrementalTargetGroupsAndEntitiesMillis: 22, calculateGroupActionReset: 2, targetGroupsForLinkNull: 2, provisioningEntityWrappersWithMatch: 4, linkGcSyncEntitiesUpdated: 2, retrieveIncrementalTargetMemberships: 0, provisioningMembershipWrappersWithNoMatch: 3, groupUpdatesAfterCompare: 2, grouperTargetGroupsForCacheNull: 2, syncObjectStoreCount: 7, finalLog: true, queryCount: 26, tookMillis: 201, took: 00:00:00.201
See changes in LDAP
- No labels