From 66e0ea567ae7d17fe9c348016b18c90a33fca561 Mon Sep 17 00:00:00 2001
From: Ludovic Poitou <ludovic.poitou@forgerock.com>
Date: Mon, 13 Jun 2011 10:09:55 +0000
Subject: [PATCH] Fix to OPENDJ-197: In the StaticGroup cache, keep members as strings (ByteString) rather than DN objects. These are much more compact. DNs are built from the ByteString only when needed.
---
opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java | 34 ++++++++++++++++++++++++++--------
1 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java b/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
index b582c06..7b0ccfc 100644
--- a/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
+++ b/opends/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
@@ -23,6 +23,7 @@
*
*
* Copyright 2008 Sun Microsystems, Inc.
+ * Portions Copyright 2011 ForgeRock AS
*/
package org.opends.server.extensions;
import org.opends.messages.Message;
@@ -33,6 +34,7 @@
import java.util.LinkedList;
import java.util.Set;
+import org.opends.server.types.ByteString;
import org.opends.server.types.DirectoryConfig;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.DN;
@@ -68,11 +70,11 @@
private DN groupDN;
// The iterator used to traverse the set of member DNs.
- private Iterator<DN> memberDNIterator;
+ private Iterator<ByteString> memberDNIterator;
// The set of DNs for the users that are members of the associated static
// group.
- private LinkedList<DN> memberDNs;
+ private LinkedList<ByteString> memberDNs;
@@ -85,12 +87,12 @@
* @param memberDNs The set of DNs for the users that are members of the
* associated static group.
*/
- public SimpleStaticGroupMemberList(DN groupDN, Set<DN> memberDNs)
+ public SimpleStaticGroupMemberList(DN groupDN, Set<ByteString> memberDNs)
{
ensureNotNull(groupDN, memberDNs);
this.groupDN = groupDN;
- this.memberDNs = new LinkedList<DN>(memberDNs);
+ this.memberDNs = new LinkedList<ByteString>(memberDNs);
memberDNIterator = memberDNs.iterator();
}
@@ -114,12 +116,28 @@
public DN nextMemberDN()
throws MembershipException
{
+ DN dn = null;
+
if (memberDNIterator.hasNext())
{
- return memberDNIterator.next();
+ try{
+ dn = DN.decode(memberDNIterator.next());
+ }
+ catch (DirectoryException de)
+ {
+ // Should not happen
+ if (debugEnabled())
+ {
+ TRACER.debugCaught(DebugLogLevel.ERROR, de);
+ }
+ Message message = ERR_STATICMEMBERS_CANNOT_DECODE_DN.
+ get(String.valueOf(dn), String.valueOf(groupDN),
+ String.valueOf(de.getMessageObject()));
+ throw new MembershipException(message, true, de);
+ }
}
- return null;
+ return dn;
}
@@ -133,11 +151,11 @@
{
if (memberDNIterator.hasNext())
{
- DN memberDN = memberDNIterator.next();
+ ByteString memberDN = memberDNIterator.next();
try
{
- Entry memberEntry = DirectoryConfig.getEntry(memberDN);
+ Entry memberEntry = DirectoryConfig.getEntry(DN.decode(memberDN));
if (memberEntry == null)
{
Message message = ERR_STATICMEMBERS_NO_SUCH_ENTRY.get(
--
Gitblit v1.10.0