Details
-
Bug
-
Resolution: Fixed
-
Low
-
None
-
3.5, 3.5.1, 3.5.2, 3.5.3, 3.5.4, 3.5.5
Description
Problem
The directory synchronization fail showing at the log an error informing duplicated membership, as the following message:
2011-06-07 14:31:13,320 ERROR [QuartzScheduler_Worker-9] [atlassian.crowd.directory.DbCachingDirectoryPoller] pollChanges Error occurred while refreshing the cache for directory [ 2392065 ]. java.lang.IllegalStateException: Found duplicate memberships for user in directory 2392065, group Test_group, user TestUser at com.atlassian.crowd.embedded.hibernate2.HibernateMembershipDao$1.doInHibernate(HibernateMembershipDao.java:150) at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:370) at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:337) at com.atlassian.crowd.embedded.hibernate2.HibernateMembershipDao.internalFindUserMembership(HibernateMembershipDao.java:137) at com.atlassian.crowd.embedded.hibernate2.HibernateMembershipDao.removeUserFromGroup(HibernateMembershipDao.java:109) at com.atlassian.confluence.user.crowd.CachedCrowdMembershipDao.removeUserFromGroup(CachedCrowdMembershipDao.java:93) at com.atlassian.crowd.directory.AbstractInternalDirectory.removeUserFromGroup(AbstractInternalDirectory.java:718) at com.atlassian.crowd.directory.DbCachingRemoteChangeOperations.removeUserMembershipsForGroup(DbCachingRemoteChangeOperations.java:684) at sun.reflect.GeneratedMethodAccessor389.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at com.atlassian.crowd.directory.$Proxy713.removeUserMembershipsForGroup(Unknown Source) at com.atlassian.crowd.directory.DirectoryCacheImplUsingChangeOperations.syncUserMembershipsForGroup(DirectoryCacheImplUsingChangeOperations.java:117) at com.atlassian.crowd.directory.ldap.cache.AbstractCacheRefresher.synchroniseMembershipsForGroup(AbstractCacheRefresher.java:126) at com.atlassian.crowd.directory.ldap.cache.AbstractCacheRefresher.synchroniseMemberships(AbstractCacheRefresher.java:63) at com.atlassian.crowd.directory.ldap.cache.AbstractCacheRefresher.synchroniseAll(AbstractCacheRefresher.java:37) at com.atlassian.crowd.directory.DbCachingRemoteDirectory.synchroniseCache(DbCachingRemoteDirectory.java:645) at com.atlassian.crowd.manager.directory.DirectorySynchroniserImpl.synchronise(DirectorySynchroniserImpl.java:63) at com.atlassian.crowd.directory.DbCachingDirectoryPoller.pollChanges(DbCachingDirectoryPoller.java:50) at com.atlassian.crowd.manager.directory.monitor.poller.DirectoryPollerJobBean.executeInternal(DirectoryPollerJobBean.java:29) at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) at org.quartz.core.JobRunShell.run(JobRunShell.java:199) at com.atlassian.confluence.schedule.quartz.ConfluenceQuartzThreadPool$1.run(ConfluenceQuartzThreadPool.java:14) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
The duplicated membership can be confirmed running this query:
SELECT u.user_name, g.group_name FROM cwd_user u, cwd_group g, cwd_membership m WHERE u.id = m.child_user_id AND g.id = m.parent_id AND u.user_name = '?';
Note: Where ? is the username mentioned at the error message.
This query returns a result as following:
mysql> SELECT u.user_name, g.group_name FROM cwd_user u, cwd_group g, cwd_membership m WHERE u.id = m.child_user_id AND g.id = m.parent_id AND u.user_name = 'TestUser';
+-----------+------------+
| user_name | group_name |
+-----------+------------+
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
| TestUser | Test_group |
+-----------+------------+
175 rows in set (0.00 sec)
Fix
There is none yet.
Workaround
Disable and remove the Directory on Confluence User directories link, restart your Confluence instance, then recreate the Directory again.