mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
20.43.2013 dbb807e73025bb71fafc8e9ad45968ca0a4b173a
OPENDJ-1205 Remove network layer from External ChangeLog implementation 


ExternalChangeLogSession.java, ExternalChangeLogSessionImpl.java: REMOVED

ReplicationServer.java:
Inlined createECLSession().

ECLSearchOperation.java:
Changed field ExternalChangeLogSession eclSession into ECLServerHandler eclServerHandler.
Converted startECLSessionMsg field to local variable.
Added method shutdownECLServerHandler().
2 files deleted
2 files modified
227 ■■■■ changed files
opendj-sdk/opends/src/server/org/opends/server/replication/common/ExternalChangeLogSession.java 53 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/replication/server/ExternalChangeLogSessionImpl.java 84 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java 12 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java 78 ●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/replication/common/ExternalChangeLogSession.java
File was deleted
opendj-sdk/opends/src/server/org/opends/server/replication/server/ExternalChangeLogSessionImpl.java
File was deleted
opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -1254,18 +1254,6 @@
  }
  /**
   * Create a new session to get the ECL.
   * @param msg The message that specifies the ECL request.
   * @return Returns the created session.
   * @throws DirectoryException When an error occurs.
   */
  public ExternalChangeLogSession createECLSession(StartECLSessionMsg msg)
  throws DirectoryException
  {
    return new ExternalChangeLogSessionImpl(this, msg);
  }
  /**
   * Getter on the server URL.
   * @return the server URL.
   */
