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

Jean-Noël Rouvignac
01.26.2016 35e456ae00d596ac65b2fabf299ff0a49937fd96
OPENDJ-3133 dsreplication status reports M.C. (Missing Changes) when none exist

ReplicaOfflineMsg where incorrectly updating the server state of replicas (DSs).
The fix consists in ensuring the server state are not updated
while still allowing ReplicaOfflineMsgs to be forwarded to the topology.

The proposed change allow ServerWriter.run() to forward ReplicaOfflineMsgs
to other Replication Servers in the topology.

Side-note: here is the call hierarchy showing how the current change still allows ReplicaOfflineMsgs to be forwarded:
org.opends.server.replication.server.MessageHandler.updateServerState(UpdateMsg)
org.opends.server.replication.server.MessageHandler.getNextMessage()
org.opends.server.replication.server.ServerHandler.take()
org.opends.server.replication.server.ServerWriter.run()
1 files modified
10 ■■■■ changed files
opendj-server-legacy/src/main/java/org/opends/server/replication/server/MessageHandler.java 10 ●●●● patch | view | raw | blame | history
opendj-server-legacy/src/main/java/org/opends/server/replication/server/MessageHandler.java
@@ -23,9 +23,10 @@
import org.forgerock.i18n.LocalizableMessage;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.config.server.ConfigException;
import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.ResultCode;
import org.opends.server.api.MonitorData;
import org.forgerock.opendj.server.config.server.MonitorProviderCfg;
import org.opends.server.api.MonitorData;
import org.opends.server.api.MonitorProvider;
import org.opends.server.core.DirectoryServer;
import org.opends.server.replication.common.CSN;
@@ -33,7 +34,6 @@
import org.opends.server.replication.protocol.UpdateMsg;
import org.opends.server.replication.server.changelog.api.ChangelogException;
import org.opends.server.replication.server.changelog.api.DBCursor;
import org.forgerock.opendj.ldap.DN;
import org.opends.server.types.DirectoryException;
import org.opends.server.types.InitializationException;
@@ -582,7 +582,11 @@
   */
  boolean updateServerState(UpdateMsg msg)
  {
    return serverState.update(msg.getCSN());
    return msg.contributesToDomainState()
        ? serverState.update(msg.getCSN())
        // Do not update the server state with an offline CSN,
        // to avoid missing-changes being incorrectly reported
        : !serverState.cover(msg.getCSN());
  }
  /**