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

ludovicp
31.06.2010 3108952a616e5a7548f646555c716bdc52db91ea
Resolve an issue where some changes might appear to be missing after restoring a backend. A replayed change that resolve in no change still must update the historical information.
4 files modified
86 ■■■■■ changed files
opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java 14 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java 12 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/protocol/ModifyMsg.java 25 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/server/MsgQueue.java 35 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java
@@ -2257,15 +2257,6 @@
        numResolvedModifyConflicts.incrementAndGet();
      }
      if (modifyOperation.getModifications().isEmpty())
      {
        /*
         * This operation becomes a no-op due to conflict resolution
         * stop the processing and send an OK result
         */
        return new SynchronizationProviderResult.StopProcessing(
            ResultCode.SUCCESS, null);
      }
    }
    return new SynchronizationProviderResult.ContinueProcessing();
  }
@@ -3160,11 +3151,6 @@
    // Find an rename child entries.
    InternalClientConnection conn =
      InternalClientConnection.getRootConnection();
    DeleteContext ctx =
      (DeleteContext) conflictOp.getAttachment(SYNCHROCONTEXT);
    ChangeNumber cn = null;
    if (ctx != null)
      cn = ctx.getChangeNumber();
    try
    {
opends/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Copyright 2006-2010 Sun Microsystems, Inc.
 */
package org.opends.server.replication.plugin;
@@ -506,6 +506,16 @@
    historicalInformation.generateState(modifyOperation);
    if (modifyOperation.getModifications().isEmpty())
    {
      /*
       * This operation becomes a no-op due to conflict resolution
       * stop the processing and send an OK result
       */
      return new SynchronizationProviderResult.StopProcessing(
          ResultCode.SUCCESS, null);
    }
    return new SynchronizationProviderResult.ContinueProcessing();
  }
opends/src/server/org/opends/server/replication/protocol/ModifyMsg.java
@@ -22,7 +22,7 @@
 * CDDL HEADER END
 *
 *
 *      Copyright 2006-2009 Sun Microsystems, Inc.
 *      Copyright 2006-2010 Sun Microsystems, Inc.
 */
package org.opends.server.replication.protocol;
@@ -169,6 +169,23 @@
    }
    if (protocolVersion >= ProtocolVersion.REPLICATION_PROTOCOL_V2)
    {
      String mods = "";
      try
      {
        ArrayList<RawModification> ldapmods = decodeRawMods(encodedMods);
        for (RawModification mod : ldapmods)
        {
          mods += mod.toString();
        }
      } catch (LDAPException e)
      {
      } catch (ASN1Exception e)
      {
      }
      return "ModifyMsg content: " +
        " protocolVersion: " + protocolVersion +
        " dn: " + dn +
@@ -176,7 +193,11 @@
        " uniqueId: " + uniqueId +
        " assuredFlag: " + assuredFlag +
        " assuredMode: " + assuredMode +
        " safeDataLevel: " + safeDataLevel;
        " safeDataLevel: " + safeDataLevel +
        " size: " + encodedMods.length +
        mods;
    }
    return "!!! Unknown version: " + protocolVersion + "!!!";
  }
opends/src/server/org/opends/server/replication/server/MsgQueue.java
@@ -35,7 +35,6 @@
import org.opends.messages.Message;
import org.opends.server.replication.common.ChangeNumber;
import org.opends.server.replication.protocol.UpdateMsg;
import java.util.Arrays;
/**
 * This class is used to build ordered lists of UpdateMsg.
@@ -132,23 +131,29 @@
        boolean sameMsgs = false;
        try
        {
          sameMsgs = Arrays.equals(
              msgSameChangeNumber.getBytes(),update.getBytes());
          if (
            (msgSameChangeNumber.getBytes().length == update.getBytes().length)
            && (msgSameChangeNumber.isAssured() == update.isAssured())
            && (msgSameChangeNumber.getVersion() == update.getVersion()) )
            {
              sameMsgs = true;
            }
            if (!sameMsgs)
            {
              // Adding 2 msgs with the same ChangeNumber is ok only when
              // the 2 masgs are the same
              bytesCount += (update.size() - msgSameChangeNumber.size());
              Message errMsg = ERR_RSQUEUE_DIFFERENT_MSGS_WITH_SAME_CN.get(
                  msgSameChangeNumber.getChangeNumber().toString(),
                  msgSameChangeNumber.toString(),
                  update.toString());
              logError(errMsg);
            }
        }
        catch(Exception e)
        {}
        if (!sameMsgs)
        {
          // Adding 2 msgs with the same ChangeNumber is ok only when the 2 msgs
          // are the same
          bytesCount += (update.size() - msgSameChangeNumber.size());
          Message errMsg = ERR_RSQUEUE_DIFFERENT_MSGS_WITH_SAME_CN.get(
              msgSameChangeNumber.toString(),
              msgSameChangeNumber.toString(),
              update.toString());
          logError(errMsg);
        }
      }
      else
      {