CEP-15 (C*) When a host replacement happens don't loose the peer mapping right away (#60)
patch by David Capwell; reviewed by Blake Eggleston for CASSANDRA-18764
diff --git a/accord-core/src/main/java/accord/api/ConfigurationService.java b/accord-core/src/main/java/accord/api/ConfigurationService.java
index 4e6943f..6ad9f20 100644
--- a/accord-core/src/main/java/accord/api/ConfigurationService.java
+++ b/accord-core/src/main/java/accord/api/ConfigurationService.java
@@ -173,7 +173,7 @@
* On invocation the system is not necessarily ready to process the epoch, and the BootstrapReady parameter
* provides indications of when the bootstrap has completed various phases of setup.
*/
- void acknowledgeEpoch(EpochReady ready);
+ void acknowledgeEpoch(EpochReady ready, boolean startSync);
void reportEpochClosed(Ranges ranges, long epoch);
diff --git a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
index 7132f8d..d8ebab8 100644
--- a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
+++ b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java
@@ -233,10 +233,10 @@
fetchTopologyInternal(epoch);
}
- protected abstract void localSyncComplete(Topology topology);
+ protected abstract void localSyncComplete(Topology topology, boolean startSync);
@Override
- public void acknowledgeEpoch(EpochReady ready)
+ public void acknowledgeEpoch(EpochReady ready, boolean startSync)
{
ready.metadata.addCallback(() -> {
synchronized (AbstractConfigurationService.this)
@@ -247,7 +247,7 @@
ready.coordination.addCallback(() -> {
synchronized (AbstractConfigurationService.this)
{
- localSyncComplete(epochs.getOrCreate(ready.epoch).topology);
+ localSyncComplete(epochs.getOrCreate(ready.epoch).topology, startSync);
}
});
}
diff --git a/accord-core/src/main/java/accord/local/Node.java b/accord-core/src/main/java/accord/local/Node.java
index 48bf5f5..7cf84df 100644
--- a/accord-core/src/main/java/accord/local/Node.java
+++ b/accord-core/src/main/java/accord/local/Node.java
@@ -209,7 +209,7 @@
return AsyncResults.success(null);
EpochReady ready = onTopologyUpdateInternal(topology, startSync);
ready.coordination.addCallback(() -> this.topology.onEpochSyncComplete(id, topology.epoch()));
- configService.acknowledgeEpoch(ready);
+ configService.acknowledgeEpoch(ready, startSync);
return ready.coordination;
}
diff --git a/accord-core/src/main/java/accord/utils/async/AsyncResults.java b/accord-core/src/main/java/accord/utils/async/AsyncResults.java
index 98e5ccf..dfa7fe0 100644
--- a/accord-core/src/main/java/accord/utils/async/AsyncResults.java
+++ b/accord-core/src/main/java/accord/utils/async/AsyncResults.java
@@ -201,6 +201,12 @@
throw new IllegalStateException("Result succeeded");
return result.failure;
}
+
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + "{status=" + (isDone() ? isSuccess() ? "success" : "failure" : "pending") + "}";
+ }
}
static class Chain<V> extends AbstractResult<V>
diff --git a/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java b/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
index b872a17..4c9ce6c 100644
--- a/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
+++ b/accord-core/src/test/java/accord/burn/BurnTestConfigurationService.java
@@ -158,7 +158,7 @@
}
@Override
- protected void localSyncComplete(Topology topology)
+ protected void localSyncComplete(Topology topology, boolean startSync)
{
topologyUpdates.syncComplete(lookup.apply(localId), topology.nodes(), topology.epoch());
}
diff --git a/accord-core/src/test/java/accord/impl/AbstractConfigurationServiceTest.java b/accord-core/src/test/java/accord/impl/AbstractConfigurationServiceTest.java
index b17fa3b..f4829f0 100644
--- a/accord-core/src/test/java/accord/impl/AbstractConfigurationServiceTest.java
+++ b/accord-core/src/test/java/accord/impl/AbstractConfigurationServiceTest.java
@@ -66,7 +66,7 @@
if (topologies.put(topology.epoch(), topology) != null)
Assertions.fail("Received topology twice for epoch " + topology.epoch());
if (ackTopologies)
- parent.acknowledgeEpoch(EpochReady.done(topology.epoch()));
+ parent.acknowledgeEpoch(EpochReady.done(topology.epoch()), true);
return AsyncResults.success(null);
}
@@ -149,7 +149,7 @@
}
@Override
- protected void localSyncComplete(Topology topology)
+ protected void localSyncComplete(Topology topology, boolean startSync)
{
if (!syncStarted.add(topology.epoch()))
Assertions.fail("Sync started multiple times for " + topology.epoch());
@@ -158,7 +158,7 @@
@Override
protected void topologyUpdatePostListenerNotify(Topology topology)
{
- acknowledgeEpoch(EpochReady.done(topology.epoch()));
+ acknowledgeEpoch(EpochReady.done(topology.epoch()), true);
}
@Override
diff --git a/accord-core/src/test/java/accord/impl/mock/MockConfigurationService.java b/accord-core/src/test/java/accord/impl/mock/MockConfigurationService.java
index e7a0b3c..fbcd107 100644
--- a/accord-core/src/test/java/accord/impl/mock/MockConfigurationService.java
+++ b/accord-core/src/test/java/accord/impl/mock/MockConfigurationService.java
@@ -83,7 +83,7 @@
}
@Override
- public synchronized void acknowledgeEpoch(EpochReady epoch)
+ public synchronized void acknowledgeEpoch(EpochReady epoch, boolean startSync)
{
Assertions.assertFalse(acks.containsKey(epoch.epoch));
acks.put(epoch.epoch, epoch);
diff --git a/accord-maelstrom/src/main/java/accord/maelstrom/SimpleConfigService.java b/accord-maelstrom/src/main/java/accord/maelstrom/SimpleConfigService.java
index f307a49..368b88b 100644
--- a/accord-maelstrom/src/main/java/accord/maelstrom/SimpleConfigService.java
+++ b/accord-maelstrom/src/main/java/accord/maelstrom/SimpleConfigService.java
@@ -56,7 +56,7 @@
}
@Override
- public void acknowledgeEpoch(EpochReady ready)
+ public void acknowledgeEpoch(EpochReady ready, boolean startSync)
{
}