From 67649485a8b644abfc3f0ab7890df02d6e9fe2e8 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 22 Aug 2013 14:13:20 +0000
Subject: [PATCH] ReplicationIterator.java: Renamed releaseCursor() to close(). Now extends Closeable.

---
 opends/src/server/org/opends/server/replication/server/ReplicationBackend.java |  279 +++++++++++++++++++------------------------------------
 1 files changed, 96 insertions(+), 183 deletions(-)

diff --git a/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java b/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
index f1b4c56..f693b33 100644
--- a/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
+++ b/opends/src/server/org/opends/server/replication/server/ReplicationBackend.java
@@ -27,15 +27,6 @@
  */
 package org.opends.server.replication.server;
 
-import static org.opends.messages.BackendMessages.*;
-import static org.opends.messages.JebMessages.*;
-import static org.opends.messages.ReplicationMessages.*;
-import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.*;
-import static org.opends.server.loggers.debug.DebugLogger.*;
-import static org.opends.server.util.ServerConstants.*;
-import static org.opends.server.util.StaticUtils.*;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -45,69 +36,31 @@
 import org.opends.messages.Message;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ServerManagementContext;
-import org.opends.server.admin.std.server.BackendCfg;
-import org.opends.server.admin.std.server.ReplicationServerCfg;
-import org.opends.server.admin.std.server.ReplicationSynchronizationProviderCfg;
-import org.opends.server.admin.std.server.RootCfg;
-import org.opends.server.admin.std.server.SynchronizationProviderCfg;
+import org.opends.server.admin.std.server.*;
 import org.opends.server.api.Backend;
 import org.opends.server.api.SynchronizationProvider;
 import org.opends.server.backends.jeb.BackupManager;
 import org.opends.server.config.ConfigException;
-import org.opends.server.core.AddOperation;
-import org.opends.server.core.DeleteOperation;
-import org.opends.server.core.DirectoryServer;
-import org.opends.server.core.ModifyDNOperation;
-import org.opends.server.core.ModifyOperation;
-import org.opends.server.core.SearchOperation;
+import org.opends.server.core.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.protocols.internal.InternalSearchOperation;
 import org.opends.server.replication.common.ChangeNumber;
 import org.opends.server.replication.plugin.MultimasterReplication;
 import org.opends.server.replication.plugin.ReplicationServerListener;
-import org.opends.server.replication.protocol.AddMsg;
-import org.opends.server.replication.protocol.DeleteMsg;
-import org.opends.server.replication.protocol.LDAPUpdateMsg;
-import org.opends.server.replication.protocol.ModifyDNMsg;
-import org.opends.server.replication.protocol.ModifyMsg;
-import org.opends.server.replication.protocol.UpdateMsg;
+import org.opends.server.replication.protocol.*;
 import org.opends.server.replication.server.changelog.api.ReplicationIterator;