opendj-sdk/opends/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java
@@ -39,10 +39,10 @@
import org.opends.server.core.*;
import org.opends.server.loggers.debug.DebugTracer;
import org.opends.server.replication.common.CSN;
import org.opends.server.replication.common.ExternalChangeLogSession;
import org.opends.server.replication.common.MultiDomainServerState;
import org.opends.server.replication.plugin.MultimasterReplication;
import org.opends.server.replication.protocol.*;
import org.opends.server.replication.server.ECLServerHandler;
import org.opends.server.replication.server.ReplicationServer;
import org.opends.server.types.*;
import org.opends.server.types.operation.PostOperationSearchOperation;
@@ -73,11 +73,6 @@
   */
  private static final DebugTracer TRACER = getTracer();
  /**
   * The ECL Start Session we'll send to the RS.
   */
  private StartECLSessionMsg startECLSessionMsg;
  /** The set of supported controls for this WE. */
  private static final Set<String> CHANGELOG_SUPPORTED_CONTROLS =
      new HashSet<String>(Arrays.asList(
@@ -159,7 +154,7 @@
   */
  private SearchFilter filter;
  private ExternalChangeLogSession eclSession;
  private ECLServerHandler eclServerHandler;
  /**
   * A flag to know if the ECLControl has been requested.
@@ -190,7 +185,7 @@
   *           if this operation should be canceled
   */
  void processECLSearch(ECLWorkflowElement wfe)
  throws CanceledOperationException
      throws CanceledOperationException
  {
    boolean executePostOpPlugins = false;
@@ -205,7 +200,8 @@
    {
      replicationServer  = wfe.getReplicationServer();
      clientConnection   = getClientConnection();
      startECLSessionMsg = new StartECLSessionMsg();
      final StartECLSessionMsg startECLSessionMsg = new StartECLSessionMsg();
      // Set default behavior as "from change number".
      // "from cookie" is set only when cookie is provided.
@@ -244,7 +240,7 @@
      // Analyse controls - including the cookie control
      try
      {
        handleRequestControls();
        handleRequestControls(startECLSessionMsg);
      }
      catch (DirectoryException de)
      {
@@ -299,7 +295,7 @@
      // Process the search.
      try
      {
        processSearch();
        processSearch(startECLSessionMsg);
      }
      catch (DirectoryException de)
      {
@@ -322,7 +318,7 @@
          persistentSearch.cancel();
          setSendResponse(true);
        }
        close(eclSession);
        shutdownECLServerHandler();
        throw coe;
      }
      catch (Exception e)
@@ -367,7 +363,8 @@
   * @throws  DirectoryException  If there is a problem with any of the request
   *                              controls.
   */
  private void handleRequestControls() throws DirectoryException
  private void handleRequestControls(StartECLSessionMsg startECLSessionMsg)
      throws DirectoryException
  {
    List<Control> requestControls  = getRequestControls();
    if (requestControls != null && !requestControls.isEmpty())
@@ -392,7 +389,7 @@
          continue;
        }
        if (oid.equals(OID_ECL_COOKIE_EXCHANGE_CONTROL))
        if (OID_ECL_COOKIE_EXCHANGE_CONTROL.equals(oid))
        {
          ExternalChangelogRequestControl eclControl =
            getRequestControl(ExternalChangelogRequestControl.DECODER);
@@ -405,7 +402,7 @@
            startECLSessionMsg.setCrossDomainServerState(cookie.toString());
          }
        }
        else if (oid.equals(OID_LDAP_ASSERTION))
        else if (OID_LDAP_ASSERTION.equals(oid))
        {
          LDAPAssertionRequestControl assertControl =
            getRequestControl(LDAPAssertionRequestControl.DECODER);
@@ -462,7 +459,7 @@
                    de.getMessageObject()), de);
          }
        }
        else if (oid.equals(OID_PROXIED_AUTH_V1))
        else if (OID_PROXIED_AUTH_V1.equals(oid))
        {
          // Log usage of legacy proxy authz V1 control.
          addAdditionalLogItem(AdditionalLogItem.keyOnly(getClass(),
@@ -490,7 +487,7 @@
            setProxiedAuthorizationDN(authorizationEntry.getDN());
          }
        }
        else if (oid.equals(OID_PROXIED_AUTH_V2))
        else if (OID_PROXIED_AUTH_V2.equals(oid))
        {
          // The requester must have the PROXIED_AUTH privilege in order to be
          // able to use this control.
@@ -514,7 +511,7 @@
            setProxiedAuthorizationDN(authorizationEntry.getDN());
          }
        }
        else if (oid.equals(OID_PERSISTENT_SEARCH))
        else if (OID_PERSISTENT_SEARCH.equals(oid))
        {
          PersistentSearchControl psearchControl =
            getRequestControl(PersistentSearchControl.DECODER);
@@ -532,13 +529,13 @@
            startECLSessionMsg.setPersistent(
                StartECLSessionMsg.PERSISTENT);
        }
        else if (oid.equals(OID_LDAP_SUBENTRIES))
        else if (OID_LDAP_SUBENTRIES.equals(oid))
        {
          SubentriesControl subentriesControl =
                  getRequestControl(SubentriesControl.DECODER);
          setReturnSubentriesOnly(subentriesControl.getVisibility());
        }
        else if (oid.equals(OID_LDUP_SUBENTRIES))
        else if (OID_LDUP_SUBENTRIES.equals(oid))
        {
          // Support for legacy draft-ietf-ldup-subentry.
          addAdditionalLogItem(AdditionalLogItem.keyOnly(getClass(),
@@ -546,25 +543,25 @@
          setReturnSubentriesOnly(true);
        }
        else if (oid.equals(OID_MATCHED_VALUES))
        else if (OID_MATCHED_VALUES.equals(oid))
        {
          MatchedValuesControl matchedValuesControl =
            getRequestControl(MatchedValuesControl.DECODER);
          setMatchedValuesControl(matchedValuesControl);
        }
        else if (oid.equals(OID_ACCOUNT_USABLE_CONTROL))
        else if (OID_ACCOUNT_USABLE_CONTROL.equals(oid))
        {
          setIncludeUsableControl(true);
        }
        else if (oid.equals(OID_REAL_ATTRS_ONLY))
        else if (OID_REAL_ATTRS_ONLY.equals(oid))
        {
          setRealAttributesOnly(true);
        }
        else if (oid.equals(OID_VIRTUAL_ATTRS_ONLY))
        else if (OID_VIRTUAL_ATTRS_ONLY.equals(oid))
        {
          setVirtualAttributesOnly(true);
        }
        else if (oid.equals(OID_GET_EFFECTIVE_RIGHTS) &&
        else if (OID_GET_EFFECTIVE_RIGHTS.equals(oid) &&
            DirectoryServer.isSupportedControl(OID_GET_EFFECTIVE_RIGHTS))
        {
          // Do nothing here and let AciHandler deal with it.
@@ -582,8 +579,8 @@
    }
  }
  private void processSearch() throws DirectoryException,
      CanceledOperationException
  private void processSearch(StartECLSessionMsg startECLSessionMsg)
      throws DirectoryException, CanceledOperationException
  {
    if (debugEnabled())
    {
@@ -591,13 +588,14 @@
          + startECLSessionMsg.getOperationId() + "]");
    }
    // Start a specific ECL session
    eclSession = replicationServer.createECLSession(startECLSessionMsg);
    // Start a specific ECL server handler
    eclServerHandler =
        new ECLServerHandler(replicationServer, startECLSessionMsg);
    boolean abortECLSession = false;
    try
    {
      // Get first update (this is needed to determine hasSubordinates.
      ECLUpdateMsg update = eclSession.getNextUpdate();
      ECLUpdateMsg update = eclServerHandler.getNextECLUpdate();
      // Return root entry if requested.
      if (CHANGELOG_ROOT_DN.matchesBaseAndScope(baseDN, getScope()))
@@ -632,7 +630,7 @@
          return;
        }
        update = eclSession.getNextUpdate();
        update = eclServerHandler.getNextECLUpdate();
      }
    }
    catch (CanceledOperationException e)
@@ -649,7 +647,7 @@
    {
      if (persistentSearch == null || abortECLSession)
      {
        close(eclSession);
        shutdownECLServerHandler();
      }
    }
  }
@@ -1080,8 +1078,8 @@
  public CancelResult cancel(CancelRequest cancelRequest)
  {
    if (debugEnabled())
      TRACER.debugInfo(this + " cancel() " + eclSession);
    close(eclSession);
      TRACER.debugInfo(this + " cancel() " + eclServerHandler);
    shutdownECLServerHandler();
    return super.cancel(cancelRequest);
  }
@@ -1090,8 +1088,16 @@
  public void abort(CancelRequest cancelRequest)
  {
    if (debugEnabled())
      TRACER.debugInfo(this + " abort() " + eclSession);
    close(eclSession);
      TRACER.debugInfo(this + " abort() " + eclServerHandler);
    shutdownECLServerHandler();
  }
  private void shutdownECLServerHandler()
  {
    if (eclServerHandler != null)
    {
      eclServerHandler.shutdown();
    }
  }
  /**