This is an automated email from the ASF dual-hosted git repository. ifesdjeen pushed a commit to branch trunk-tmp2 in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git
commit 0d7ff279f19e409ffac6f5848c2bddc5f13039aa Author: Alex Petrov <[email protected]> AuthorDate: Thu Jul 31 09:43:49 2025 +0200 Startup sequence improvements Patch by Alex Petrov; reviewed by Benedict Elliott Smith for CASSANDRA-20519 --- .../src/main/java/accord/api/ConfigurationService.java | 4 +++- .../main/java/accord/impl/AbstractConfigurationService.java | 1 + .../src/main/java/accord/topology/TopologyManager.java | 13 ++++--------- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/accord-core/src/main/java/accord/api/ConfigurationService.java b/accord-core/src/main/java/accord/api/ConfigurationService.java index 90d53468..636f3b8a 100644 --- a/accord-core/src/main/java/accord/api/ConfigurationService.java +++ b/accord-core/src/main/java/accord/api/ConfigurationService.java @@ -167,7 +167,9 @@ public interface ConfigurationService default long currentEpoch() { - return currentTopology().epoch(); + Topology topology = currentTopology(); + if (topology == null) return 0; + return topology.epoch(); } /** diff --git a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java index bf579e79..9f53b2f5 100644 --- a/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java +++ b/accord-core/src/main/java/accord/impl/AbstractConfigurationService.java @@ -323,6 +323,7 @@ public abstract class AbstractConfigurationService<EpochState extends AbstractCo @Override public Topology currentTopology() { + if (isEmpty()) return null; return epochs.topologyForLastReceived(); } diff --git a/accord-core/src/main/java/accord/topology/TopologyManager.java b/accord-core/src/main/java/accord/topology/TopologyManager.java index 7708c9cd..a0760f0a 100644 --- a/accord-core/src/main/java/accord/topology/TopologyManager.java +++ b/accord-core/src/main/java/accord/topology/TopologyManager.java @@ -263,7 +263,6 @@ public class TopologyManager Ranges closed = Ranges.EMPTY, retired = Ranges.EMPTY; } - private static final Epochs EMPTY = new Epochs(new EpochState[0], Collections.emptyList(), Collections.emptyList(), -1); private final long currentEpoch; private final long firstNonEmptyEpoch; // Epochs are sorted in _descending_ order @@ -304,12 +303,8 @@ public class TopologyManager for (int i = epochs.length - 1; i > 0; i--) { EpochState epochState = epochs[i]; - if (epochState.allRetired() && - (truncateFrom == -1 || truncateFrom == i + 1)) - { - Invariants.require(epochs[i].syncComplete()); + if (epochState.allRetired() && (truncateFrom == -1 || truncateFrom == i + 1)) truncateFrom = i; - } } if (truncateFrom == -1) @@ -684,7 +679,7 @@ public class TopologyManager this.self = self; this.time = time; this.timeouts = timeouts; - this.epochs = Epochs.EMPTY; + this.epochs = new Epochs(new EpochState[0], new ArrayList<>(), new ArrayList<>(), -1);; } public EpochsSnapshot epochsSnapshot() @@ -725,7 +720,7 @@ public class TopologyManager synchronized (this) { prev = epochs; - Invariants.requireArgument(topology.epoch == prev.nextEpoch() || epochs == Epochs.EMPTY, + Invariants.requireArgument(topology.epoch == prev.nextEpoch() || epochs.epochs.length == 0, "Expected topology update %d to be %d", topology.epoch, prev.nextEpoch()); EpochState[] nextEpochs = new EpochState[prev.epochs.length + 1]; List<Epochs.Notifications> pending = new ArrayList<>(prev.pending); @@ -862,7 +857,7 @@ public class TopologyManager public boolean isEmpty() { - return epochs == Epochs.EMPTY; + return epochs.epochs.length == 0; } public long epoch() --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
