| | |
| | | |
| | | // A mapping between the DNs of all group entries and the corresponding |
| | | // group instances. |
| | | private DITCacheMap<Group> groupInstances; |
| | | private DITCacheMap<Group> |
| | | groupInstances; |
| | | |
| | | // Lock to protect internal data structures. |
| | | private final ReentrantReadWriteLock lock; |
| | |
| | | } |
| | | } |
| | | } |
| | | lock.writeLock().lock(); |
| | | try |
| | | { |
| | | createAndRegisterGroup(entry); |
| | | refreshToken++; |
| | | } |
| | | finally |
| | | { |
| | | lock.writeLock().unlock(); |
| | | } |
| | | createAndRegisterGroup(entry); |
| | | } |
| | | |
| | | |
| | |
| | | lock.writeLock().lock(); |
| | | try |
| | | { |
| | | groupInstances.removeSubtree(entry.getDN(), null); |
| | | refreshToken++; |
| | | if (groupInstances.removeSubtree(entry.getDN(), null)) |
| | | { |
| | | refreshToken++; |
| | | } |
| | | } |
| | | finally |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | lock.readLock().lock(); |
| | | try |
| | | { |
| | | if (!groupInstances.containsKey(oldEntry.getDN())) |
| | | { |
| | | // If the modified entry is not in any group instance, it's probably |
| | | // not a group, exit fast |
| | | return; |
| | | } |
| | | } |
| | | finally |
| | | { |
| | | lock.readLock().unlock(); |
| | | } |
| | | |
| | | lock.writeLock().lock(); |
| | | try |
| | | { |
| | |
| | | groupInstances.remove(oldEntry.getDN()); |
| | | } |
| | | createAndRegisterGroup(newEntry); |
| | | refreshToken++; |
| | | } |
| | | } |
| | | finally |
| | |
| | | group.setGroupDN(groupDN); |
| | | groupInstances.put(groupDN, group); |
| | | } |
| | | refreshToken++; |
| | | if (!groupSet.isEmpty()) |
| | | { |
| | | refreshToken++; |
| | | } |
| | | } |
| | | finally |
| | | { |
| | |
| | | try |
| | | { |
| | | groupInstances.put(entry.getDN(), groupInstance); |
| | | refreshToken++; |
| | | } |
| | | finally |
| | | { |