Duplicate key when synchronising with Azure AD on Crowd server
Asked by Ariel Perez:

This has been setup as a new directory within our Crowd instance (v3.3.3). It always fails with the following duplicate key error.

Have tried enabling/disabling the directory, removing and re-adding but it always returns the same error.

```


2019-02-19 21:08:41,257 Caesium-2-2 INFO [microsoft.aad.adal4j.AuthenticationAuthority] [Correlation ID: 74f825cd-1424-4f55-ab18-62dbe8bb88f3] Instance discovery was successful

2019-02-19 21:08:41,922 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteDirectory] FULL synchronisation for directory [ 1540098 ] starting

2019-02-19 21:08:44,079 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteChangeOperations] scanned and compared [ 655 ] users for delete in DB cache in [ 20ms ]

2019-02-19 21:08:44,079 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteChangeOperations] scanned for deleted users in [ 20ms ]

2019-02-19 21:08:44,095 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteChangeOperations] scanning [ 655 ] users to add or update

2019-02-19 21:08:44,100 Caesium-2-2 INFO [atlassian.crowd.directory.DirectoryCacheImplUsingChangeOperations] scanned and compared [ 655 ] users for update in DB cache in [ 17ms ]

2019-02-19 21:08:44,101 Caesium-2-2 INFO [atlassian.crowd.directory.DirectoryCacheImplUsingChangeOperations] synchronised [ 655 ] users in [ 18ms ]

2019-02-19 21:08:49,533 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteChangeOperations] scanned and compared [ 379 ] groups for delete in DB cache in [ 33ms ]

2019-02-19 21:08:49,535 Caesium-2-2 INFO [atlassian.crowd.directory.DirectoryCacheImplUsingChangeOperations] scanning [ 379 ] groups to add or update

2019-02-19 21:08:49,544 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteChangeOperations] scanned and compared [ 379 ] groups for update in DB cache in [ 9ms ]

2019-02-19 21:08:49,553 Caesium-2-2 ERROR [jdbc.batch.internal.BatchingBatch] HHH000315: Exception executing batch [java.sql.BatchUpdateException: Duplicate entry 'group 4-1540098' for key 'uk_group_name_dir_id'], SQL: insert into cwd_group (group_name, lower_group_name, active, is_local, created_date, updated_date, description, group_type, directory_id, external_id, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

2019-02-19 21:08:49,553 Caesium-2-2 WARN [engine.jdbc.spi.SqlExceptionHelper] SQL Error: 1062, SQLState: 23000

2019-02-19 21:08:49,553 Caesium-2-2 ERROR [engine.jdbc.spi.SqlExceptionHelper] Duplicate entry 'group 4-1540098' for key 'uk_group_name_dir_id'

2019-02-19 21:08:49,553 Caesium-2-2 WARN [hibernate.batch.hibernate5.Hibernate5BatchProcessor] batch failed falling back to individual processing

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute batch




Caused by: org.hibernate.exception.ConstraintViolationException: could not execute batch




Caused by: java.sql.BatchUpdateException: Duplicate entry 'group 4-1540098' for key 'uk_group_name_dir_id'




Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'group 4-1540098' for key 'uk_group_name_dir_id'




2019-02-19 21:08:49,574 Caesium-2-2 ERROR [jdbc.batch.internal.BatchingBatch] HHH000315: Exception executing batch [java.sql.BatchUpdateException: Duplicate entry 'group 4-1540098' for key 'uk_group_name_dir_id'], SQL: insert into cwd_group (group_name, lower_group_name, active, is_local, created_date, updated_date, description, group_type, directory_id, external_id, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

2019-02-19 21:08:49,574 Caesium-2-2 WARN [engine.jdbc.spi.SqlExceptionHelper] SQL Error: 1062, SQLState: 23000

2019-02-19 21:08:49,574 Caesium-2-2 ERROR [engine.jdbc.spi.SqlExceptionHelper] Duplicate entry 'group 4-1540098' for key 'uk_group_name_dir_id'

2019-02-19 21:08:49,576 Caesium-2-2 ERROR [hibernate.batch.hibernate5.Hibernate5BatchProcessor] Could not process class com.atlassian.crowd.util.persistence.hibernate.batch.TransactionGroup: com.atlassian.crowd.util.persistence.hibernate.batch.TransactionGroup@362f01ee[primaryObject=com.atlassian.crowd.model.group.InternalGroup@33141109[id=1442593,name=group 4,type=GROUP,active=true,description=group 4,lowerName=group 4,createdDate=Tue Feb 19 21:08:49 GMT 2019,updatedDate=Tue Feb 19 21:08:49 GMT 2019,directoryId=1540098,externalId=ac27893f-8eaf-4d84-9f50-f8554e38d6f3]]

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute batch




Caused by: org.hibernate.exception.ConstraintViolationException: could not execute batch




Caused by: java.sql.BatchUpdateException: Duplicate entry 'group 4-1540098' for key 'uk_group_name_dir_id'




Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'group 4-1540098' for key 'uk_group_name_dir_id'




2019-02-19 21:08:49,580 Caesium-2-2 ERROR [jdbc.batch.internal.BatchingBatch] HHH000315: Exception executing batch [java.sql.BatchUpdateException: Duplicate entry 'group 3-1540098' for key 'uk_group_name_dir_id'], SQL: insert into cwd_group (group_name, lower_group_name, active, is_local, created_date, updated_date, description, group_type, directory_id, external_id, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

2019-02-19 21:08:49,580 Caesium-2-2 WARN [engine.jdbc.spi.SqlExceptionHelper] SQL Error: 1062, SQLState: 23000

2019-02-19 21:08:49,580 Caesium-2-2 ERROR [engine.jdbc.spi.SqlExceptionHelper] Duplicate entry 'group 3-1540098' for key 'uk_group_name_dir_id'

2019-02-19 21:08:49,581 Caesium-2-2 ERROR [hibernate.batch.hibernate5.Hibernate5BatchProcessor] Could not process class com.atlassian.crowd.util.persistence.hibernate.batch.TransactionGroup: com.atlassian.crowd.util.persistence.hibernate.batch.TransactionGroup@f115b5c[primaryObject=com.atlassian.crowd.model.group.InternalGroup@48a6597[id=1442594,name=group 3,type=GROUP,active=true,description=<null>,lowerName=group 3,createdDate=Tue Feb 19 21:08:49 GMT 2019,updatedDate=Tue Feb 19 21:08:49 GMT 2019,directoryId=1540098,externalId=2d75321d-406f-4447-a020-522513e6c059]]

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute batch




Caused by: org.hibernate.exception.ConstraintViolationException: could not execute batch

Caused by: java.sql.BatchUpdateException: Duplicate entry 'group 3-1540098' for key 'uk_group_name_dir_id'




Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'group 3-1540098' for key 'uk_group_name_dir_id'

2019-02-19 21:08:49,586 Caesium-2-2 ERROR [jdbc.batch.internal.BatchingBatch] HHH000315: Exception executing batch [java.sql.BatchUpdateException: Duplicate entry 'group 1-1540098' for key 'uk_group_name_dir_id'], SQL: insert into cwd_group (group_name, lower_group_name, active, is_local, created_date, updated_date, description, group_type, directory_id, external_id, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

2019-02-19 21:08:49,586 Caesium-2-2 WARN [engine.jdbc.spi.SqlExceptionHelper] SQL Error: 1062, SQLState: 23000

2019-02-19 21:08:49,586 Caesium-2-2 ERROR [engine.jdbc.spi.SqlExceptionHelper] Duplicate entry 'group 1-1540098' for key 'uk_group_name_dir_id'

2019-02-19 21:08:49,587 Caesium-2-2 ERROR [hibernate.batch.hibernate5.Hibernate5BatchProcessor] Could not process class com.atlassian.crowd.util.persistence.hibernate.batch.TransactionGroup: com.atlassian.crowd.util.persistence.hibernate.batch.TransactionGroup@66565585[primaryObject=com.atlassian.crowd.model.group.InternalGroup@4d750357[id=1442595,name=group 1,type=GROUP,active=true,description=group 1,lowerName=group 1,createdDate=Tue Feb 19 21:08:49 GMT 2019,updatedDate=Tue Feb 19 21:08:49 GMT 2019,directoryId=1540098,externalId=ed6126a0-fc84-4e58-a4a8-5da260485f9a]]

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute batch

Caused by: org.hibernate.exception.ConstraintViolationException: could not execute batch




Caused by: java.sql.BatchUpdateException: Duplicate entry 'group 1-1540098' for key 'uk_group_name_dir_id'




Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'group 1-1540098' for key 'uk_group_name_dir_id'




2019-02-19 21:08:49,590 Caesium-2-2 ERROR [jdbc.batch.internal.BatchingBatch] HHH000315: Exception executing batch [java.sql.BatchUpdateException: Duplicate entry 'group 2-1540098' for key 'uk_group_name_dir_id'], SQL: insert into cwd_group (group_name, lower_group_name, active, is_local, created_date, updated_date, description, group_type, directory_id, external_id, id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

2019-02-19 21:08:49,590 Caesium-2-2 WARN [engine.jdbc.spi.SqlExceptionHelper] SQL Error: 1062, SQLState: 23000

2019-02-19 21:08:49,590 Caesium-2-2 ERROR [engine.jdbc.spi.SqlExceptionHelper] Duplicate entry 'group 2-1540098' for key 'uk_group_name_dir_id'

2019-02-19 21:08:49,591 Caesium-2-2 ERROR [hibernate.batch.hibernate5.Hibernate5BatchProcessor] Could not process class com.atlassian.crowd.util.persistence.hibernate.batch.TransactionGroup: com.atlassian.crowd.util.persistence.hibernate.batch.TransactionGroup@65457c12[primaryObject=com.atlassian.crowd.model.group.InternalGroup@41fd202b[id=1442596,name=group 2,type=GROUP,active=true,description=group 2,lowerName=group 2,createdDate=Tue Feb 19 21:08:49 GMT 2019,updatedDate=Tue Feb 19 21:08:49 GMT 2019,directoryId=1540098,externalId=5bb07fc7-f714-45fc-9af4-fadab2412899]]

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute batch

Caused by: org.hibernate.exception.ConstraintViolationException: could not execute batch




Caused by: java.sql.BatchUpdateException: Duplicate entry 'group 2-1540098' for key 'uk_group_name_dir_id'




Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'group 2-1540098' for key 'uk_group_name_dir_id'




2019-02-19 21:08:49,593 Caesium-2-2 WARN [atlassian.crowd.directory.DbCachingRemoteChangeOperations] Could not add the following entity to the directory [ Crowd Internal Directory ]: group 4

2019-02-19 21:08:49,593 Caesium-2-2 WARN [atlassian.crowd.directory.DbCachingRemoteChangeOperations] Could not add the following entity to the directory [ Crowd Internal Directory ]: group 3

2019-02-19 21:08:49,593 Caesium-2-2 WARN [atlassian.crowd.directory.DbCachingRemoteChangeOperations] Could not add the following entity to the directory [ Crowd Internal Directory ]: group 1

2019-02-19 21:08:49,593 Caesium-2-2 WARN [atlassian.crowd.directory.DbCachingRemoteChangeOperations] Could not add the following entity to the directory [ Crowd Internal Directory ]: group 2

2019-02-19 21:08:49,593 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteChangeOperations] added [ 0 ] groups successfully in [ 45ms ]

2019-02-19 21:08:49,598 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteChangeOperations] updated [ 1 ] groups successfully in [ 2ms ]

2019-02-19 21:08:49,600 Caesium-2-2 INFO [atlassian.crowd.directory.DirectoryCacheImplUsingChangeOperations] synchronized [ 379 ] groups in [ 65ms ]

2019-02-19 21:08:49,601 Caesium-2-2 INFO [atlassian.crowd.directory.DbCachingRemoteDirectory] failed synchronisation complete for directory [ 1540098 ] in [ 7679ms ]

2019-02-19 21:08:49,612 Caesium-2-2 ERROR [atlassian.crowd.directory.DbCachingDirectoryPoller] Error occurred while refreshing the cache for directory [ 1540098 ].

java.lang.IllegalStateException: Found groups with duplicate name 'group 2', ids: 'd0946814-ec21-4e2e-953d-0448fcddbaf2', '5bb07fc7-f714-45fc-9af4-fadab2412899'

at com.atlassian.crowd.directory.rest.util.ThrowingMapMergeOperatorUtil.lambda$duplicateMappedGroupsThrowingMerger$4(ThrowingMapMergeOperatorUtil.java:37)

at java.util.HashMap.merge(HashMap.java:1254)

at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)

at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)

at java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1625)

at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)

at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)

at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)

at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)

at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)

at com.atlassian.crowd.directory.cache.DeltaQueryCacheRefresher.synchroniseAllMemberships(DeltaQueryCacheRefresher.java:188)

at com.atlassian.crowd.directory.cache.DeltaQueryCacheRefresher.synchroniseAll(DeltaQueryCacheRefresher.java:92)

at com.atlassian.crowd.directory.DbCachingRemoteDirectory.synchroniseCache(DbCachingRemoteDirectory.java:1022)

at com.atlassian.crowd.manager.directory.DirectorySynchroniserImpl.lambda$synchronise$0(DirectorySynchroniserImpl.java:80)

at com.atlassian.crowd.audit.AuditLogContextInternalImpl.withAuditLogSource(AuditLogContextInternalImpl.java:52)

at com.atlassian.crowd.manager.directory.DirectorySynchroniserImpl.synchronise(DirectorySynchroniserImpl.java:78)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)

at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)

at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)

at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)

at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)

at com.sun.proxy.$Proxy68.synchronise(Unknown Source)

at com.atlassian.crowd.directory.DbCachingDirectoryPoller.pollChanges(DbCachingDirectoryPoller.java:45)

at com.atlassian.crowd.manager.directory.monitor.poller.DirectoryPollerJobRunner.runJob(DirectoryPollerJobRunner.java:92)

at com.atlassian.scheduler.core.JobLauncher.runJob(JobLauncher.java:153)

at com.atlassian.scheduler.core.JobLauncher.launchAndBuildResponse(JobLauncher.java:118)

at com.atlassian.scheduler.core.JobLauncher.launch(JobLauncher.java:97)

at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.launchJob(CaesiumSchedulerService.java:443)

at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJob(CaesiumSchedulerService.java:438)

at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJobWithRecoveryGuard(CaesiumSchedulerService.java:462)

at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeQueuedJob(CaesiumSchedulerService.java:390)

at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService$1.consume(CaesiumSchedulerService.java:285)

at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService$1.consume(CaesiumSchedulerService.java:282)

at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeJob(SchedulerQueueWorker.java:65)

at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeNextJob(SchedulerQueueWorker.java:59)

at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.run(SchedulerQueueWorker.java:34)

at java.lang.Thread.run(Thread.java:748)
```


Answers:
author: Bruno Vincent
body: Hi [@Ariel Perez](/t5/user/viewprofilepage/user-id/1579390)

Did you check that you don't have multiple groups with that same name in Azure AD?

Quoting [Atlassian's documentation](https://confluence.atlassian.com/crowd/configuring-azure-active-directory-935372375.html):
> In Azure AD, you can have multiple groups with the same name (*displayName*), but it's not supported in Crowd and results in a failing synchronization. Make sure you change your Azure AD group names to unique ones.