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

Jean-Noel Rouvignac
13.16.2013 25bd113aca0224d16369621fbfb68e0f639c4162
Complement of r9789

ECLServerHandler.java:
Consequence of the change to ERR_INVALID_COOKIE_SYNTAX.
In getNextECLUpdate(), extracted method isBeyondLastRequestedChangeNumber().
1 files modified
24 ■■■■■ changed files
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java 24 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -795,8 +795,7 @@
      }
      else
      {
        // let's take the start state for this domain from the provided
        // cookie
        // let's take the start state for this domain from the provided cookie
        newDomainCtxt.startState =
            startStatesFromProvidedCookie.remove(domain.getBaseDN());
@@ -867,6 +866,7 @@
    */
    if (!startStatesFromProvidedCookie.isEmpty() && allowUnknownDomains)
    {
      // JNR: Will the following code trigger a ConcurrentModificationException?
      for (DN providedDomain : startStatesFromProvidedCookie.keySet())
        if (rs.getReplicationServerDomain(providedDomain) == null)
          // the domain provided in the cookie is not replicated
@@ -1039,17 +1039,16 @@
    isPersistent  = startECLSessionMsg.isPersistent();
    lastChangeNumber = startECLSessionMsg.getLastChangeNumber();
    searchPhase   = INIT_PHASE;
    final String cookie = startECLSessionMsg.getCrossDomainServerState();
    try
    {
      previousCookie = new MultiDomainServerState(
        startECLSessionMsg.getCrossDomainServerState());
      previousCookie = new MultiDomainServerState(cookie);
    }
    catch(Exception e)
    {
      TRACER.debugCaught(DebugLogLevel.ERROR, e);
      throw new DirectoryException(
          ResultCode.PROTOCOL_ERROR,
          ERR_INVALID_COOKIE_SYNTAX.get());
      throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
          ERR_INVALID_COOKIE_SYNTAX.get(cookie));
    }
    excludedBaseDNs = startECLSessionMsg.getExcludedBaseDNs();
@@ -1236,9 +1235,7 @@
        oldestContext.currentState.update(change.getUpdateMsg().getCSN());
        if (oldestContext.currentState.cover(oldestContext.stopState)
            || (draftCompat
                && lastChangeNumber > 0
                && change.getChangeNumber() > lastChangeNumber))
            || isBeyondLastRequestedChangeNumber(change))
        {
          oldestContext.active = false;
        }
@@ -1298,6 +1295,13 @@
    return oldestChange;
  }
  private boolean isBeyondLastRequestedChangeNumber(final ECLUpdateMsg change)
  {
    return draftCompat
        && 0 < lastChangeNumber
        && lastChangeNumber < change.getChangeNumber();
  }
  private ECLUpdateMsg newECLUpdateMsg(DomainContext ctx)
  {
    // cookie will be set later AND changeNumber may be set later