From 6ac20cf528ddcbf44b14f0df63f0af1d0cdafb69 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 30 May 2016 10:43:10 +0000
Subject: [PATCH] OPENDJ-2987 Adapt CompressedSchema to change on object classes
---
opendj-server-legacy/src/main/java/org/opends/server/api/CompressedSchema.java | 54 +++++++++++++-----------------------------------------
1 files changed, 13 insertions(+), 41 deletions(-)
diff --git a/opendj-server-legacy/src/main/java/org/opends/server/api/CompressedSchema.java b/opendj-server-legacy/src/main/java/org/opends/server/api/CompressedSchema.java
index d6cd1e1..80dfe0a 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/api/CompressedSchema.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/api/CompressedSchema.java
@@ -41,6 +41,7 @@
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.ByteStringBuilder;
import org.forgerock.opendj.ldap.schema.AttributeType;
+import org.forgerock.opendj.ldap.schema.ObjectClass;
import org.forgerock.opendj.ldap.schema.Schema;
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ServerContext;
@@ -48,8 +49,6 @@
import org.opends.server.types.AttributeBuilder;
import org.opends.server.types.Attributes;
import org.opends.server.types.DirectoryException;
-import org.forgerock.opendj.ldap.schema.ObjectClass;
-import org.opends.server.util.RemoveOnceSDKSchemaIsUsed;
/**
* This class provides a utility for interacting with compressed representations
@@ -124,22 +123,21 @@
}
}
- private Mappings reloadMappingsIfSchemaChanged(boolean force)
+ private Mappings reloadMappingsIfSchemaChanged()
{
- // @RemoveOnceSDKSchemaIsUsed remove the "force" parameter
sharedLock.lock();
boolean shared = true;
try
{
Schema currentSchema = serverContext.getSchemaNG();
- if (force || schemaNG != currentSchema)
+ if (schemaNG != currentSchema)
{
sharedLock.unlock();
exclusiveLock.lock();
shared = false;
currentSchema = serverContext.getSchemaNG();
- if (force || schemaNG != currentSchema)
+ if (schemaNG != currentSchema)
{
// build new maps from existing ones
Mappings newMappings = new Mappings(mappings.adEncodeMap.size(), mappings.ocEncodeMap.size());
@@ -200,15 +198,15 @@
throws DirectoryException
{
// First decode the encoded attribute description id.
- final int id = decodeId(reader);
+ final int adId = decodeId(reader);
// Before returning the attribute, make sure that the attribute type is not stale.
- final Mappings mappings = reloadMappingsIfSchemaChanged(false);
- final AttributeDescription ad = mappings.adDecodeMap.get(id);
+ final Mappings mappings = reloadMappingsIfSchemaChanged();
+ final AttributeDescription ad = mappings.adDecodeMap.get(adId);
if (ad == null)
{
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
- ERR_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN.get(id));
+ ERR_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN.get(adId));
}
AttributeType attrType = ad.getAttributeType();
@@ -253,45 +251,19 @@
final ByteSequenceReader reader) throws DirectoryException
{
// First decode the encoded object class id.
- final int id = decodeId(reader);
+ final int ocId = decodeId(reader);
- // Look up the object classes.
- final Mappings mappings = getMappings();
- Map<ObjectClass, String> ocMap = mappings.ocDecodeMap.get(id);
+ // Before returning the object classes, make sure that none of them are stale.
+ final Mappings mappings = reloadMappingsIfSchemaChanged();
+ Map<ObjectClass, String> ocMap = mappings.ocDecodeMap.get(ocId);
if (ocMap == null)
{
- // @RemoveOnceSDKSchemaIsUsed remove this first check (check is performed again later)
throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
- ERR_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN.get(id));
- }
- // Before returning the object classes, make sure that none of them are stale.
- boolean forceReload = isAnyObjectClassDirty(ocMap.keySet());
- final Mappings newMappings = reloadMappingsIfSchemaChanged(forceReload);
- if (mappings != newMappings)
- {
- ocMap = newMappings.ocDecodeMap.get(id);
- if (ocMap == null)
- {
- throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
- ERR_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN.get(id));
- }
+ ERR_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN.get(ocId));
}
return ocMap;
}
- @RemoveOnceSDKSchemaIsUsed
- private boolean isAnyObjectClassDirty(Set<ObjectClass> objectClasses)
- {
- for (final ObjectClass oc : objectClasses)
- {
- if (oc.isDirty())
- {
- return true;
- }
- }
- return false;
- }
-
/**
* Encodes the information in the provided attribute to a byte array.
*
--
Gitblit v1.10.0