From 0ea193c303a1553fbde5a1637d40bfb46c8e5b73 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 16 Sep 2016 12:49:16 +0000
Subject: [PATCH] OPENDJ-3302 Do not replicate changes in schema elements related to configuration

---
 opendj-server-legacy/src/main/java/org/opends/server/schema/SchemaFilesWriter.java |   28 +++++++++++++++++++++++++++-
 1 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/schema/SchemaFilesWriter.java b/opendj-server-legacy/src/main/java/org/opends/server/schema/SchemaFilesWriter.java
index 3c7c0c0..77491e1 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/schema/SchemaFilesWriter.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/schema/SchemaFilesWriter.java
@@ -16,6 +16,9 @@
  */
 package org.opends.server.schema;
 
+import static org.opends.server.util.SchemaUtils.is02ConfigLdif;
+
+import static org.opends.server.util.SchemaUtils.parseSchemaFileFromElementDefinition;
 import static org.forgerock.opendj.ldap.ModificationType.ADD;
 import static org.forgerock.opendj.ldap.ModificationType.DELETE;
 import static org.forgerock.opendj.ldap.schema.CoreSchema.*;
@@ -228,7 +231,7 @@
         // so we don't re-find these same changes on the next startup.
         writeConcatenatedSchema();
       }
-      return mods;
+      return filterOutConfigSchemaElementFromModifications(mods);
     }
     catch (InitializationException ie)
     {
@@ -243,6 +246,29 @@
     }
   }
 
+  private List<Modification> filterOutConfigSchemaElementFromModifications(final List<Modification> mods)
+      throws DirectoryException
+  {
+    final List<Modification> filteredMods = new ArrayList<>();
+    for (Modification modification : mods)
+    {
+      for (ByteString v : modification.getAttribute())
+      {
+        String definition = v.toString();
+        if (!isFrom02ConfigLdif(definition))
+        {
+          filteredMods.add(modification);
+        }
+      }
+    }
+    return filteredMods;
+  }
+
+  private boolean isFrom02ConfigLdif(String definition) throws DirectoryException
+  {
+    return is02ConfigLdif(parseSchemaFileFromElementDefinition(definition));
+  }
+
   /**
    * Writes a single file containing all schema element definitions, which can be used on startup to
    * determine whether the schema files were edited with the server offline.

--
Gitblit v1.10.0