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]

Reply via email to