-import org.opends.server.types.Attribute;
-import org.opends.server.types.AttributeBuilder;
-import org.opends.server.types.AttributeType;
-import org.opends.server.types.Attributes;
-import org.opends.server.types.BackupConfig;
-import org.opends.server.types.BackupDirectory;
-import org.opends.server.types.ByteString;
-import org.opends.server.types.CanceledOperationException;
-import org.opends.server.types.ConditionResult;
-import org.opends.server.types.Control;
-import org.opends.server.types.DN;
-import org.opends.server.types.DebugLogLevel;
-import org.opends.server.types.DirectoryException;
-import org.opends.server.types.DereferencePolicy;
-import org.opends.server.types.Entry;
-import org.opends.server.types.FilterType;
-import org.opends.server.types.IndexType;
-import org.opends.server.types.InitializationException;
-import org.opends.server.types.LDIFExportConfig;
-import org.opends.server.types.LDIFImportConfig;
-import org.opends.server.types.LDIFImportResult;
-import org.opends.server.types.RawAttribute;
-import org.opends.server.types.RestoreConfig;
-import org.opends.server.types.ResultCode;
-import org.opends.server.types.SearchFilter;
-import org.opends.server.types.SearchScope;
-import org.opends.server.types.SearchResultEntry;
-import org.opends.server.types.ObjectClass;
-import org.opends.server.util.AddChangeRecordEntry;
-import org.opends.server.util.DeleteChangeRecordEntry;
-import org.opends.server.util.LDIFReader;
-import org.opends.server.util.LDIFWriter;
-import org.opends.server.util.ModifyChangeRecordEntry;
-import org.opends.server.util.ModifyDNChangeRecordEntry;
-import org.opends.server.util.Validator;
+import org.opends.server.types.*;
+import org.opends.server.util.*;
+
+import static org.opends.messages.BackendMessages.*;
+import static org.opends.messages.JebMessages.*;
+import static org.opends.messages.ReplicationMessages.*;
+import static org.opends.server.config.ConfigConstants.*;
+import static org.opends.server.loggers.ErrorLogger.*;
+import static org.opends.server.loggers.debug.DebugLogger.*;
+import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.util.StaticUtils.*;
 
 /**
  * This class defines a backend that stores its information in an
@@ -370,35 +323,33 @@
   @Override()
   public synchronized Entry getEntry(DN entryDN)
   {
-    Entry e = null;
     try {
-      if(baseDNSet.contains(entryDN)) {
+      if (baseDNSet.contains(entryDN)) {
            return new Entry(entryDN, rootObjectclasses, attributes,
                             operationalAttributes);
-      } else {
-        InternalClientConnection conn =
-                InternalClientConnection.getRootConnection();
-        SearchFilter filter=
-                SearchFilter.createFilterFromString("(changetype=*)");
-        InternalSearchOperation searchOperation =
-                new InternalSearchOperation(conn,
-                        InternalClientConnection.nextOperationID(),
-                        InternalClientConnection.nextMessageID(), null, entryDN,
-                        SearchScope.BASE_OBJECT,
-                        DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
-                        filter, null, null);
-        search(searchOperation);
-        LinkedList<SearchResultEntry> resultEntries =
-                searchOperation.getSearchEntries();
-        if(resultEntries.size() != 0) {
-          e=resultEntries.getFirst();
-        }
       }
-    } catch (DirectoryException ex) {
-      e=null;
-    }
-    return e;
 
+      InternalClientConnection conn =
+          InternalClientConnection.getRootConnection();
+      SearchFilter filter =
+          SearchFilter.createFilterFromString("(changetype=*)");
+      InternalSearchOperation searchOp = new InternalSearchOperation(conn,
+              InternalClientConnection.nextOperationID(),
+              InternalClientConnection.nextMessageID(),
+              null, entryDN, SearchScope.BASE_OBJECT,
+              DereferencePolicy.NEVER_DEREF_ALIASES, 0, 0, false,
+              filter, null, null);
+      search(searchOp);
+      List<SearchResultEntry> resultEntries = searchOp.getSearchEntries();
+      if (resultEntries.size() != 0)
+      {
+        return resultEntries.get(0);
+      }
+    }
+    catch (DirectoryException ignored)
+    {
+    }
+    return null;
   }
 
 
@@ -547,9 +498,9 @@
 
     exportRootChanges(exportContainers, exportConfig, ldifWriter);
 
-    // Iterate through the containers.
     try
     {
+      // Iterate through the containers.
       for (ReplicationServerDomain exportContainer : exportContainers)
       {
         if (exportConfig.isCancelled())
@@ -563,18 +514,7 @@
     {
       timer.cancel();
 
-      // Close the LDIF writer
-      try
-      {
-        ldifWriter.close();
-      }
-      catch (Exception e)
-      {
-        if (debugEnabled())
-        {
-          TRACER.debugCaught(DebugLogLevel.ERROR, e);
-        }
-      }
+      close(ldifWriter);
     }
 
     long finishTime = System.currentTimeMillis();
@@ -628,7 +568,7 @@
    * Exports the root changes of the export, and one entry by domain.
    */
   private void exportRootChanges(List<ReplicationServerDomain> exportContainers,
-      LDIFExportConfig exportConfig, LDIFWriter ldifWriter)
+      final LDIFExportConfig exportConfig, LDIFWriter ldifWriter)
   {
     AttributeType ocType = DirectoryServer.getObjectClassAttributeType();
     AttributeBuilder builder = new AttributeBuilder(ocType);
@@ -645,47 +585,49 @@
 
     try
     {
-      AddChangeRecordEntry changeRecord =
-        new AddChangeRecordEntry(DN.decode(BASE_DN),
-                               attrs);
+      ChangeRecordEntry changeRecord =
+        new AddChangeRecordEntry(DN.decode(BASE_DN), attrs);
       ldifWriter.writeChangeRecord(changeRecord);
     }
     catch (Exception e) { /* do nothing */ }
 
+    if (exportConfig == null)
+    {
+      return;
+    }
+
     for (ReplicationServerDomain exportContainer : exportContainers)
     {
-      if (exportConfig != null && exportConfig.isCancelled())
+      if (exportConfig.isCancelled())
       {
         break;
       }
 
       attrs.clear();
 
+      // TODO JNR these multiple calls to clear() are more than suspect!
       ldapAttrList.clear();
       ldapAttrList.add(ocAttr);
       attrs.put(ocType, ldapAttrList);
 
       TRACER.debugInfo("State=" +
           exportContainer.getDbServerState());
-      Attribute stateAttr = Attributes.create("state", exportContainer
-          .getDbServerState().toString());
+      Attribute stateAttr = Attributes.create("state",
+          exportContainer.getDbServerState().toString());
       ldapAttrList.clear();
       ldapAttrList.add(stateAttr);
       attrs.put(stateAttr.getAttributeType(), ldapAttrList);
 
-      Attribute genidAttr = Attributes.create("generation-id", String
-          .valueOf(exportContainer.getGenerationId())
-          + exportContainer.getBaseDn());
+      Attribute genidAttr = Attributes.create("generation-id",
+          exportContainer.getGenerationId() + exportContainer.getBaseDn());
       ldapAttrList.clear();
       ldapAttrList.add(genidAttr);
       attrs.put(genidAttr.getAttributeType(), ldapAttrList);
 
       try
       {
-        AddChangeRecordEntry changeRecord =
-          new AddChangeRecordEntry(DN.decode(
-              exportContainer.getBaseDn() + "," + BASE_DN),
-              attrs);
+        ChangeRecordEntry changeRecord = new AddChangeRecordEntry(
+            DN.decode(exportContainer.getBaseDn() + "," + BASE_DN), attrs);
         ldifWriter.writeChangeRecord(changeRecord);
       }
       catch (Exception e)
@@ -709,7 +651,6 @@
       LDIFExportConfig exportConfig, LDIFWriter ldifWriter,
       SearchOperation searchOperation)
   {
-    // Walk through the servers
     for (int serverId : rsd.getServers())
     {
       if (exportConfig != null && exportConfig.isCancelled())
@@ -742,7 +683,6 @@
 
       ReplicationIterator ri = rsd.getChangelogIterator(serverId,
           previousChangeNumber);
-
       if (ri != null)
       {
         try
@@ -794,7 +734,7 @@
         }
         finally
         {
-          ri.releaseCursor();
+          close(ri);
         }
       }
     }
@@ -815,7 +755,6 @@
       DirectoryServer.getDefaultAttributeType(CHANGE_NUMBER);
 
     FilterType filterType = filter.getFilterType();
-
     if ( (filterType.equals(FilterType.GREATER_OR_EQUAL) ||
              filterType.equals(FilterType.EQUALITY) ) &&
              filter.getAttributeType().equals(changeNumberAttrType))
@@ -904,7 +843,7 @@
 
           if (exportConfig != null)
           {
-            AddChangeRecordEntry changeRecord =
+            ChangeRecordEntry changeRecord =
               new AddChangeRecordEntry(dn, attrs);
             ldifWriter.writeChangeRecord(changeRecord);
           }
@@ -915,76 +854,31 @@
         }
         else if (msg instanceof DeleteMsg)
         {
-          DeleteMsg delMsg = (DeleteMsg)msg;
+          dn = computeDN(msg);
 
-          dn = DN.decode("uuid=" + msg.getEntryUUID() + "," +
-              CHANGE_NUMBER + "=" + delMsg.getChangeNumber() + "," +
-              msg.getDn() +","+ BASE_DN);
-
-          DeleteChangeRecordEntry changeRecord =
-            new DeleteChangeRecordEntry(dn);
-          if (exportConfig != null)
-          {
-            ldifWriter.writeChangeRecord(changeRecord);
-          }
-          else
-          {
-            Writer writer = new Writer();
-            LDIFWriter ldifWriter2 = writer.getLDIFWriter();
-            ldifWriter2.writeChangeRecord(changeRecord);
-            LDIFReader reader = writer.getLDIFReader();
-            entry = reader.readEntry();
-          }
+          ChangeRecordEntry changeRecord = new DeleteChangeRecordEntry(dn);
+          entry = writeChangeRecord(exportConfig, ldifWriter, changeRecord);
         }
         else if (msg instanceof ModifyMsg)
         {
           ModifyOperation op = (ModifyOperation)msg.createOperation(conn);
-
-          dn = DN.decode("uuid=" + msg.getEntryUUID() + "," +
-              CHANGE_NUMBER + "=" + msg.getChangeNumber() + "," +
-              msg.getDn() +","+ BASE_DN);
           op.setInternalOperation(true);
 
-          ModifyChangeRecordEntry changeRecord =
+          dn = computeDN(msg);
+          ChangeRecordEntry changeRecord =
             new ModifyChangeRecordEntry(dn, op.getRawModifications());
-          if (exportConfig != null)
-          {
-            ldifWriter.writeChangeRecord(changeRecord);
-          }
-          else
-          {
-            Writer writer = new Writer();
-            LDIFWriter ldifWriter2 = writer.getLDIFWriter();
-            ldifWriter2.writeChangeRecord(changeRecord);
-            LDIFReader reader = writer.getLDIFReader();
-            entry = reader.readEntry();
-          }
+          entry = writeChangeRecord(exportConfig, ldifWriter, changeRecord);
         }
         else if (msg instanceof ModifyDNMsg)
         {
           ModifyDNOperation op = (ModifyDNOperation)msg.createOperation(conn);
-
-          dn = DN.decode("uuid=" + msg.getEntryUUID() + "," +
-              CHANGE_NUMBER + "=" + msg.getChangeNumber() + "," +
-              msg.getDn() +","+ BASE_DN);
           op.setInternalOperation(true);
 
-          ModifyDNChangeRecordEntry changeRecord =
+          dn = computeDN(msg);
+          ChangeRecordEntry changeRecord =
             new ModifyDNChangeRecordEntry(dn, op.getNewRDN(), op.deleteOldRDN(),
                 op.getNewSuperior());
-
-          if (exportConfig != null)
-          {
-            ldifWriter.writeChangeRecord(changeRecord);
-          }
-          else
-          {
-            Writer writer = new Writer();
-            LDIFWriter ldifWriter2 = writer.getLDIFWriter();
-            ldifWriter2.writeChangeRecord(changeRecord);
-            LDIFReader reader = writer.getLDIFReader();
-            entry = reader.readEntry();
-          }
+          entry = writeChangeRecord(exportConfig, ldifWriter, changeRecord);
         }
 
         if (exportConfig != null)
