Committed by
Gerrit Code Review
Implementation for StorageAdmin and PartitionAdmin APIs
Change-Id: I48cbfae6f410425294196884cdb2ce4705fa2c3d
Showing
12 changed files
with
228 additions
and
6 deletions
| ... | @@ -15,6 +15,8 @@ | ... | @@ -15,6 +15,8 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.store.primitives; | 16 | package org.onosproject.store.primitives; |
| 17 | 17 | ||
| 18 | +import java.util.Set; | ||
| 19 | + | ||
| 18 | import org.onosproject.store.service.AsyncAtomicCounter; | 20 | import org.onosproject.store.service.AsyncAtomicCounter; |
| 19 | import org.onosproject.store.service.AsyncAtomicValue; | 21 | import org.onosproject.store.service.AsyncAtomicValue; |
| 20 | import org.onosproject.store.service.AsyncConsistentMap; | 22 | import org.onosproject.store.service.AsyncConsistentMap; |
| ... | @@ -84,4 +86,16 @@ public interface DistributedPrimitiveCreator { | ... | @@ -84,4 +86,16 @@ public interface DistributedPrimitiveCreator { |
| 84 | * @return leader elector | 86 | * @return leader elector |
| 85 | */ | 87 | */ |
| 86 | AsyncLeaderElector newAsyncLeaderElector(String name); | 88 | AsyncLeaderElector newAsyncLeaderElector(String name); |
| 89 | + | ||
| 90 | + /** | ||
| 91 | + * Returns the names of all created {@code AsyncConsistentMap} instances. | ||
| 92 | + * @return set of {@code AsyncConsistentMap} names | ||
| 93 | + */ | ||
| 94 | + Set<String> getAsyncConsistentMapNames(); | ||
| 95 | + | ||
| 96 | + /** | ||
| 97 | + * Returns the names of all created {@code AsyncAtomicCounter} instances. | ||
| 98 | + * @return set of {@code AsyncAtomicCounter} names | ||
| 99 | + */ | ||
| 100 | + Set<String> getAsyncAtomicCounterNames(); | ||
| 87 | } | 101 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -15,9 +15,11 @@ | ... | @@ -15,9 +15,11 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.store.primitives; | 16 | package org.onosproject.store.primitives; |
| 17 | 17 | ||
| 18 | +import java.util.List; | ||
| 18 | import java.util.concurrent.CompletableFuture; | 19 | import java.util.concurrent.CompletableFuture; |
| 19 | 20 | ||
| 20 | import org.onosproject.cluster.PartitionId; | 21 | import org.onosproject.cluster.PartitionId; |
| 22 | +import org.onosproject.store.service.PartitionInfo; | ||
| 21 | 23 | ||
| 22 | /** | 24 | /** |
| 23 | * Administrative interface for partition membership changes. | 25 | * Administrative interface for partition membership changes. |
| ... | @@ -25,6 +27,12 @@ import org.onosproject.cluster.PartitionId; | ... | @@ -25,6 +27,12 @@ import org.onosproject.cluster.PartitionId; |
| 25 | public interface PartitionAdminService { | 27 | public interface PartitionAdminService { |
| 26 | 28 | ||
| 27 | /** | 29 | /** |
| 30 | + * Returns the {@link PartitionInfo information} for existing partitions. | ||
| 31 | + * @return list of {@code PartitionInfo} | ||
| 32 | + */ | ||
| 33 | + List<PartitionInfo> partitionInfo(); | ||
| 34 | + | ||
| 35 | + /** | ||
| 28 | * Leaves a partition. | 36 | * Leaves a partition. |
| 29 | * | 37 | * |
| 30 | * @param partitionId partition identifier | 38 | * @param partitionId partition identifier | ... | ... |
| ... | @@ -31,6 +31,7 @@ public interface StorageAdminService { | ... | @@ -31,6 +31,7 @@ public interface StorageAdminService { |
| 31 | * | 31 | * |
| 32 | * @return list of partition information | 32 | * @return list of partition information |
| 33 | */ | 33 | */ |
| 34 | + @Deprecated | ||
| 34 | List<PartitionInfo> getPartitionInfo(); | 35 | List<PartitionInfo> getPartitionInfo(); |
| 35 | 36 | ||
| 36 | /** | 37 | /** |
| ... | @@ -38,6 +39,7 @@ public interface StorageAdminService { | ... | @@ -38,6 +39,7 @@ public interface StorageAdminService { |
| 38 | * | 39 | * |
| 39 | * @return list of map information | 40 | * @return list of map information |
| 40 | */ | 41 | */ |
| 42 | + @Deprecated | ||
| 41 | List<MapInfo> getMapInfo(); | 43 | List<MapInfo> getMapInfo(); |
| 42 | 44 | ||
| 43 | /** | 45 | /** |
| ... | @@ -47,6 +49,7 @@ public interface StorageAdminService { | ... | @@ -47,6 +49,7 @@ public interface StorageAdminService { |
| 47 | * | 49 | * |
| 48 | * @return mapping from counter name to that counter's next value | 50 | * @return mapping from counter name to that counter's next value |
| 49 | */ | 51 | */ |
| 52 | + @Deprecated | ||
| 50 | Map<String, Long> getCounters(); | 53 | Map<String, Long> getCounters(); |
| 51 | 54 | ||
| 52 | /** | 55 | /** |
| ... | @@ -54,6 +57,7 @@ public interface StorageAdminService { | ... | @@ -54,6 +57,7 @@ public interface StorageAdminService { |
| 54 | * | 57 | * |
| 55 | * @return mapping from counter name to that counter's next value | 58 | * @return mapping from counter name to that counter's next value |
| 56 | */ | 59 | */ |
| 60 | + @Deprecated | ||
| 57 | Map<String, Long> getPartitionedDatabaseCounters(); | 61 | Map<String, Long> getPartitionedDatabaseCounters(); |
| 58 | 62 | ||
| 59 | /** | 63 | /** |
| ... | @@ -61,6 +65,7 @@ public interface StorageAdminService { | ... | @@ -61,6 +65,7 @@ public interface StorageAdminService { |
| 61 | * | 65 | * |
| 62 | * @return mapping from counter name to that counter's next value | 66 | * @return mapping from counter name to that counter's next value |
| 63 | */ | 67 | */ |
| 68 | + @Deprecated | ||
| 64 | Map<String, Long> getInMemoryDatabaseCounters(); | 69 | Map<String, Long> getInMemoryDatabaseCounters(); |
| 65 | 70 | ||
| 66 | /** | 71 | /** | ... | ... |
| ... | @@ -22,6 +22,7 @@ import io.atomix.copycat.client.Query; | ... | @@ -22,6 +22,7 @@ import io.atomix.copycat.client.Query; |
| 22 | import io.atomix.manager.state.GetResource; | 22 | import io.atomix.manager.state.GetResource; |
| 23 | import io.atomix.manager.state.GetResourceKeys; | 23 | import io.atomix.manager.state.GetResourceKeys; |
| 24 | import io.atomix.resource.ResourceQuery; | 24 | import io.atomix.resource.ResourceQuery; |
| 25 | +import io.atomix.variables.state.ValueCommands; | ||
| 25 | 26 | ||
| 26 | import java.io.IOException; | 27 | import java.io.IOException; |
| 27 | import java.net.URL; | 28 | import java.net.URL; |
| ... | @@ -93,6 +94,8 @@ public final class CatalystSerializers { | ... | @@ -93,6 +94,8 @@ public final class CatalystSerializers { |
| 93 | GetResource.class, | 94 | GetResource.class, |
| 94 | GetResourceKeys.class, | 95 | GetResourceKeys.class, |
| 95 | ResourceQuery.class, | 96 | ResourceQuery.class, |
| 97 | + ValueCommands.Get.class, | ||
| 98 | + ValueCommands.Set.class, | ||
| 96 | Query.ConsistencyLevel.class)); | 99 | Query.ConsistencyLevel.class)); |
| 97 | // ONOS classes | 100 | // ONOS classes |
| 98 | serializer.register(Change.class, factory); | 101 | serializer.register(Change.class, factory); |
| ... | @@ -115,6 +118,8 @@ public final class CatalystSerializers { | ... | @@ -115,6 +118,8 @@ public final class CatalystSerializers { |
| 115 | serializer.register(ResourceQuery.class, factory); | 118 | serializer.register(ResourceQuery.class, factory); |
| 116 | serializer.register(GetResource.class, factory); | 119 | serializer.register(GetResource.class, factory); |
| 117 | serializer.register(GetResourceKeys.class, factory); | 120 | serializer.register(GetResourceKeys.class, factory); |
| 121 | + serializer.register(ValueCommands.Get.class, factory); | ||
| 122 | + serializer.register(ValueCommands.Set.class, factory); | ||
| 118 | 123 | ||
| 119 | // ConsistentMap | 124 | // ConsistentMap |
| 120 | serializer.register(AtomixConsistentMapCommands.UpdateAndGet.class, factory); | 125 | serializer.register(AtomixConsistentMapCommands.UpdateAndGet.class, factory); | ... | ... |
| ... | @@ -15,7 +15,12 @@ | ... | @@ -15,7 +15,12 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.store.primitives.impl; | 16 | package org.onosproject.store.primitives.impl; |
| 17 | 17 | ||
| 18 | +import static org.slf4j.LoggerFactory.getLogger; | ||
| 19 | + | ||
| 18 | import org.onosproject.store.service.Serializer; | 20 | import org.onosproject.store.service.Serializer; |
| 21 | +import org.slf4j.Logger; | ||
| 22 | + | ||
| 23 | +import com.google.common.base.Throwables; | ||
| 19 | 24 | ||
| 20 | import io.atomix.catalyst.buffer.BufferInput; | 25 | import io.atomix.catalyst.buffer.BufferInput; |
| 21 | import io.atomix.catalyst.buffer.BufferOutput; | 26 | import io.atomix.catalyst.buffer.BufferOutput; |
| ... | @@ -28,6 +33,7 @@ import io.atomix.catalyst.serializer.TypeSerializerFactory; | ... | @@ -28,6 +33,7 @@ import io.atomix.catalyst.serializer.TypeSerializerFactory; |
| 28 | */ | 33 | */ |
| 29 | public class DefaultCatalystTypeSerializerFactory implements TypeSerializerFactory { | 34 | public class DefaultCatalystTypeSerializerFactory implements TypeSerializerFactory { |
| 30 | 35 | ||
| 36 | + private final Logger log = getLogger(getClass()); | ||
| 31 | private final TypeSerializer<?> typeSerializer; | 37 | private final TypeSerializer<?> typeSerializer; |
| 32 | 38 | ||
| 33 | public DefaultCatalystTypeSerializerFactory(Serializer serializer) { | 39 | public DefaultCatalystTypeSerializerFactory(Serializer serializer) { |
| ... | @@ -53,15 +59,25 @@ public class DefaultCatalystTypeSerializerFactory implements TypeSerializerFacto | ... | @@ -53,15 +59,25 @@ public class DefaultCatalystTypeSerializerFactory implements TypeSerializerFacto |
| 53 | int size = input.readInt(); | 59 | int size = input.readInt(); |
| 54 | byte[] payload = new byte[size]; | 60 | byte[] payload = new byte[size]; |
| 55 | input.read(payload); | 61 | input.read(payload); |
| 56 | - return this.serializer.decode(payload); | 62 | + try { |
| 63 | + return this.serializer.decode(payload); | ||
| 64 | + } catch (Exception e) { | ||
| 65 | + log.warn("Failed to deserialize as type {}", clazz, e); | ||
| 66 | + Throwables.propagate(e); | ||
| 67 | + return null; | ||
| 68 | + } | ||
| 57 | } | 69 | } |
| 58 | 70 | ||
| 59 | @Override | 71 | @Override |
| 60 | public void write(T object, BufferOutput<?> output, | 72 | public void write(T object, BufferOutput<?> output, |
| 61 | io.atomix.catalyst.serializer.Serializer serializer) { | 73 | io.atomix.catalyst.serializer.Serializer serializer) { |
| 62 | - byte[] payload = this.serializer.encode(object); | 74 | + try { |
| 63 | - output.writeInt(payload.length); | 75 | + byte[] payload = this.serializer.encode(object); |
| 64 | - output.write(payload); | 76 | + output.writeInt(payload.length); |
| 77 | + output.write(payload); | ||
| 78 | + } catch (Exception e) { | ||
| 79 | + log.warn("Failed to serialize {}", object, e); | ||
| 80 | + } | ||
| 65 | } | 81 | } |
| 66 | } | 82 | } |
| 67 | } | 83 | } | ... | ... |
| ... | @@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkNotNull; |
| 19 | 19 | ||
| 20 | import java.util.List; | 20 | import java.util.List; |
| 21 | import java.util.Map; | 21 | import java.util.Map; |
| 22 | +import java.util.Set; | ||
| 22 | import java.util.TreeMap; | 23 | import java.util.TreeMap; |
| 23 | 24 | ||
| 24 | import org.apache.commons.lang.StringUtils; | 25 | import org.apache.commons.lang.StringUtils; |
| ... | @@ -33,8 +34,10 @@ import org.onosproject.store.service.AsyncLeaderElector; | ... | @@ -33,8 +34,10 @@ import org.onosproject.store.service.AsyncLeaderElector; |
| 33 | import org.onosproject.store.service.DistributedQueue; | 34 | import org.onosproject.store.service.DistributedQueue; |
| 34 | import org.onosproject.store.service.Serializer; | 35 | import org.onosproject.store.service.Serializer; |
| 35 | 36 | ||
| 37 | +import com.google.common.collect.ImmutableSet; | ||
| 36 | import com.google.common.collect.Lists; | 38 | import com.google.common.collect.Lists; |
| 37 | import com.google.common.collect.Maps; | 39 | import com.google.common.collect.Maps; |
| 40 | +import com.google.common.collect.Sets; | ||
| 38 | import com.google.common.hash.HashCode; | 41 | import com.google.common.hash.HashCode; |
| 39 | import com.google.common.hash.Hashing; | 42 | import com.google.common.hash.Hashing; |
| 40 | import com.google.common.primitives.Bytes; | 43 | import com.google.common.primitives.Bytes; |
| ... | @@ -93,6 +96,24 @@ public class FederatedDistributedPrimitiveCreator implements DistributedPrimitiv | ... | @@ -93,6 +96,24 @@ public class FederatedDistributedPrimitiveCreator implements DistributedPrimitiv |
| 93 | return getCreator(name).newAsyncLeaderElector(name); | 96 | return getCreator(name).newAsyncLeaderElector(name); |
| 94 | } | 97 | } |
| 95 | 98 | ||
| 99 | + @Override | ||
| 100 | + public Set<String> getAsyncConsistentMapNames() { | ||
| 101 | + return members.values() | ||
| 102 | + .stream() | ||
| 103 | + .map(DistributedPrimitiveCreator::getAsyncConsistentMapNames) | ||
| 104 | + .reduce(Sets::union) | ||
| 105 | + .orElse(ImmutableSet.of()); | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + @Override | ||
| 109 | + public Set<String> getAsyncAtomicCounterNames() { | ||
| 110 | + return members.values() | ||
| 111 | + .stream() | ||
| 112 | + .map(DistributedPrimitiveCreator::getAsyncAtomicCounterNames) | ||
| 113 | + .reduce(Sets::union) | ||
| 114 | + .orElse(ImmutableSet.of()); | ||
| 115 | + } | ||
| 116 | + | ||
| 96 | /** | 117 | /** |
| 97 | * Returns the {@code DistributedPrimitiveCreator} to use for hosting a primitive. | 118 | * Returns the {@code DistributedPrimitiveCreator} to use for hosting a primitive. |
| 98 | * @param name primitive name | 119 | * @param name primitive name | ... | ... |
| ... | @@ -19,9 +19,12 @@ package org.onosproject.store.primitives.impl; | ... | @@ -19,9 +19,12 @@ package org.onosproject.store.primitives.impl; |
| 19 | import static org.slf4j.LoggerFactory.getLogger; | 19 | import static org.slf4j.LoggerFactory.getLogger; |
| 20 | 20 | ||
| 21 | import java.io.File; | 21 | import java.io.File; |
| 22 | +import java.util.List; | ||
| 22 | import java.util.Map; | 23 | import java.util.Map; |
| 24 | +import java.util.Optional; | ||
| 23 | import java.util.Set; | 25 | import java.util.Set; |
| 24 | import java.util.concurrent.CompletableFuture; | 26 | import java.util.concurrent.CompletableFuture; |
| 27 | +import java.util.stream.Collectors; | ||
| 25 | 28 | ||
| 26 | import org.apache.felix.scr.annotations.Activate; | 29 | import org.apache.felix.scr.annotations.Activate; |
| 27 | import org.apache.felix.scr.annotations.Component; | 30 | import org.apache.felix.scr.annotations.Component; |
| ... | @@ -40,6 +43,7 @@ import org.onosproject.store.primitives.PartitionAdminService; | ... | @@ -40,6 +43,7 @@ import org.onosproject.store.primitives.PartitionAdminService; |
| 40 | import org.onosproject.store.primitives.PartitionEvent; | 43 | import org.onosproject.store.primitives.PartitionEvent; |
| 41 | import org.onosproject.store.primitives.PartitionEventListener; | 44 | import org.onosproject.store.primitives.PartitionEventListener; |
| 42 | import org.onosproject.store.primitives.PartitionService; | 45 | import org.onosproject.store.primitives.PartitionService; |
| 46 | +import org.onosproject.store.service.PartitionInfo; | ||
| 43 | import org.slf4j.Logger; | 47 | import org.slf4j.Logger; |
| 44 | 48 | ||
| 45 | import com.google.common.collect.ImmutableSet; | 49 | import com.google.common.collect.ImmutableSet; |
| ... | @@ -137,4 +141,14 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa | ... | @@ -137,4 +141,14 @@ public class PartitionManager extends AbstractListenerManager<PartitionEvent, Pa |
| 137 | // members of partition | 141 | // members of partition |
| 138 | return getConfiguredMembers(partitionId); | 142 | return getConfiguredMembers(partitionId); |
| 139 | } | 143 | } |
| 144 | + | ||
| 145 | + @Override | ||
| 146 | + public List<PartitionInfo> partitionInfo() { | ||
| 147 | + return partitions.values() | ||
| 148 | + .stream() | ||
| 149 | + .map(StoragePartition::info) | ||
| 150 | + .filter(Optional::isPresent) | ||
| 151 | + .map(Optional::get) | ||
| 152 | + .collect(Collectors.toList()); | ||
| 153 | + } | ||
| 140 | } | 154 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -33,6 +33,7 @@ import org.onosproject.cluster.NodeId; | ... | @@ -33,6 +33,7 @@ import org.onosproject.cluster.NodeId; |
| 33 | import org.onosproject.cluster.Partition; | 33 | import org.onosproject.cluster.Partition; |
| 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.service.PartitionInfo; | ||
| 36 | 37 | ||
| 37 | import com.google.common.collect.Collections2; | 38 | import com.google.common.collect.Collections2; |
| 38 | import com.google.common.collect.ImmutableSet; | 39 | import com.google.common.collect.ImmutableSet; |
| ... | @@ -146,4 +147,13 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag | ... | @@ -146,4 +147,13 @@ public class StoragePartition extends DefaultPartition implements Managed<Storag |
| 146 | public boolean isClosed() { | 147 | public boolean isClosed() { |
| 147 | return isOpened.get() && isClosed.get(); | 148 | return isOpened.get() && isClosed.get(); |
| 148 | } | 149 | } |
| 150 | + | ||
| 151 | + /** | ||
| 152 | + * Returns the partition information if this partition is locally managed i.e. | ||
| 153 | + * this node is a active member of the partition. | ||
| 154 | + * @return partition info | ||
| 155 | + */ | ||
| 156 | + public Optional<PartitionInfo> info() { | ||
| 157 | + return server.map(StoragePartitionServer::info); | ||
| 158 | + } | ||
| 149 | } | 159 | } | ... | ... |
| ... | @@ -22,6 +22,7 @@ import io.atomix.resource.ResourceType; | ... | @@ -22,6 +22,7 @@ import io.atomix.resource.ResourceType; |
| 22 | import io.atomix.variables.DistributedLong; | 22 | import io.atomix.variables.DistributedLong; |
| 23 | 23 | ||
| 24 | import java.util.Collection; | 24 | import java.util.Collection; |
| 25 | +import java.util.Set; | ||
| 25 | import java.util.concurrent.CompletableFuture; | 26 | import java.util.concurrent.CompletableFuture; |
| 26 | 27 | ||
| 27 | import org.onlab.util.HexString; | 28 | import org.onlab.util.HexString; |
| ... | @@ -136,6 +137,16 @@ public class StoragePartitionClient implements DistributedPrimitiveCreator, Mana | ... | @@ -136,6 +137,16 @@ public class StoragePartitionClient implements DistributedPrimitiveCreator, Mana |
| 136 | } | 137 | } |
| 137 | 138 | ||
| 138 | @Override | 139 | @Override |
| 140 | + public Set<String> getAsyncConsistentMapNames() { | ||
| 141 | + return client.keys(AtomixConsistentMap.class).join(); | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + @Override | ||
| 145 | + public Set<String> getAsyncAtomicCounterNames() { | ||
| 146 | + return client.keys(DistributedLong.class).join(); | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + @Override | ||
| 139 | public boolean isOpen() { | 150 | public boolean isOpen() { |
| 140 | return client.isOpen(); | 151 | return client.isOpen(); |
| 141 | } | 152 | } | ... | ... |
| 1 | +/* | ||
| 2 | + * Copyright 2016 Open Networking Laboratory | ||
| 3 | + * | ||
| 4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 5 | + * you may not use this file except in compliance with the License. | ||
| 6 | + * You may obtain a copy of the License at | ||
| 7 | + * | ||
| 8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 9 | + * | ||
| 10 | + * Unless required by applicable law or agreed to in writing, software | ||
| 11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 13 | + * See the License for the specific language governing permissions and | ||
| 14 | + * limitations under the License. | ||
| 15 | + */ | ||
| 16 | +package org.onosproject.store.primitives.impl; | ||
| 17 | + | ||
| 18 | +import io.atomix.copycat.server.cluster.Member; | ||
| 19 | + | ||
| 20 | +import java.util.Collection; | ||
| 21 | +import java.util.Set; | ||
| 22 | + | ||
| 23 | +import org.onosproject.cluster.PartitionId; | ||
| 24 | +import org.onosproject.store.service.PartitionInfo; | ||
| 25 | + | ||
| 26 | +import com.google.common.base.MoreObjects; | ||
| 27 | +import com.google.common.collect.ImmutableList; | ||
| 28 | +import com.google.common.collect.ImmutableSet; | ||
| 29 | +import com.google.common.collect.Lists; | ||
| 30 | + | ||
| 31 | +/** | ||
| 32 | + * Operational details for a {@code StoragePartition}. | ||
| 33 | + */ | ||
| 34 | +public class StoragePartitionDetails { | ||
| 35 | + | ||
| 36 | + private final PartitionId partitionId; | ||
| 37 | + private final Set<Member> activeMembers; | ||
| 38 | + private final Set<Member> configuredMembers; | ||
| 39 | + private final Member leader; | ||
| 40 | + private final long leaderTerm; | ||
| 41 | + | ||
| 42 | + public StoragePartitionDetails(PartitionId partitionId, | ||
| 43 | + Collection<Member> activeMembers, | ||
| 44 | + Collection<Member> configuredMembers, | ||
| 45 | + Member leader, | ||
| 46 | + long leaderTerm) { | ||
| 47 | + this.partitionId = partitionId; | ||
| 48 | + this.activeMembers = ImmutableSet.copyOf(activeMembers); | ||
| 49 | + this.configuredMembers = ImmutableSet.copyOf(configuredMembers); | ||
| 50 | + this.leader = leader; | ||
| 51 | + this.leaderTerm = leaderTerm; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + /** | ||
| 55 | + * Returns the set of active members. | ||
| 56 | + * @return active members | ||
| 57 | + */ | ||
| 58 | + public Set<Member> activeMembers() { | ||
| 59 | + return activeMembers; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + /** | ||
| 63 | + * Returns the set of configured members. | ||
| 64 | + * @return configured members | ||
| 65 | + */ | ||
| 66 | + public Set<Member> configuredMembers() { | ||
| 67 | + return configuredMembers; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + /** | ||
| 71 | + * Returns the partition leader. | ||
| 72 | + * @return leader | ||
| 73 | + */ | ||
| 74 | + public Member leader() { | ||
| 75 | + return leader; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * Returns the partition leader term. | ||
| 80 | + * @return leader term | ||
| 81 | + */ | ||
| 82 | + public long leaderTerm() { | ||
| 83 | + return leaderTerm; | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + @Override | ||
| 87 | + public String toString() { | ||
| 88 | + return MoreObjects.toStringHelper(getClass()) | ||
| 89 | + .add("activeMembers", activeMembers) | ||
| 90 | + .add("configuredMembers", configuredMembers) | ||
| 91 | + .add("leader", leader) | ||
| 92 | + .add("leaderTerm", leaderTerm) | ||
| 93 | + .toString(); | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + /** | ||
| 97 | + * Returns the details as an instance of {@code PartitionInfo}. | ||
| 98 | + * @return partition info | ||
| 99 | + */ | ||
| 100 | + public PartitionInfo toPartitionInfo() { | ||
| 101 | + return new PartitionInfo(partitionId.toString(), | ||
| 102 | + leaderTerm, | ||
| 103 | + Lists.transform(ImmutableList.copyOf(activeMembers), m -> m.address().toString()), | ||
| 104 | + leader == null ? "none" : leader.address().toString()); | ||
| 105 | + } | ||
| 106 | +} |
| ... | @@ -34,6 +34,7 @@ import java.util.concurrent.CompletableFuture; | ... | @@ -34,6 +34,7 @@ import java.util.concurrent.CompletableFuture; |
| 34 | import java.util.function.Supplier; | 34 | import java.util.function.Supplier; |
| 35 | 35 | ||
| 36 | import org.onosproject.cluster.NodeId; | 36 | import org.onosproject.cluster.NodeId; |
| 37 | +import org.onosproject.store.service.PartitionInfo; | ||
| 37 | 38 | ||
| 38 | import com.google.common.collect.ImmutableSet; | 39 | import com.google.common.collect.ImmutableSet; |
| 39 | import com.google.common.collect.Sets; | 40 | import com.google.common.collect.Sets; |
| ... | @@ -124,4 +125,16 @@ public class StoragePartitionServer implements Managed<StoragePartitionServer> { | ... | @@ -124,4 +125,16 @@ public class StoragePartitionServer implements Managed<StoragePartitionServer> { |
| 124 | public boolean isClosed() { | 125 | public boolean isClosed() { |
| 125 | return server.isClosed(); | 126 | return server.isClosed(); |
| 126 | } | 127 | } |
| 128 | + | ||
| 129 | + /** | ||
| 130 | + * Returns the partition information. | ||
| 131 | + * @return partition info | ||
| 132 | + */ | ||
| 133 | + public PartitionInfo info() { | ||
| 134 | + return new StoragePartitionDetails(partition.getId(), | ||
| 135 | + server.cluster().members(), | ||
| 136 | + server.cluster().members(), | ||
| 137 | + server.cluster().leader(), | ||
| 138 | + server.cluster().term()).toPartitionInfo(); | ||
| 139 | + } | ||
| 127 | } | 140 | } | ... | ... |
| ... | @@ -71,8 +71,7 @@ public class AtomixCounter implements AsyncAtomicCounter { | ... | @@ -71,8 +71,7 @@ public class AtomixCounter implements AsyncAtomicCounter { |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | @Override | 73 | @Override |
| 74 | - public CompletableFuture<Boolean> compareAndSet(long expectedValue, | 74 | + public CompletableFuture<Boolean> compareAndSet(long expectedValue, long updateValue) { |
| 75 | - long updateValue) { | ||
| 76 | return distLong.compareAndSet(expectedValue, updateValue); | 75 | return distLong.compareAndSet(expectedValue, updateValue); |
| 77 | } | 76 | } |
| 78 | } | 77 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment