Reverted part of r9660 and all of r9661.
I think it was invalid to think that we might want to call getCount() for a given serverId (hence replicaDB) by using the serverId from one of the CSNs. We can very well call getCount() with from and to CSNs that are not present on the targeted replicaDB.
| | |
| | | /** |
| | | * Count the number of changes in the replication changelog for the provided |
| | | * serverID, between 2 provided CSNs. |
| | | * @param serverId Identifier of the server for which to compute the count. |
| | | * @param from lower limit CSN. |
| | | * @param to upper limit CSN. |
| | | * @return the number of changes. |
| | | */ |
| | | public long getCount(CSN from, CSN to) |
| | | public long getCount(int serverId, CSN from, CSN to) |
| | | { |
| | | return domainDB.getCount(baseDN, from, to); |
| | | return domainDB.getCount(baseDN, serverId, from, to); |
| | | } |
| | | |
| | | /** |
| | |
| | | for (CSN csn : getLatestServerState()) |
| | | { |
| | | CSN startCSN = startState.getCSN(csn.getServerId()); |
| | | long serverIdRes = getCount(startCSN, endCSN); |
| | | long serverIdRes = getCount(csn.getServerId(), startCSN, endCSN); |
| | | |
| | | // The startPoint is excluded when counting the ECL eligible changes |
| | | if (startCSN != null && serverIdRes > 0) |
| | |
| | | long res = 0; |
| | | for (CSN csn : getLatestServerState()) |
| | | { |
| | | int serverId = csn.getServerId(); |
| | | CSN lStartCSN = |
| | | new CSN(startCSN.getTime(), startCSN.getSeqnum(), csn.getServerId()); |
| | | res += getCount(lStartCSN, endCSN); |
| | | new CSN(startCSN.getTime(), startCSN.getSeqnum(), serverId); |
| | | res += getCount(serverId, lStartCSN, endCSN); |
| | | } |
| | | return res; |
| | | } |
| | |
| | | * </ol> |
| | | * <h6>Example</h6> |
| | | * <p> |
| | | * Given the following replica database for baseDN "dc=example,dc=com": |
| | | * Given the following replica database for baseDN "dc=example,dc=com" and |
| | | * serverId 1: |
| | | * |
| | | * <pre> |
| | | * CSN1 <= Oldest |
| | |
| | | * Then: |
| | | * |
| | | * <pre> |
| | | * assertEquals(getCount("dc=example,dc=com", CSN1, CSN1), 1); |
| | | * assertEquals(getCount("dc=example,dc=com", CSN1, CSN2), 2); |
| | | * assertEquals(getCount("dc=example,dc=com", CSN1, CSN5), 5); |
| | | * assertEquals(getCount("dc=example,dc=com", null, CSN5), 5); |
| | | * assertEquals(getCount("dc=example,dc=com", CSN1, null), 0); |
| | | * assertEquals(getCount("dc=example,dc=com", null, null), 5); |
| | | * assertEquals(getCount("dc=example,dc=com", 1, CSN1, CSN1), 1); |
| | | * assertEquals(getCount("dc=example,dc=com", 1, CSN1, CSN2), 2); |
| | | * assertEquals(getCount("dc=example,dc=com", 1, CSN1, CSN5), 5); |
| | | * assertEquals(getCount("dc=example,dc=com", 1, null, CSN5), 5); |
| | | * assertEquals(getCount("dc=example,dc=com", 1, CSN1, null), 0); |
| | | * assertEquals(getCount("dc=example,dc=com", 1, null, null), 5); |
| | | * </pre> |
| | | * |
| | | * @param baseDN |
| | | * the replication domain baseDN |
| | | * @param serverId |
| | | * the serverId on which to act |
| | | * @param from |
| | | * The older CSN where to start the count |
| | | * @param to |
| | | * The newer CSN where to end the count |
| | | * @return The computed number of changes |
| | | */ |
| | | long getCount(DN baseDN, CSN from, CSN to); |
| | | long getCount(DN baseDN, int serverId, CSN from, CSN to); |
| | | |
| | | /** |
| | | * Returns the {@link CSN} situated immediately after the specified |
| | |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public long getCount(DN baseDN, CSN from, CSN to) |
| | | public long getCount(DN baseDN, int serverId, CSN from, CSN to) |
| | | { |
| | | JEReplicaDB replicaDB = getReplicaDB(baseDN, from.getServerId()); |
| | | JEReplicaDB replicaDB = getReplicaDB(baseDN, serverId); |
| | | if (replicaDB != null) |
| | | { |
| | | return replicaDB.getCount(from, to); |