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

mrossign
20.35.2010 6de977a01df7e4081f868d9d46961d4e8ad31e88
When choosing the best RS, if some of them have later changes (from the local DS) than the local DS has, retain only those that have the latest available changes.
This also fixes the ComputeBestServerTest#test3ServersUp unit test that sometimes may fail.
2 files modified
28 ■■■■ changed files
opends/src/server/org/opends/server/replication/service/ReplicationBroker.java 24 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ComputeBestServerTest.java 4 ●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/replication/service/ReplicationBroker.java
@@ -1844,8 +1844,10 @@
     * Find replication servers who are up to date (or more up to date than us,
     * if for instance we failed and restarted, having sent some changes to the
     * RS but without having time to store our own state) regarding our own
     * server id. If some servers more up to date, prefer this list.
     * server id. If some servers more up to date, prefer this list but take
     * only the latest change number.
     */
    ChangeNumber latestRsChangeNumber = null;
    for (Integer rsId : bestServers.keySet())
    {
      ReplicationServerInfo replicationServerInfo = bestServers.get(rsId);
@@ -1868,7 +1870,25 @@
        {
          // This replication server is even more up to date than the local
          // server
          moreUpToDateServers.put(rsId, replicationServerInfo);
          if (latestRsChangeNumber == null)
          {
            // Initialize the latest change number
            latestRsChangeNumber = rsChangeNumber;
          }
          if (rsChangeNumber.newerOrEquals(latestRsChangeNumber))
          {
            if (rsChangeNumber.equals(latestRsChangeNumber))
            {
              moreUpToDateServers.put(rsId, replicationServerInfo);
            } else
            {
              // This RS is even more up to date, clear the list and store this
              // new RS
              moreUpToDateServers.clear();
              moreUpToDateServers.put(rsId, replicationServerInfo);
              latestRsChangeNumber = rsChangeNumber;
            }
          }
        }
      }
    }
opends/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ComputeBestServerTest.java
@@ -528,7 +528,7 @@
    cn = new ChangeNumber(4L, 0, myId3);
    aState.update(cn);
    replServerStartMsg =
      new ReplServerStartMsg(12, WINNER, null, 0, aState, (short)0, 0L,
      new ReplServerStartMsg(12, LOOSER2, null, 0, aState, (short)0, 0L,
      false, (byte)1, 0);
    rsInfos.put(12, ReplicationServerInfo.newInstance(replServerStartMsg));
@@ -541,7 +541,7 @@
    cn = new ChangeNumber(1L, 0, myId3);
    aState.update(cn);
    replServerStartMsg =
      new ReplServerStartMsg(13, LOOSER2, null, 0, aState, (short)0, 0L,
      new ReplServerStartMsg(13, WINNER, null, 0, aState, (short)0, 0L,
      false, (byte)1, 0);
    rsInfos.put(13, ReplicationServerInfo.newInstance(replServerStartMsg));