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

ludovicp
27.24.2010 f7f439300fb47d381b9e14fd5b4a550fba08d2e3
Fix for issue with ECL in cookie mode: when building lastExternalChangelogCookie, we must ignore changes older than the purge date.
4 files modified
37 ■■■■ changed files
opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java 5 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java 4 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ReplicationServer.java 2 ●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java 26 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/DraftCNDbHandler.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2009 Sun Microsystems, Inc.
 *      Copyright 2009-2010 Sun Microsystems, Inc.
 */
package org.opends.server.replication.server;
import static org.opends.messages.ReplicationMessages.*;
@@ -386,7 +386,8 @@
            {
              // let's get the eligible part of the domain
              ServerState startSS = domain.getStartState();
              ServerState endSS= domain.getEligibleState(crossDomainEligibleCN);
              ServerState endSS= domain.getEligibleState(crossDomainEligibleCN,
                  true);
              ChangeNumber fcn = startSS.getMaxChangeNumber(cn.getServerId());
              ChangeNumber lcn = endSS.getMaxChangeNumber(cn.getServerId());
opends/src/server/org/opends/server/replication/server/ECLServerHandler.java
@@ -738,7 +738,7 @@
          if (isPersistent ==
            StartECLSessionMsg.PERSISTENT_CHANGES_ONLY)
          {
            newDomainCtxt.startState = rsd.getEligibleState(eligibleCN);
            newDomainCtxt.startState = rsd.getEligibleState(eligibleCN, true);
          }
          else
          {
@@ -781,7 +781,7 @@
            }
            // Set the stop state for the domain from the eligibleCN
            newDomainCtxt.stopState = rsd.getEligibleState(eligibleCN);
            newDomainCtxt.stopState = rsd.getEligibleState(eligibleCN, true);
          }
          newDomainCtxt.currentState = new ServerState();
opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -2072,7 +2072,7 @@
          continue;
        result.update(rsd.getBaseDn(), rsd.getEligibleState(
            getEligibleCN()));
            getEligibleCN(),false));
      }
    }
    return result;
opends/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -3119,10 +3119,13 @@
   *
   * The eligibleState is : s1;cn14 / s2;cn26 / s3;cn31
   *
   * @param eligibleCN The provided eligibleCN.
   * @param eligibleCN              The provided eligibleCN.
   * @param allowOlderThanPurgeDate When true, the returned state can be older
   *                                than the purge date of the domain.
   * @return The computed eligible server state.
   */
  public ServerState getEligibleState(ChangeNumber eligibleCN)
  public ServerState getEligibleState(ChangeNumber eligibleCN,
      boolean allowOlderThanPurgeDate)
  {
    ServerState result = new ServerState();
@@ -3188,6 +3191,25 @@
        }
      }
    }
    if (allowOlderThanPurgeDate == false)
    {
      boolean domainPurged = true;
      long latestDomainTrimDate = getLatestDomainTrimDate();
      Iterator<Integer> it = result.iterator();
      while (it.hasNext())
      {
        int sid = it.next();
        ChangeNumber cn = result.getMaxChangeNumber(sid);
        if ((cn.getTime()>0) && (cn.getTime()<latestDomainTrimDate))
          result.update(new ChangeNumber(0,0,sid));
        else
          domainPurged = false;
      }
      if (domainPurged == true)
        result.clear();
    }
    if (debugEnabled())
      TRACER.debugInfo("In " + this
        + " getEligibleState() result is " + result);