Committed by
Gerrit Code Review
PartitionManager support for reacting to cluster metadata changes
Change-Id: I65e358f5cb47e9420fae9589661ba0ce45f58df6
Showing
4 changed files
with
109 additions
and
85 deletions
... | @@ -16,9 +16,7 @@ | ... | @@ -16,9 +16,7 @@ |
16 | package org.onosproject.store.primitives; | 16 | package org.onosproject.store.primitives; |
17 | 17 | ||
18 | import java.util.List; | 18 | import java.util.List; |
19 | -import java.util.concurrent.CompletableFuture; | ||
20 | 19 | ||
21 | -import org.onosproject.cluster.PartitionId; | ||
22 | import org.onosproject.store.service.PartitionInfo; | 20 | import org.onosproject.store.service.PartitionInfo; |
23 | 21 | ||
24 | /** | 22 | /** |
... | @@ -31,20 +29,4 @@ public interface PartitionAdminService { | ... | @@ -31,20 +29,4 @@ public interface PartitionAdminService { |
31 | * @return list of {@code PartitionInfo} | 29 | * @return list of {@code PartitionInfo} |
32 | */ | 30 | */ |
33 | List<PartitionInfo> partitionInfo(); | 31 | List<PartitionInfo> partitionInfo(); |
34 | - | ||
35 | - /** | ||
36 | - * Leaves a partition. | ||
37 | - * | ||
38 | - * @param partitionId partition identifier | ||
39 | - * @return future that is completed when the operation completes. | ||
40 | - */ | ||
41 | - CompletableFuture<Void> leave(PartitionId partitionId); | ||
42 | - | ||
43 | - /** | ||
44 | - * Joins a partition. | ||
45 | - * | ||
46 | - * @param partitionId partition identifier | ||
47 | - * @return future that is completed when the operation completes. | ||
48 | - */ | ||
49 | - CompletableFuture<Void> join(PartitionId partitionId); | ||
50 | } | 32 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -23,6 +23,7 @@ import java.util.List; | ... | @@ -23,6 +23,7 @@ import java.util.List; |
23 | import java.util.Map; | 23 | import java.util.Map; |
24 | import java.util.Set; | 24 | import java.util.Set; |
25 | import java.util.concurrent.CompletableFuture; | 25 | import java.util.concurrent.CompletableFuture; |
26 | +import java.util.concurrent.atomic.AtomicReference; | ||
26 | import java.util.stream.Collectors; | 27 | import java.util.stream.Collectors; |
27 | 28 | ||
28 | import org.apache.felix.scr.annotations.Activate; | 29 | import org.apache.felix.scr.annotations.Activate; |
... | @@ -32,9 +33,14 @@ import org.apache.felix.scr.annotations.Reference; | ... | @@ -32,9 +33,14 @@ import org.apache.felix.scr.annotations.Reference; |
32 | import org.apache.felix.scr.annotations.ReferenceCardinality; | 33 | import org.apache.felix.scr.annotations.ReferenceCardinality; |
33 | import org.apache.felix.scr.annotations.Service; | 34 | import org.apache.felix.scr.annotations.Service; |
34 | import org.onlab.util.Tools; | 35 | import org.onlab.util.Tools; |
36 | +import org.onosproject.cluster.ClusterMetadata; | ||
37 | +import org.onosproject.cluster.ClusterMetadataDiff; | ||
38 | +import org.onosproject.cluster.ClusterMetadataEvent; | ||
39 | +import org.onosproject.cluster.ClusterMetadataEventListener; | ||
35 | import org.onosproject.cluster.ClusterMetadataService; | 40 | import org.onosproject.cluster.ClusterMetadataService; |
36 | import org.onosproject.cluster.ClusterService; | 41 | import org.onosproject.cluster.ClusterService; |
37 | import org.onosproject.cluster.NodeId; | 42 | import org.onosproject.cluster.NodeId; |
43 | +import org.onosproject.cluster.PartitionDiff; | ||
38 | import org.onosproject.cluster.PartitionId; | 44 | import org.onosproject.cluster.PartitionId; |
39 | import org.onosproject.event.AbstractListenerManager; | 45 | import org.onosproject.event.AbstractListenerManager; |
40 | import org.onosproject.store.cluster.messaging.MessagingService; | 46 | import org.onosproject.store.cluster.messaging.MessagingService; |
... | @@ -68,15 +74,19 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa | ... | @@ -68,15 +74,19 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa |
68 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | 74 | @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) |
69 | protected ClusterService clusterService; | 75 | protected ClusterService clusterService; |
70 | 76 | ||
71 | - Map<PartitionId, StoragePartition> partitions = Maps.newConcurrentMap(); | 77 | + private final Map<PartitionId, StoragePartition> partitions = Maps.newConcurrentMap(); |
78 | + private final AtomicReference<ClusterMetadata> currentClusterMetadata = new AtomicReference<>(); | ||
79 | + private final InternalClusterMetadataListener metadataListener = new InternalClusterMetadataListener(); | ||
72 | 80 | ||
73 | @Activate | 81 | @Activate |
74 | public void activate() { | 82 | public void activate() { |
75 | eventDispatcher.addSink(PartitionEvent.class, listenerRegistry); | 83 | eventDispatcher.addSink(PartitionEvent.class, listenerRegistry); |
76 | - | 84 | + currentClusterMetadata.set(metadataService.getClusterMetadata()); |
77 | - metadataService.getClusterMetadata() | 85 | + metadataService.addListener(metadataListener); |
86 | + currentClusterMetadata.get() | ||
78 | .getPartitions() | 87 | .getPartitions() |
79 | .stream() | 88 | .stream() |
89 | + .filter(partition -> !partition.getId().equals(PartitionId.from(0))) // exclude p0 | ||
80 | .forEach(partition -> partitions.put(partition.getId(), new StoragePartition(partition, | 90 | .forEach(partition -> partitions.put(partition.getId(), new StoragePartition(partition, |
81 | messagingService, | 91 | messagingService, |
82 | clusterService, | 92 | clusterService, |
... | @@ -93,6 +103,7 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa | ... | @@ -93,6 +103,7 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa |
93 | 103 | ||
94 | @Deactivate | 104 | @Deactivate |
95 | public void deactivate() { | 105 | public void deactivate() { |
106 | + metadataService.removeListener(metadataListener); | ||
96 | eventDispatcher.removeSink(PartitionEvent.class); | 107 | eventDispatcher.removeSink(PartitionEvent.class); |
97 | 108 | ||
98 | CompletableFuture<Void> closeFuture = CompletableFuture.allOf(partitions.values() | 109 | CompletableFuture<Void> closeFuture = CompletableFuture.allOf(partitions.values() |
... | @@ -104,20 +115,6 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa | ... | @@ -104,20 +115,6 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa |
104 | } | 115 | } |
105 | 116 | ||
106 | @Override | 117 | @Override |
107 | - public CompletableFuture<Void> leave(PartitionId partitionId) { | ||
108 | - return partitions.get(partitionId) | ||
109 | - .server() | ||
110 | - .map(server -> server.close()) | ||
111 | - .orElse(CompletableFuture.completedFuture(null)); | ||
112 | - } | ||
113 | - | ||
114 | - @Override | ||
115 | - public CompletableFuture<Void> join(PartitionId partitionId) { | ||
116 | - return partitions.get(partitionId) | ||
117 | - .open(); | ||
118 | - } | ||
119 | - | ||
120 | - @Override | ||
121 | public int getNumberOfPartitions() { | 118 | public int getNumberOfPartitions() { |
122 | return partitions.size(); | 119 | return partitions.size(); |
123 | } | 120 | } |
... | @@ -152,4 +149,23 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa | ... | @@ -152,4 +149,23 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa |
152 | .flatMap(x -> Tools.stream(x.info())) | 149 | .flatMap(x -> Tools.stream(x.info())) |
153 | .collect(Collectors.toList()); | 150 | .collect(Collectors.toList()); |
154 | } | 151 | } |
152 | + | ||
153 | + private void processMetadataUpdate(ClusterMetadata clusterMetadata) { | ||
154 | + ClusterMetadataDiff diffExaminer = | ||
155 | + new ClusterMetadataDiff(currentClusterMetadata.get(), clusterMetadata); | ||
156 | + diffExaminer.partitionDiffs() | ||
157 | + .values() | ||
158 | + .stream() | ||
159 | + // TODO: Remove after partition 0 is removed from cluster metadata. | ||
160 | + .filter(diff -> !diff.partitionId().equals(PartitionId.from(0))) | ||
161 | + .filter(PartitionDiff::hasChanged) | ||
162 | + .forEach(diff -> partitions.get(diff.partitionId()).onUpdate(diff.newValue())); | ||
163 | + } | ||
164 | + | ||
165 | + private class InternalClusterMetadataListener implements ClusterMetadataEventListener { | ||
166 | + @Override | ||
167 | + public void event(ClusterMetadataEvent event) { | ||
168 | + processMetadataUpdate(event.subject()); | ||
169 | + } | ||
170 | + } | ||
155 | } | 171 | } | ... | ... |
... | @@ -28,9 +28,9 @@ import java.util.concurrent.atomic.AtomicBoolean; | ... | @@ -28,9 +28,9 @@ import java.util.concurrent.atomic.AtomicBoolean; |
28 | 28 | ||
29 | import org.onosproject.cluster.ClusterService; | 29 | import org.onosproject.cluster.ClusterService; |
30 | import org.onosproject.cluster.ControllerNode; | 30 | import org.onosproject.cluster.ControllerNode; |
31 | -import org.onosproject.cluster.DefaultPartition; | ||
32 | import org.onosproject.cluster.NodeId; | 31 | import org.onosproject.cluster.NodeId; |
33 | import org.onosproject.cluster.Partition; | 32 | import org.onosproject.cluster.Partition; |
33 | +import org.onosproject.cluster.PartitionId; | ||
34 | import org.onosproject.store.cluster.messaging.MessagingService; | 34 | import org.onosproject.store.cluster.messaging.MessagingService; |
35 | import org.onosproject.store.primitives.resources.impl.AtomixConsistentMap; | 35 | import org.onosproject.store.primitives.resources.impl.AtomixConsistentMap; |
36 | import org.onosproject.store.primitives.resources.impl.AtomixLeaderElector; | 36 | import org.onosproject.store.primitives.resources.impl.AtomixLeaderElector; |
... | @@ -42,7 +42,7 @@ import com.google.common.collect.ImmutableSet; | ... | @@ -42,7 +42,7 @@ import com.google.common.collect.ImmutableSet; |
42 | /** | 42 | /** |
43 | * Storage partition. | 43 | * Storage partition. |
44 | */ | 44 | */ |
45 | -public class StoragePartition extends DefaultPartition implements Managed<StoragePartition> { | 45 | +public class StoragePartition implements Managed<StoragePartition> { |
46 | 46 | ||
47 | private final AtomicBoolean isOpened = new AtomicBoolean(false); | 47 | private final AtomicBoolean isOpened = new AtomicBoolean(false); |
48 | private final AtomicBoolean isClosed = new AtomicBoolean(false); | 48 | private final AtomicBoolean isClosed = new AtomicBoolean(false); |
... | @@ -50,14 +50,14 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag | ... | @@ -50,14 +50,14 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag |
50 | private final MessagingService messagingService; | 50 | private final MessagingService messagingService; |
51 | private final ClusterService clusterService; | 51 | private final ClusterService clusterService; |
52 | private final File logFolder; | 52 | private final File logFolder; |
53 | - private CompletableFuture<StoragePartitionServer> serverOpenFuture; | 53 | + private Partition partition; |
54 | private static final Collection<ResourceType> RESOURCE_TYPES = ImmutableSet.of( | 54 | private static final Collection<ResourceType> RESOURCE_TYPES = ImmutableSet.of( |
55 | new ResourceType(DistributedLong.class), | 55 | new ResourceType(DistributedLong.class), |
56 | new ResourceType(AtomixLeaderElector.class), | 56 | new ResourceType(AtomixLeaderElector.class), |
57 | new ResourceType(AtomixConsistentMap.class)); | 57 | new ResourceType(AtomixConsistentMap.class)); |
58 | 58 | ||
59 | private NodeId localNodeId; | 59 | private NodeId localNodeId; |
60 | - private Optional<StoragePartitionServer> server = Optional.empty(); | 60 | + private StoragePartitionServer server; |
61 | private StoragePartitionClient client; | 61 | private StoragePartitionClient client; |
62 | 62 | ||
63 | public StoragePartition(Partition partition, | 63 | public StoragePartition(Partition partition, |
... | @@ -65,7 +65,7 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag | ... | @@ -65,7 +65,7 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag |
65 | ClusterService clusterService, | 65 | ClusterService clusterService, |
66 | Serializer serializer, | 66 | Serializer serializer, |
67 | File logFolder) { | 67 | File logFolder) { |
68 | - super(partition); | 68 | + this.partition = partition; |
69 | this.messagingService = messagingService; | 69 | this.messagingService = messagingService; |
70 | this.clusterService = clusterService; | 70 | this.clusterService = clusterService; |
71 | this.localNodeId = clusterService.getLocalNode().id(); | 71 | this.localNodeId = clusterService.getLocalNode().id(); |
... | @@ -81,61 +81,86 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag | ... | @@ -81,61 +81,86 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag |
81 | return client; | 81 | return client; |
82 | } | 82 | } |
83 | 83 | ||
84 | - /** | ||
85 | - * Returns the optional server instance. | ||
86 | - * @return server | ||
87 | - */ | ||
88 | - public Optional<StoragePartitionServer> server() { | ||
89 | - return server; | ||
90 | - } | ||
91 | - | ||
92 | @Override | 84 | @Override |
93 | public CompletableFuture<Void> open() { | 85 | public CompletableFuture<Void> open() { |
94 | - serverOpenFuture = openServer(); | 86 | + openServer(); |
95 | - serverOpenFuture.thenAccept(s -> server = Optional.ofNullable(s)); | ||
96 | return openClient().thenAccept(v -> isOpened.set(true)) | 87 | return openClient().thenAccept(v -> isOpened.set(true)) |
97 | .thenApply(v -> null); | 88 | .thenApply(v -> null); |
98 | } | 89 | } |
99 | 90 | ||
100 | @Override | 91 | @Override |
101 | public CompletableFuture<Void> close() { | 92 | public CompletableFuture<Void> close() { |
102 | - return closeClient().thenCompose(v -> closeServer()) | 93 | + // We do not explicitly close the server and instead let the cluster |
103 | - .thenAccept(v -> isClosed.set(true)) | 94 | + // deal with this as an unclean exit. |
95 | + return closeClient().thenAccept(v -> isClosed.set(true)) | ||
104 | .thenApply(v -> null); | 96 | .thenApply(v -> null); |
105 | } | 97 | } |
106 | 98 | ||
99 | + /** | ||
100 | + * Returns the identifier of the {@link Partition partition} associated with this instance. | ||
101 | + * @return partition identifier | ||
102 | + */ | ||
103 | + public PartitionId getId() { | ||
104 | + return partition.getId(); | ||
105 | + } | ||
106 | + | ||
107 | + /** | ||
108 | + * Returns the identifiers of partition members. | ||
109 | + * @return partition member instance ids | ||
110 | + */ | ||
111 | + public Collection<NodeId> getMembers() { | ||
112 | + return partition.getMembers(); | ||
113 | + } | ||
114 | + | ||
115 | + /** | ||
116 | + * Returns the {@link Address addresses} of partition members. | ||
117 | + * @return partition member addresses | ||
118 | + */ | ||
107 | public Collection<Address> getMemberAddresses() { | 119 | public Collection<Address> getMemberAddresses() { |
108 | - return Collections2.transform(getMembers(), this::toAddress); | 120 | + return Collections2.transform(partition.getMembers(), this::toAddress); |
109 | } | 121 | } |
110 | 122 | ||
111 | - private CompletableFuture<StoragePartitionServer> openServer() { | 123 | + private CompletableFuture<Void> openServer() { |
112 | - if (!getMembers().contains(localNodeId)) { | 124 | + if (!partition.getMembers().contains(localNodeId) || server != null) { |
113 | return CompletableFuture.completedFuture(null); | 125 | return CompletableFuture.completedFuture(null); |
114 | } | 126 | } |
115 | StoragePartitionServer server = new StoragePartitionServer(toAddress(localNodeId), | 127 | StoragePartitionServer server = new StoragePartitionServer(toAddress(localNodeId), |
116 | this, | 128 | this, |
117 | serializer, | 129 | serializer, |
118 | () -> new CopycatTransport(CopycatTransport.Mode.SERVER, | 130 | () -> new CopycatTransport(CopycatTransport.Mode.SERVER, |
119 | - getId(), | 131 | + partition.getId(), |
120 | messagingService), | 132 | messagingService), |
121 | RESOURCE_TYPES, | 133 | RESOURCE_TYPES, |
122 | logFolder); | 134 | logFolder); |
123 | - return server.open().thenApply(v -> server); | 135 | + return server.open().thenRun(() -> this.server = server); |
124 | } | 136 | } |
125 | 137 | ||
126 | private CompletableFuture<StoragePartitionClient> openClient() { | 138 | private CompletableFuture<StoragePartitionClient> openClient() { |
127 | client = new StoragePartitionClient(this, | 139 | client = new StoragePartitionClient(this, |
128 | serializer, | 140 | serializer, |
129 | new CopycatTransport(CopycatTransport.Mode.CLIENT, | 141 | new CopycatTransport(CopycatTransport.Mode.CLIENT, |
130 | - getId(), | 142 | + partition.getId(), |
131 | messagingService), | 143 | messagingService), |
132 | RESOURCE_TYPES); | 144 | RESOURCE_TYPES); |
133 | return client.open().thenApply(v -> client); | 145 | return client.open().thenApply(v -> client); |
134 | } | 146 | } |
135 | 147 | ||
136 | - private CompletableFuture<Void> closeServer() { | 148 | + /** |
137 | - return server.map(StoragePartitionServer::close) | 149 | + * Closes the partition server if it was previously opened. |
138 | - .orElse(CompletableFuture.completedFuture(null)); | 150 | + * @return future that is completed when the operation completes |
151 | + */ | ||
152 | + public CompletableFuture<Void> closeServer() { | ||
153 | + return server != null ? server.closeAndExit() : CompletableFuture.completedFuture(null); | ||
154 | + } | ||
155 | + | ||
156 | + @Override | ||
157 | + public boolean isOpen() { | ||
158 | + return isOpened.get() && !isClosed.get(); | ||
159 | + } | ||
160 | + | ||
161 | + @Override | ||
162 | + public boolean isClosed() { | ||
163 | + return isClosed.get(); | ||
139 | } | 164 | } |
140 | 165 | ||
141 | private CompletableFuture<Void> closeClient() { | 166 | private CompletableFuture<Void> closeClient() { |
... | @@ -150,22 +175,21 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag | ... | @@ -150,22 +175,21 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag |
150 | return new Address(node.ip().toString(), node.tcpPort()); | 175 | return new Address(node.ip().toString(), node.tcpPort()); |
151 | } | 176 | } |
152 | 177 | ||
153 | - @Override | ||
154 | - public boolean isOpen() { | ||
155 | - return !isClosed.get() && isOpened.get(); | ||
156 | - } | ||
157 | - | ||
158 | - @Override | ||
159 | - public boolean isClosed() { | ||
160 | - return isOpened.get() && isClosed.get(); | ||
161 | - } | ||
162 | - | ||
163 | /** | 178 | /** |
164 | * Returns the partition information if this partition is locally managed i.e. | 179 | * Returns the partition information if this partition is locally managed i.e. |
165 | * this node is a active member of the partition. | 180 | * this node is a active member of the partition. |
166 | * @return partition info | 181 | * @return partition info |
167 | */ | 182 | */ |
168 | public Optional<PartitionInfo> info() { | 183 | public Optional<PartitionInfo> info() { |
169 | - return server.map(StoragePartitionServer::info); | 184 | + return server != null ? Optional.of(server.info()) : Optional.empty(); |
185 | + } | ||
186 | + | ||
187 | + public void onUpdate(Partition partition) { | ||
188 | + this.partition = partition; | ||
189 | + if (partition.getMembers().contains(localNodeId)) { | ||
190 | + openServer(); | ||
191 | + } else if (!partition.getMembers().contains(localNodeId)) { | ||
192 | + closeServer(); | ||
193 | + } | ||
170 | } | 194 | } |
171 | } | 195 | } | ... | ... |
... | @@ -31,16 +31,13 @@ import io.atomix.resource.ServiceLoaderResourceResolver; | ... | @@ -31,16 +31,13 @@ import io.atomix.resource.ServiceLoaderResourceResolver; |
31 | 31 | ||
32 | import java.io.File; | 32 | import java.io.File; |
33 | import java.util.Collection; | 33 | import java.util.Collection; |
34 | -import java.util.Set; | ||
35 | import java.util.concurrent.CompletableFuture; | 34 | import java.util.concurrent.CompletableFuture; |
36 | import java.util.function.Supplier; | 35 | import java.util.function.Supplier; |
37 | 36 | ||
38 | -import org.onosproject.cluster.NodeId; | ||
39 | import org.onosproject.store.service.PartitionInfo; | 37 | import org.onosproject.store.service.PartitionInfo; |
40 | import org.slf4j.Logger; | 38 | import org.slf4j.Logger; |
41 | 39 | ||
42 | import com.google.common.collect.ImmutableSet; | 40 | import com.google.common.collect.ImmutableSet; |
43 | -import com.google.common.collect.Sets; | ||
44 | 41 | ||
45 | /** | 42 | /** |
46 | * {@link StoragePartition} server. | 43 | * {@link StoragePartition} server. |
... | @@ -80,7 +77,7 @@ public class StoragePartitionServer implements Managed<StoragePartitionServer> { | ... | @@ -80,7 +77,7 @@ public class StoragePartitionServer implements Managed<StoragePartitionServer> { |
80 | return CompletableFuture.completedFuture(null); | 77 | return CompletableFuture.completedFuture(null); |
81 | } | 78 | } |
82 | synchronized (this) { | 79 | synchronized (this) { |
83 | - server = server(); | 80 | + server = buildServer(); |
84 | } | 81 | } |
85 | serverOpenFuture = server.open(); | 82 | serverOpenFuture = server.open(); |
86 | } else { | 83 | } else { |
... | @@ -97,13 +94,22 @@ public class StoragePartitionServer implements Managed<StoragePartitionServer> { | ... | @@ -97,13 +94,22 @@ public class StoragePartitionServer implements Managed<StoragePartitionServer> { |
97 | 94 | ||
98 | @Override | 95 | @Override |
99 | public CompletableFuture<Void> close() { | 96 | public CompletableFuture<Void> close() { |
100 | - // We do not close the server because doing so is equivalent to this node | 97 | + /** |
101 | - // leaving the cluster and we don't want that here. | 98 | + * CopycatServer#kill just shuts down the server and does not result |
102 | - // The Raft protocol should take care of servers leaving unannounced. | 99 | + * in any cluster membership changes. |
103 | - return CompletableFuture.completedFuture(null); | 100 | + */ |
101 | + return server.kill(); | ||
104 | } | 102 | } |
105 | 103 | ||
106 | - private CopycatServer server() { | 104 | + /** |
105 | + * Closes the server and exits the partition. | ||
106 | + * @return future that is completed when the operation is complete | ||
107 | + */ | ||
108 | + public CompletableFuture<Void> closeAndExit() { | ||
109 | + return server.close(); | ||
110 | + } | ||
111 | + | ||
112 | + private CopycatServer buildServer() { | ||
107 | ResourceTypeResolver resourceResolver = new ServiceLoaderResourceResolver(); | 113 | ResourceTypeResolver resourceResolver = new ServiceLoaderResourceResolver(); |
108 | ResourceRegistry registry = new ResourceRegistry(); | 114 | ResourceRegistry registry = new ResourceRegistry(); |
109 | resourceTypes.forEach(registry::register); | 115 | resourceTypes.forEach(registry::register); |
... | @@ -124,10 +130,6 @@ public class StoragePartitionServer implements Managed<StoragePartitionServer> { | ... | @@ -124,10 +130,6 @@ public class StoragePartitionServer implements Managed<StoragePartitionServer> { |
124 | return server; | 130 | return server; |
125 | } | 131 | } |
126 | 132 | ||
127 | - public Set<NodeId> configuredMembers() { | ||
128 | - return Sets.newHashSet(partition.getMembers()); | ||
129 | - } | ||
130 | - | ||
131 | @Override | 133 | @Override |
132 | public boolean isOpen() { | 134 | public boolean isOpen() { |
133 | return server.isOpen(); | 135 | return server.isOpen(); | ... | ... |
-
Please register or login to post a comment