@@ -1009,9 +903,8 @@
           SearchScope  scope  = searchOperation.getScope();
           SearchFilter filter = searchOperation.getFilter();
 
-          boolean ms = entry.matchesBaseAndScope(searchBaseDN, scope);
-          boolean mf = filter.matchesEntry(entry);
-          if ( ms && mf )
+          if (entry.matchesBaseAndScope(searchBaseDN, scope)
+              && filter.matchesEntry(entry))
           {
             searchOperation.returnEntry(entry, new LinkedList<Control>());
           }
@@ -1025,7 +918,6 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message;
       String dnStr;
       if (dn == null)
       {
@@ -1035,6 +927,7 @@
       {
         dnStr = dn.toNormalizedString();
       }
+      Message message;
       if (exportConfig != null)
       {
         message = ERR_BACKEND_EXPORT_ENTRY.get(
@@ -1049,6 +942,30 @@
     }
   }
 
+
+  private DN computeDN(LDAPUpdateMsg msg) throws DirectoryException
+  {
+    return DN.decode("uuid=" + msg.getEntryUUID() + "," + CHANGE_NUMBER + "="
+        + msg.getChangeNumber() + "," + msg.getDn() + "," + BASE_DN);
+  }
+
+  private Entry writeChangeRecord(LDIFExportConfig exportConfig,
+      LDIFWriter ldifWriter, ChangeRecordEntry changeRecord)
+      throws IOException, LDIFException
+  {
+    if (exportConfig != null)
+    {
+      ldifWriter.writeChangeRecord(changeRecord);
+      return null;
+    }
+
+    final Writer writer = new Writer();
+    final LDIFWriter ldifWriter2 = writer.getLDIFWriter();
+    ldifWriter2.writeChangeRecord(changeRecord);
+    final LDIFReader ldifReader = writer.getLDIFReader();
+    return ldifReader.readEntry();
+  }
+
   /**
    * Add an attribute to a provided Map of attribute.
    *
@@ -1326,20 +1243,16 @@
     if (server==null)
     {
       server = getReplicationServer();
-
       if (server == null)
       {
-        if (baseDNSet.contains(searchBaseDN))
+        if (!baseDNSet.contains(searchBaseDN))
         {
-          return;
-        }
-        else
-        {
-          Message message = ERR_REPLICATIONBACKEND_ENTRY_DOESNT_EXIST.
-          get(String.valueOf(searchBaseDN));
+          Message message = ERR_REPLICATIONBACKEND_ENTRY_DOESNT_EXIST.get(
+              String.valueOf(searchBaseDN));
           throw new DirectoryException(
               ResultCode.NO_SUCH_OBJECT, message, null, null);
         }
+        return;
       }
     }
 

--
Gitblit v1.10.0