java-topology/defects/odl/patch/odl-0002-shardmanager-snapshot-shardlist-linear.patch

52 lines
2.3 KiB
Diff

# UNDF: UNDF-2026-000000192
--- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardManagerSnapshot.java
+++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/ShardManagerSnapshot.java
@@ -8,7 +8,8 @@
package org.opendaylight.controller.cluster.datastore.persisted;
-import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
import java.io.Serializable;
-import java.util.List;
+import java.util.Set;
import org.eclipse.jdt.annotation.NonNull;
@@ -22,19 +23,22 @@ public final class ShardManagerSnapshot implements Serializable {
@java.io.Serial
private static final long serialVersionUID = 1L;
- private final List<String> shardList;
+ // ImmutableSet for O(1) contains() during recovery checks
+ private final Set<String> shardNames;
- public ShardManagerSnapshot(final @NonNull List<String> shardList) {
- this.shardList = ImmutableList.copyOf(shardList);
+ public ShardManagerSnapshot(final @NonNull Collection<String> shardNames) {
+ this.shardNames = ImmutableSet.copyOf(shardNames);
}
- public List<String> getShardList() {
- return shardList;
+ /** Returns the set of shard names in this snapshot. O(1) contains(). */
+ public Set<String> getShardNames() {
+ return shardNames;
}
+ /** @deprecated use getShardNames() */
+ @Deprecated
+ public Set<String> getShardList() {
+ return shardNames;
+ }
+
@java.io.Serial
private Object writeReplace() {
return new SM(this);
--- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java
+++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java
@@ -543,7 +543,7 @@ public class ShardManager extends AbstractUntypedPersistentActorWithMetering {
- boolean shardWasInRecoveredSnapshot = currentSnapshot != null
- && currentSnapshot.getShardList().contains(shardName);
+ boolean shardWasInRecoveredSnapshot = currentSnapshot != null
+ && currentSnapshot.getShardNames().contains(shardName); // O(1) set lookup