| | |
| | | * 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); |
| | |
| | | { |
| | | // 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; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | 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)); |
| | | |
| | |
| | | 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)); |
| | | |