Committed by
Gerrit Code Review
Refactored primitive builders to consolidate methods into the base DistributedPrimitiveBuilder
Change-Id: I9a24117b41d1feeb5cf460c6adfa484aabcbb8c1
Showing
19 changed files
with
181 additions
and
393 deletions
| ... | @@ -89,7 +89,8 @@ public class DistributedDhcpStore implements DhcpStore { | ... | @@ -89,7 +89,8 @@ public class DistributedDhcpStore implements DhcpStore { |
| 89 | freeIPPool = storageService.<Ip4Address>setBuilder() | 89 | freeIPPool = storageService.<Ip4Address>setBuilder() |
| 90 | .withName("onos-dhcp-freeIP") | 90 | .withName("onos-dhcp-freeIP") |
| 91 | .withSerializer(Serializer.using(KryoNamespaces.API)) | 91 | .withSerializer(Serializer.using(KryoNamespaces.API)) |
| 92 | - .build(); | 92 | + .build() |
| 93 | + .asDistributedSet(); | ||
| 93 | 94 | ||
| 94 | log.info("Started"); | 95 | log.info("Started"); |
| 95 | } | 96 | } | ... | ... |
| ... | @@ -56,7 +56,8 @@ public class SetTestAddCommand extends AbstractShellCommand { | ... | @@ -56,7 +56,8 @@ public class SetTestAddCommand extends AbstractShellCommand { |
| 56 | set = storageService.<String>setBuilder() | 56 | set = storageService.<String>setBuilder() |
| 57 | .withName(setName) | 57 | .withName(setName) |
| 58 | .withSerializer(serializer) | 58 | .withSerializer(serializer) |
| 59 | - .build(); | 59 | + .build() |
| 60 | + .asDistributedSet(); | ||
| 60 | 61 | ||
| 61 | // Add a single element to the set | 62 | // Add a single element to the set |
| 62 | if (values.length == 1) { | 63 | if (values.length == 1) { | ... | ... |
| ... | @@ -61,7 +61,8 @@ public class SetTestGetCommand extends AbstractShellCommand { | ... | @@ -61,7 +61,8 @@ public class SetTestGetCommand extends AbstractShellCommand { |
| 61 | set = storageService.<String>setBuilder() | 61 | set = storageService.<String>setBuilder() |
| 62 | .withName(setName) | 62 | .withName(setName) |
| 63 | .withSerializer(serializer) | 63 | .withSerializer(serializer) |
| 64 | - .build(); | 64 | + .build() |
| 65 | + .asDistributedSet(); | ||
| 65 | 66 | ||
| 66 | // Print the set size | 67 | // Print the set size |
| 67 | if (size) { | 68 | if (size) { | ... | ... |
| ... | @@ -64,7 +64,8 @@ public class SetTestRemoveCommand extends AbstractShellCommand { | ... | @@ -64,7 +64,8 @@ public class SetTestRemoveCommand extends AbstractShellCommand { |
| 64 | set = storageService.<String>setBuilder() | 64 | set = storageService.<String>setBuilder() |
| 65 | .withName(setName) | 65 | .withName(setName) |
| 66 | .withSerializer(serializer) | 66 | .withSerializer(serializer) |
| 67 | - .build(); | 67 | + .build() |
| 68 | + .asDistributedSet(); | ||
| 68 | 69 | ||
| 69 | if (clear) { | 70 | if (clear) { |
| 70 | set.clear(); | 71 | set.clear(); | ... | ... |
| ... | @@ -52,7 +52,8 @@ public class ClassifierManager implements ClassifierService { | ... | @@ -52,7 +52,8 @@ public class ClassifierManager implements ClassifierService { |
| 52 | classifierList = storageService.<DeviceId>setBuilder() | 52 | classifierList = storageService.<DeviceId>setBuilder() |
| 53 | .withName("classifier") | 53 | .withName("classifier") |
| 54 | .withSerializer(Serializer.using(KryoNamespaces.API)) | 54 | .withSerializer(Serializer.using(KryoNamespaces.API)) |
| 55 | - .build(); | 55 | + .build() |
| 56 | + .asDistributedSet(); | ||
| 56 | log.info("Started"); | 57 | log.info("Started"); |
| 57 | } | 58 | } |
| 58 | 59 | ... | ... |
| ... | @@ -13,7 +13,7 @@ | ... | @@ -13,7 +13,7 @@ |
| 13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. | 14 | * limitations under the License. |
| 15 | */ | 15 | */ |
| 16 | -package org.onosproject.store.primitives.impl; | 16 | +package org.onosproject.store.primitives; |
| 17 | 17 | ||
| 18 | import java.lang.reflect.Array; | 18 | import java.lang.reflect.Array; |
| 19 | import java.util.Collection; | 19 | import java.util.Collection; |
| ... | @@ -37,30 +37,14 @@ import org.onosproject.store.service.Synchronous; | ... | @@ -37,30 +37,14 @@ import org.onosproject.store.service.Synchronous; |
| 37 | */ | 37 | */ |
| 38 | public class DefaultDistributedSet<E> extends Synchronous<AsyncDistributedSet<E>> implements DistributedSet<E> { | 38 | public class DefaultDistributedSet<E> extends Synchronous<AsyncDistributedSet<E>> implements DistributedSet<E> { |
| 39 | 39 | ||
| 40 | - private static final long OPERATION_TIMEOUT_MILLIS = 5000; | 40 | + private final long operationTimeoutMillis; |
| 41 | 41 | ||
| 42 | private final AsyncDistributedSet<E> asyncSet; | 42 | private final AsyncDistributedSet<E> asyncSet; |
| 43 | 43 | ||
| 44 | - public DefaultDistributedSet(AsyncDistributedSet<E> asyncSet) { | 44 | + public DefaultDistributedSet(AsyncDistributedSet<E> asyncSet, long operationTimeoutMillis) { |
| 45 | super(asyncSet); | 45 | super(asyncSet); |
| 46 | this.asyncSet = asyncSet; | 46 | this.asyncSet = asyncSet; |
| 47 | - } | 47 | + this.operationTimeoutMillis = operationTimeoutMillis; |
| 48 | - | ||
| 49 | - private static <T> T complete(CompletableFuture<T> future) { | ||
| 50 | - try { | ||
| 51 | - return future.get(OPERATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS); | ||
| 52 | - } catch (InterruptedException e) { | ||
| 53 | - Thread.currentThread().interrupt(); | ||
| 54 | - throw new StorageException.Interrupted(); | ||
| 55 | - } catch (TimeoutException e) { | ||
| 56 | - throw new StorageException.Timeout(); | ||
| 57 | - } catch (ExecutionException e) { | ||
| 58 | - if (e.getCause() instanceof StorageException) { | ||
| 59 | - throw (StorageException) e.getCause(); | ||
| 60 | - } else { | ||
| 61 | - throw new StorageException(e.getCause()); | ||
| 62 | - } | ||
| 63 | - } | ||
| 64 | } | 48 | } |
| 65 | 49 | ||
| 66 | @Override | 50 | @Override |
| ... | @@ -149,4 +133,21 @@ public class DefaultDistributedSet<E> extends Synchronous<AsyncDistributedSet<E> | ... | @@ -149,4 +133,21 @@ public class DefaultDistributedSet<E> extends Synchronous<AsyncDistributedSet<E> |
| 149 | public void removeListener(SetEventListener<E> listener) { | 133 | public void removeListener(SetEventListener<E> listener) { |
| 150 | complete(asyncSet.removeListener(listener)); | 134 | complete(asyncSet.removeListener(listener)); |
| 151 | } | 135 | } |
| 136 | + | ||
| 137 | + private <T> T complete(CompletableFuture<T> future) { | ||
| 138 | + try { | ||
| 139 | + return future.get(operationTimeoutMillis, TimeUnit.MILLISECONDS); | ||
| 140 | + } catch (InterruptedException e) { | ||
| 141 | + Thread.currentThread().interrupt(); | ||
| 142 | + throw new StorageException.Interrupted(); | ||
| 143 | + } catch (TimeoutException e) { | ||
| 144 | + throw new StorageException.Timeout(); | ||
| 145 | + } catch (ExecutionException e) { | ||
| 146 | + if (e.getCause() instanceof StorageException) { | ||
| 147 | + throw (StorageException) e.getCause(); | ||
| 148 | + } else { | ||
| 149 | + throw new StorageException(e.getCause()); | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + } | ||
| 152 | } | 153 | } | ... | ... |
| ... | @@ -24,7 +24,8 @@ import org.onosproject.store.service.Serializer; | ... | @@ -24,7 +24,8 @@ import org.onosproject.store.service.Serializer; |
| 24 | * | 24 | * |
| 25 | * @param <T> distributed primitive type | 25 | * @param <T> distributed primitive type |
| 26 | */ | 26 | */ |
| 27 | -public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive> { | 27 | +public abstract class DistributedPrimitiveBuilder<B extends DistributedPrimitiveBuilder<B, T>, |
| 28 | + T extends DistributedPrimitive> { | ||
| 28 | 29 | ||
| 29 | private DistributedPrimitive.Type type; | 30 | private DistributedPrimitive.Type type; |
| 30 | private String name; | 31 | private String name; |
| ... | @@ -32,6 +33,8 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive | ... | @@ -32,6 +33,8 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive |
| 32 | private Serializer serializer; | 33 | private Serializer serializer; |
| 33 | private boolean partitionsDisabled = false; | 34 | private boolean partitionsDisabled = false; |
| 34 | private boolean meteringDisabled = false; | 35 | private boolean meteringDisabled = false; |
| 36 | + private boolean readOnly = false; | ||
| 37 | + private boolean relaxedReadConsistency = false; | ||
| 35 | 38 | ||
| 36 | public DistributedPrimitiveBuilder(DistributedPrimitive.Type type) { | 39 | public DistributedPrimitiveBuilder(DistributedPrimitive.Type type) { |
| 37 | this.type = type; | 40 | this.type = type; |
| ... | @@ -43,9 +46,9 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive | ... | @@ -43,9 +46,9 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive |
| 43 | * @param name primitive name | 46 | * @param name primitive name |
| 44 | * @return this builder | 47 | * @return this builder |
| 45 | */ | 48 | */ |
| 46 | - public DistributedPrimitiveBuilder<T> withName(String name) { | 49 | + public B withName(String name) { |
| 47 | this.name = name; | 50 | this.name = name; |
| 48 | - return this; | 51 | + return (B) this; |
| 49 | } | 52 | } |
| 50 | 53 | ||
| 51 | /** | 54 | /** |
| ... | @@ -54,9 +57,9 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive | ... | @@ -54,9 +57,9 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive |
| 54 | * @param serializer serializer | 57 | * @param serializer serializer |
| 55 | * @return this builder | 58 | * @return this builder |
| 56 | */ | 59 | */ |
| 57 | - public DistributedPrimitiveBuilder<T> withSerializer(Serializer serializer) { | 60 | + public B withSerializer(Serializer serializer) { |
| 58 | this.serializer = serializer; | 61 | this.serializer = serializer; |
| 59 | - return this; | 62 | + return (B) this; |
| 60 | } | 63 | } |
| 61 | 64 | ||
| 62 | /** | 65 | /** |
| ... | @@ -65,9 +68,9 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive | ... | @@ -65,9 +68,9 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive |
| 65 | * @param applicationId application identifier | 68 | * @param applicationId application identifier |
| 66 | * @return this builder | 69 | * @return this builder |
| 67 | */ | 70 | */ |
| 68 | - public DistributedPrimitiveBuilder<T> withApplicationId(ApplicationId applicationId) { | 71 | + public B withApplicationId(ApplicationId applicationId) { |
| 69 | this.applicationId = applicationId; | 72 | this.applicationId = applicationId; |
| 70 | - return this; | 73 | + return (B) this; |
| 71 | } | 74 | } |
| 72 | 75 | ||
| 73 | /** | 76 | /** |
| ... | @@ -77,9 +80,9 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive | ... | @@ -77,9 +80,9 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive |
| 77 | * @return this builder | 80 | * @return this builder |
| 78 | */ | 81 | */ |
| 79 | @Deprecated | 82 | @Deprecated |
| 80 | - public DistributedPrimitiveBuilder<T> withPartitionsDisabled() { | 83 | + public B withPartitionsDisabled() { |
| 81 | this.partitionsDisabled = true; | 84 | this.partitionsDisabled = true; |
| 82 | - return this; | 85 | + return (B) this; |
| 83 | } | 86 | } |
| 84 | 87 | ||
| 85 | /** | 88 | /** |
| ... | @@ -88,9 +91,27 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive | ... | @@ -88,9 +91,27 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive |
| 88 | * @return this builder | 91 | * @return this builder |
| 89 | */ | 92 | */ |
| 90 | @Deprecated | 93 | @Deprecated |
| 91 | - public DistributedPrimitiveBuilder<T> withMeteringDisabled() { | 94 | + public B withMeteringDisabled() { |
| 92 | this.meteringDisabled = true; | 95 | this.meteringDisabled = true; |
| 93 | - return this; | 96 | + return (B) this; |
| 97 | + } | ||
| 98 | + | ||
| 99 | + /** | ||
| 100 | + * Disables state changing operations on the returned distributed primitive. | ||
| 101 | + * @return this builder | ||
| 102 | + */ | ||
| 103 | + public B withUpdatesDisabled() { | ||
| 104 | + this.readOnly = true; | ||
| 105 | + return (B) this; | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + /** | ||
| 109 | + * Turns on relaxed consistency for read operations. | ||
| 110 | + * @return this builder | ||
| 111 | + */ | ||
| 112 | + public B withRelaxedReadConsistency() { | ||
| 113 | + this.relaxedReadConsistency = true; | ||
| 114 | + return (B) this; | ||
| 94 | } | 115 | } |
| 95 | 116 | ||
| 96 | /** | 117 | /** |
| ... | @@ -112,6 +133,24 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive | ... | @@ -112,6 +133,24 @@ public abstract class DistributedPrimitiveBuilder<T extends DistributedPrimitive |
| 112 | } | 133 | } |
| 113 | 134 | ||
| 114 | /** | 135 | /** |
| 136 | + * Returns if updates are disabled. | ||
| 137 | + * | ||
| 138 | + * @return {@code true} if yes; {@code false} otherwise | ||
| 139 | + */ | ||
| 140 | + public final boolean readOnly() { | ||
| 141 | + return readOnly; | ||
| 142 | + } | ||
| 143 | + | ||
| 144 | + /** | ||
| 145 | + * Returns if consistency is relaxed for read operations. | ||
| 146 | + * | ||
| 147 | + * @return {@code true} if yes; {@code false} otherwise | ||
| 148 | + */ | ||
| 149 | + public final boolean relaxedReadConsistency() { | ||
| 150 | + return relaxedReadConsistency; | ||
| 151 | + } | ||
| 152 | + | ||
| 153 | + /** | ||
| 115 | * Returns the serializer. | 154 | * Returns the serializer. |
| 116 | * | 155 | * |
| 117 | * @return serializer | 156 | * @return serializer | ... | ... |
| ... | @@ -19,6 +19,8 @@ import java.util.Collection; | ... | @@ -19,6 +19,8 @@ import java.util.Collection; |
| 19 | import java.util.Set; | 19 | import java.util.Set; |
| 20 | import java.util.concurrent.CompletableFuture; | 20 | import java.util.concurrent.CompletableFuture; |
| 21 | 21 | ||
| 22 | +import org.onosproject.store.primitives.DefaultDistributedSet; | ||
| 23 | + | ||
| 22 | /** | 24 | /** |
| 23 | * A distributed collection designed for holding unique elements. | 25 | * A distributed collection designed for holding unique elements. |
| 24 | * <p> | 26 | * <p> |
| ... | @@ -122,6 +124,26 @@ public interface AsyncDistributedSet<E> extends DistributedPrimitive { | ... | @@ -122,6 +124,26 @@ public interface AsyncDistributedSet<E> extends DistributedPrimitive { |
| 122 | */ | 124 | */ |
| 123 | CompletableFuture<Boolean> removeAll(Collection<? extends E> c); | 125 | CompletableFuture<Boolean> removeAll(Collection<? extends E> c); |
| 124 | 126 | ||
| 127 | + | ||
| 128 | + /** | ||
| 129 | + * Returns a new {@link DistributedSet} that is backed by this instance. | ||
| 130 | + * | ||
| 131 | + * @return new {@code DistributedSet} instance | ||
| 132 | + */ | ||
| 133 | + default DistributedSet<E> asDistributedSet() { | ||
| 134 | + return asDistributedSet(DistributedPrimitive.DEFAULT_OPERTATION_TIMEOUT_MILLIS); | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + /** | ||
| 138 | + * Returns a new {@link DistributedSet} that is backed by this instance. | ||
| 139 | + * | ||
| 140 | + * @param timeoutMillis timeout duration for the returned DistributedSet operations | ||
| 141 | + * @return new {@code DistributedSet} instance | ||
| 142 | + */ | ||
| 143 | + default DistributedSet<E> asDistributedSet(long timeoutMillis) { | ||
| 144 | + return new DefaultDistributedSet<>(this, timeoutMillis); | ||
| 145 | + } | ||
| 146 | + | ||
| 125 | /** | 147 | /** |
| 126 | * Returns the entries as a immutable set. The returned set is a snapshot and will not reflect new changes made to | 148 | * Returns the entries as a immutable set. The returned set is a snapshot and will not reflect new changes made to |
| 127 | * this AsyncDistributedSet | 149 | * this AsyncDistributedSet | ... | ... |
| ... | @@ -20,7 +20,8 @@ import org.onosproject.store.primitives.DistributedPrimitiveBuilder; | ... | @@ -20,7 +20,8 @@ import org.onosproject.store.primitives.DistributedPrimitiveBuilder; |
| 20 | /** | 20 | /** |
| 21 | * Builder for AtomicCounter. | 21 | * Builder for AtomicCounter. |
| 22 | */ | 22 | */ |
| 23 | -public abstract class AtomicCounterBuilder extends DistributedPrimitiveBuilder<AsyncAtomicCounter> { | 23 | +public abstract class AtomicCounterBuilder |
| 24 | + extends DistributedPrimitiveBuilder<AtomicCounterBuilder, AsyncAtomicCounter> { | ||
| 24 | public AtomicCounterBuilder() { | 25 | public AtomicCounterBuilder() { |
| 25 | super(DistributedPrimitive.Type.COUNTER); | 26 | super(DistributedPrimitive.Type.COUNTER); |
| 26 | } | 27 | } | ... | ... |
| ... | @@ -22,7 +22,8 @@ import org.onosproject.store.primitives.DistributedPrimitiveBuilder; | ... | @@ -22,7 +22,8 @@ import org.onosproject.store.primitives.DistributedPrimitiveBuilder; |
| 22 | * | 22 | * |
| 23 | * @param <V> atomic value type | 23 | * @param <V> atomic value type |
| 24 | */ | 24 | */ |
| 25 | -public abstract class AtomicValueBuilder<V> extends DistributedPrimitiveBuilder<AsyncAtomicValue<V>> { | 25 | +public abstract class AtomicValueBuilder<V> |
| 26 | + extends DistributedPrimitiveBuilder<AtomicValueBuilder<V>, AsyncAtomicValue<V>> { | ||
| 26 | 27 | ||
| 27 | public AtomicValueBuilder() { | 28 | public AtomicValueBuilder() { |
| 28 | super(DistributedPrimitive.Type.VALUE); | 29 | super(DistributedPrimitive.Type.VALUE); | ... | ... |
| ... | @@ -15,7 +15,7 @@ | ... | @@ -15,7 +15,7 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.store.service; | 16 | package org.onosproject.store.service; |
| 17 | 17 | ||
| 18 | -import org.onosproject.core.ApplicationId; | 18 | +import org.onosproject.store.primitives.DistributedPrimitiveBuilder; |
| 19 | 19 | ||
| 20 | /** | 20 | /** |
| 21 | * Builder for {@link ConsistentMap} instances. | 21 | * Builder for {@link ConsistentMap} instances. |
| ... | @@ -23,115 +23,32 @@ import org.onosproject.core.ApplicationId; | ... | @@ -23,115 +23,32 @@ import org.onosproject.core.ApplicationId; |
| 23 | * @param <K> type for map key | 23 | * @param <K> type for map key |
| 24 | * @param <V> type for map value | 24 | * @param <V> type for map value |
| 25 | */ | 25 | */ |
| 26 | -public interface ConsistentMapBuilder<K, V> { | 26 | +public abstract class ConsistentMapBuilder<K, V> |
| 27 | + extends DistributedPrimitiveBuilder<ConsistentMapBuilder<K, V>, ConsistentMap<K, V>> { | ||
| 27 | 28 | ||
| 28 | - /** | 29 | + private boolean purgeOnUninstall = false; |
| 29 | - * Sets the name of the map. | ||
| 30 | - * <p> | ||
| 31 | - * Each map is identified by a unique map name. Different instances with the same name are all backed by the | ||
| 32 | - * same backend state. | ||
| 33 | - * </p> | ||
| 34 | - * <p> | ||
| 35 | - * <b>Note:</b> This is a mandatory parameter. | ||
| 36 | - * </p> | ||
| 37 | - * | ||
| 38 | - * @param name name of the map | ||
| 39 | - * @return this ConsistentMapBuilder | ||
| 40 | - */ | ||
| 41 | - ConsistentMapBuilder<K, V> withName(String name); | ||
| 42 | - | ||
| 43 | - /** | ||
| 44 | - * Sets the identifier of the application that owns this map instance. | ||
| 45 | - * <p> | ||
| 46 | - * Note: If {@code purgeOnUninstall} option is enabled, applicationId | ||
| 47 | - * must be specified. | ||
| 48 | - * </p> | ||
| 49 | - * | ||
| 50 | - * @param id applicationId owning the consistent map | ||
| 51 | - * @return this ConsistentMapBuilder | ||
| 52 | - */ | ||
| 53 | - ConsistentMapBuilder<K, V> withApplicationId(ApplicationId id); | ||
| 54 | - | ||
| 55 | - /** | ||
| 56 | - * Sets a serializer that can be used to serialize | ||
| 57 | - * both the keys and values inserted into the map. The serializer | ||
| 58 | - * builder should be pre-populated with any classes that will be | ||
| 59 | - * put into the map. | ||
| 60 | - * <p> | ||
| 61 | - * Note: This is a mandatory parameter. | ||
| 62 | - * </p> | ||
| 63 | - * | ||
| 64 | - * @param serializer serializer | ||
| 65 | - * @return this ConsistentMapBuilder | ||
| 66 | - */ | ||
| 67 | - ConsistentMapBuilder<K, V> withSerializer(Serializer serializer); | ||
| 68 | - | ||
| 69 | - /** | ||
| 70 | - * Disables distribution of map entries across multiple database partitions. | ||
| 71 | - * <p> | ||
| 72 | - * When partitioning is disabled, the returned map will have a single partition | ||
| 73 | - * that spans the entire cluster. Furthermore, the changes made to the map are | ||
| 74 | - * ephemeral and do not survive a full cluster restart. | ||
| 75 | - * </p> | ||
| 76 | - * <p> | ||
| 77 | - * Disabling partitions is more appropriate when the returned map is used for | ||
| 78 | - * coordination activities such as leader election and not for long term data persistence. | ||
| 79 | - * </p> | ||
| 80 | - * <p> | ||
| 81 | - * Note: By default partitions are enabled and entries in the map are durable. | ||
| 82 | - * </p> | ||
| 83 | - * @return this ConsistentMapBuilder | ||
| 84 | - */ | ||
| 85 | - ConsistentMapBuilder<K, V> withPartitionsDisabled(); | ||
| 86 | 30 | ||
| 87 | - /** | 31 | + public ConsistentMapBuilder() { |
| 88 | - * Disables map updates. | 32 | + super(DistributedPrimitive.Type.CONSISTENT_MAP); |
| 89 | - * <p> | 33 | + } |
| 90 | - * Attempt to update the built map will throw {@code UnsupportedOperationException}. | ||
| 91 | - * | ||
| 92 | - * @return this ConsistentMapBuilder | ||
| 93 | - */ | ||
| 94 | - ConsistentMapBuilder<K, V> withUpdatesDisabled(); | ||
| 95 | - | ||
| 96 | - /** | ||
| 97 | - * Purges map contents when the application owning the map is uninstalled. | ||
| 98 | - * <p> | ||
| 99 | - * When this option is enabled, the caller must provide a applicationId via | ||
| 100 | - * the {@code withAppliationId} builder method. | ||
| 101 | - * <p> | ||
| 102 | - * By default map entries will NOT be purged when owning application is uninstalled. | ||
| 103 | - * | ||
| 104 | - * @return this ConsistentMapBuilder | ||
| 105 | - */ | ||
| 106 | - ConsistentMapBuilder<K, V> withPurgeOnUninstall(); | ||
| 107 | 34 | ||
| 108 | /** | 35 | /** |
| 109 | - * Instantiates Metering service to gather usage and performance metrics. | 36 | + * Clears map contents when the owning application is uninstalled. |
| 110 | - * By default, usage data will be stored. | ||
| 111 | * | 37 | * |
| 112 | - * @return this ConsistentMapBuilder | 38 | + * return this builder |
| 113 | */ | 39 | */ |
| 114 | - ConsistentMapBuilder<K, V> withMeteringDisabled(); | 40 | + public ConsistentMapBuilder<K, V> withPurgeOnUninstall() { |
| 41 | + purgeOnUninstall = true; | ||
| 42 | + return this; | ||
| 43 | + } | ||
| 115 | 44 | ||
| 116 | /** | 45 | /** |
| 117 | - * Provides weak consistency for map gets. | 46 | + * Returns if map entries need to be cleared when owning application is uninstalled. |
| 118 | - * <p> | 47 | + * @return {@code true} if yes; {@code false} otherwise. |
| 119 | - * While this can lead to improved read performance, it can also make the behavior | ||
| 120 | - * heard to reason. Only turn this on if you know what you are doing. By default | ||
| 121 | - * reads are strongly consistent. | ||
| 122 | - * | ||
| 123 | - * @return this ConsistentMapBuilder | ||
| 124 | - */ | ||
| 125 | - ConsistentMapBuilder<K, V> withRelaxedReadConsistency(); | ||
| 126 | - | ||
| 127 | - /** | ||
| 128 | - * Builds an consistent map based on the configuration options | ||
| 129 | - * supplied to this builder. | ||
| 130 | - * | ||
| 131 | - * @return new consistent map | ||
| 132 | - * @throws java.lang.RuntimeException if a mandatory parameter is missing | ||
| 133 | */ | 48 | */ |
| 134 | - ConsistentMap<K, V> build(); | 49 | + public boolean purgeOnUninstall() { |
| 50 | + return purgeOnUninstall; | ||
| 51 | + } | ||
| 135 | 52 | ||
| 136 | /** | 53 | /** |
| 137 | * Builds an async consistent map based on the configuration options | 54 | * Builds an async consistent map based on the configuration options |
| ... | @@ -140,5 +57,5 @@ public interface ConsistentMapBuilder<K, V> { | ... | @@ -140,5 +57,5 @@ public interface ConsistentMapBuilder<K, V> { |
| 140 | * @return new async consistent map | 57 | * @return new async consistent map |
| 141 | * @throws java.lang.RuntimeException if a mandatory parameter is missing | 58 | * @throws java.lang.RuntimeException if a mandatory parameter is missing |
| 142 | */ | 59 | */ |
| 143 | - AsyncConsistentMap<K, V> buildAsyncMap(); | 60 | + public abstract AsyncConsistentMap<K, V> buildAsyncMap(); |
| 144 | } | 61 | } | ... | ... |
| ... | @@ -15,127 +15,37 @@ | ... | @@ -15,127 +15,37 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.store.service; | 16 | package org.onosproject.store.service; |
| 17 | 17 | ||
| 18 | -import org.onosproject.core.ApplicationId; | 18 | +import org.onosproject.store.primitives.DistributedPrimitiveBuilder; |
| 19 | 19 | ||
| 20 | /** | 20 | /** |
| 21 | * Builder for distributed set. | 21 | * Builder for distributed set. |
| 22 | * | 22 | * |
| 23 | * @param <E> type set elements. | 23 | * @param <E> type set elements. |
| 24 | */ | 24 | */ |
| 25 | -public interface DistributedSetBuilder<E> { | 25 | +public abstract class DistributedSetBuilder<E> extends DistributedPrimitiveBuilder<DistributedSetBuilder<E>, |
| 26 | + AsyncDistributedSet<E>> { | ||
| 26 | 27 | ||
| 27 | - /** | 28 | + private boolean purgeOnUninstall = false; |
| 28 | - * Sets the name of the set. | ||
| 29 | - * <p> | ||
| 30 | - * Each set is identified by a unique name. | ||
| 31 | - * </p> | ||
| 32 | - * <p> | ||
| 33 | - * Note: This is a mandatory parameter. | ||
| 34 | - * </p> | ||
| 35 | - * | ||
| 36 | - * @param name name of the set | ||
| 37 | - * @return this DistributedSetBuilder | ||
| 38 | - */ | ||
| 39 | - DistributedSetBuilder<E> withName(String name); | ||
| 40 | 29 | ||
| 41 | - /** | 30 | + public DistributedSetBuilder() { |
| 42 | - * Sets the owner applicationId for the set. | 31 | + super(DistributedPrimitive.Type.SET); |
| 43 | - * <p> | 32 | + } |
| 44 | - * Note: If {@code purgeOnUninstall} option is enabled, applicationId | ||
| 45 | - * must be specified. | ||
| 46 | - * </p> | ||
| 47 | - * | ||
| 48 | - * @param id applicationId owning the set | ||
| 49 | - * @return this DistributedSetBuilder | ||
| 50 | - */ | ||
| 51 | - DistributedSetBuilder<E> withApplicationId(ApplicationId id); | ||
| 52 | 33 | ||
| 53 | /** | 34 | /** |
| 54 | - * Sets a serializer that can be used to serialize | 35 | + * Enables clearing set contents when the owning application is uninstalled. |
| 55 | - * the elements add to the set. The serializer | ||
| 56 | - * builder should be pre-populated with any classes that will be | ||
| 57 | - * put into the set. | ||
| 58 | - * <p> | ||
| 59 | - * Note: This is a mandatory parameter. | ||
| 60 | - * </p> | ||
| 61 | * | 36 | * |
| 62 | - * @param serializer serializer | 37 | + * return this builder |
| 63 | - * @return this DistributedSetBuilder | ||
| 64 | */ | 38 | */ |
| 65 | - DistributedSetBuilder<E> withSerializer(Serializer serializer); | 39 | + public DistributedSetBuilder<E> withPurgeOnUninstall() { |
| 40 | + purgeOnUninstall = true; | ||
| 41 | + return this; | ||
| 42 | + } | ||
| 66 | 43 | ||
| 67 | /** | 44 | /** |
| 68 | - * Disables set updates. | 45 | + * Returns if set contents need to be cleared when owning application is uninstalled. |
| 69 | - * <p> | 46 | + * @return {@code true} if yes; {@code false} otherwise. |
| 70 | - * Attempt to update the built set will throw {@code UnsupportedOperationException}. | ||
| 71 | - * | ||
| 72 | - * @return this DistributedSetBuilder | ||
| 73 | - */ | ||
| 74 | - DistributedSetBuilder<E> withUpdatesDisabled(); | ||
| 75 | - | ||
| 76 | - /** | ||
| 77 | - * Provides weak consistency for set reads. | ||
| 78 | - * <p> | ||
| 79 | - * While this can lead to improved read performance, it can also make the behavior | ||
| 80 | - * heard to reason. Only turn this on if you know what you are doing. By default | ||
| 81 | - * reads are strongly consistent. | ||
| 82 | - * | ||
| 83 | - * @return this DistributedSetBuilder | ||
| 84 | - */ | ||
| 85 | - DistributedSetBuilder<E> withRelaxedReadConsistency(); | ||
| 86 | - | ||
| 87 | - /** | ||
| 88 | - * Disables distribution of set entries across multiple database partitions. | ||
| 89 | - * <p> | ||
| 90 | - * When partitioning is disabled, the returned set will have a single partition | ||
| 91 | - * that spans the entire cluster. Furthermore, the changes made to the set are | ||
| 92 | - * ephemeral and do not survive a full cluster restart. | ||
| 93 | - * </p> | ||
| 94 | - * <p> | ||
| 95 | - * Disabling partitions is more appropriate when the returned set is used for | ||
| 96 | - * simple coordination activities and not for long term data persistence. | ||
| 97 | - * </p> | ||
| 98 | - * <p> | ||
| 99 | - * Note: By default partitions are enabled and entries in the set are durable. | ||
| 100 | - * </p> | ||
| 101 | - * @return this DistributedSetBuilder | ||
| 102 | - */ | ||
| 103 | - DistributedSetBuilder<E> withPartitionsDisabled(); | ||
| 104 | - | ||
| 105 | - /** | ||
| 106 | - * Instantiate Metrics service to gather usage and performance metrics. | ||
| 107 | - * By default usage information is enabled | ||
| 108 | - * @return this DistributedSetBuilder | ||
| 109 | - */ | ||
| 110 | - DistributedSetBuilder<E> withMeteringDisabled(); | ||
| 111 | - | ||
| 112 | - /** | ||
| 113 | - * Purges set contents when the application owning the set is uninstalled. | ||
| 114 | - * <p> | ||
| 115 | - * When this option is enabled, the caller must provide a applicationId via | ||
| 116 | - * the {@code withAppliationId} builder method. | ||
| 117 | - * <p> | ||
| 118 | - * By default set contents will NOT be purged when owning application is uninstalled. | ||
| 119 | - * | ||
| 120 | - * @return this DistributedSetBuilder | ||
| 121 | - */ | ||
| 122 | - DistributedSetBuilder<E> withPurgeOnUninstall(); | ||
| 123 | - | ||
| 124 | - /** | ||
| 125 | - * Builds an set based on the configuration options | ||
| 126 | - * supplied to this builder. | ||
| 127 | - * | ||
| 128 | - * @return new set | ||
| 129 | - * @throws java.lang.RuntimeException if a mandatory parameter is missing | ||
| 130 | - */ | ||
| 131 | - DistributedSet<E> build(); | ||
| 132 | - | ||
| 133 | - /** | ||
| 134 | - * Builds an {@link AsyncDistributedSet async set} based on the configuration options | ||
| 135 | - * supplied to this builder. | ||
| 136 | - * | ||
| 137 | - * @return new AsyncDistributedSet | ||
| 138 | - * @throws java.lang.RuntimeException if a mandatory parameter is missing | ||
| 139 | */ | 47 | */ |
| 140 | - AsyncDistributedSet<E> buildAsyncSet(); | 48 | + public boolean purgeOnUninstall() { |
| 49 | + return purgeOnUninstall; | ||
| 50 | + } | ||
| 141 | } | 51 | } | ... | ... |
| ... | @@ -20,7 +20,8 @@ import org.onosproject.store.primitives.DistributedPrimitiveBuilder; | ... | @@ -20,7 +20,8 @@ import org.onosproject.store.primitives.DistributedPrimitiveBuilder; |
| 20 | /** | 20 | /** |
| 21 | * Abstract base class for a transaction context builder. | 21 | * Abstract base class for a transaction context builder. |
| 22 | */ | 22 | */ |
| 23 | -public abstract class TransactionContextBuilder extends DistributedPrimitiveBuilder<TransactionContext> { | 23 | +public abstract class TransactionContextBuilder |
| 24 | + extends DistributedPrimitiveBuilder<TransactionContextBuilder, TransactionContext> { | ||
| 24 | 25 | ||
| 25 | public TransactionContextBuilder() { | 26 | public TransactionContextBuilder() { |
| 26 | super(DistributedPrimitive.Type.TRANSACTION_CONTEXT); | 27 | super(DistributedPrimitive.Type.TRANSACTION_CONTEXT); | ... | ... |
| ... | @@ -29,7 +29,6 @@ import java.util.function.Function; | ... | @@ -29,7 +29,6 @@ import java.util.function.Function; |
| 29 | import java.util.function.Predicate; | 29 | import java.util.function.Predicate; |
| 30 | import java.util.stream.Collectors; | 30 | import java.util.stream.Collectors; |
| 31 | 31 | ||
| 32 | -import org.onosproject.core.ApplicationId; | ||
| 33 | import org.onosproject.store.primitives.ConsistentMapBackedJavaMap; | 32 | import org.onosproject.store.primitives.ConsistentMapBackedJavaMap; |
| 34 | 33 | ||
| 35 | import com.google.common.base.Objects; | 34 | import com.google.common.base.Objects; |
| ... | @@ -293,53 +292,11 @@ public final class TestConsistentMap<K, V> extends ConsistentMapAdapter<K, V> { | ... | @@ -293,53 +292,11 @@ public final class TestConsistentMap<K, V> extends ConsistentMapAdapter<K, V> { |
| 293 | return new Builder(); | 292 | return new Builder(); |
| 294 | } | 293 | } |
| 295 | 294 | ||
| 296 | - public static class Builder<K, V> implements ConsistentMapBuilder<K, V> { | 295 | + public static class Builder<K, V> extends ConsistentMapBuilder<K, V> { |
| 297 | - String mapName = "map"; | ||
| 298 | - | ||
| 299 | - @Override | ||
| 300 | - public ConsistentMapBuilder<K, V> withName(String mapName) { | ||
| 301 | - this.mapName = mapName; | ||
| 302 | - return this; | ||
| 303 | - } | ||
| 304 | - | ||
| 305 | - @Override | ||
| 306 | - public ConsistentMapBuilder<K, V> withApplicationId(ApplicationId id) { | ||
| 307 | - return this; | ||
| 308 | - } | ||
| 309 | - | ||
| 310 | - @Override | ||
| 311 | - public ConsistentMapBuilder<K, V> withSerializer(Serializer serializer) { | ||
| 312 | - return this; | ||
| 313 | - } | ||
| 314 | - | ||
| 315 | - @Override | ||
| 316 | - public ConsistentMapBuilder<K, V> withPartitionsDisabled() { | ||
| 317 | - return this; | ||
| 318 | - } | ||
| 319 | - | ||
| 320 | - @Override | ||
| 321 | - public ConsistentMapBuilder<K, V> withUpdatesDisabled() { | ||
| 322 | - return this; | ||
| 323 | - } | ||
| 324 | - | ||
| 325 | - @Override | ||
| 326 | - public ConsistentMapBuilder<K, V> withPurgeOnUninstall() { | ||
| 327 | - return this; | ||
| 328 | - } | ||
| 329 | - | ||
| 330 | - @Override | ||
| 331 | - public ConsistentMapBuilder<K, V> withRelaxedReadConsistency() { | ||
| 332 | - return this; | ||
| 333 | - } | ||
| 334 | - | ||
| 335 | - @Override | ||
| 336 | - public ConsistentMapBuilder<K, V> withMeteringDisabled() { | ||
| 337 | - return this; | ||
| 338 | - } | ||
| 339 | 296 | ||
| 340 | @Override | 297 | @Override |
| 341 | public ConsistentMap<K, V> build() { | 298 | public ConsistentMap<K, V> build() { |
| 342 | - return new TestConsistentMap<>(mapName); | 299 | + return new TestConsistentMap<>(name()); |
| 343 | } | 300 | } |
| 344 | 301 | ||
| 345 | @Override | 302 | @Override | ... | ... |
| ... | @@ -237,7 +237,8 @@ public class ECDeviceStore | ... | @@ -237,7 +237,8 @@ public class ECDeviceStore |
| 237 | .withSerializer(Serializer.using(KryoNamespaces.API)) | 237 | .withSerializer(Serializer.using(KryoNamespaces.API)) |
| 238 | .withPartitionsDisabled() | 238 | .withPartitionsDisabled() |
| 239 | .withRelaxedReadConsistency() | 239 | .withRelaxedReadConsistency() |
| 240 | - .build(); | 240 | + .build() |
| 241 | + .asDistributedSet(); | ||
| 241 | 242 | ||
| 242 | deviceDescriptions.addListener(deviceUpdateListener); | 243 | deviceDescriptions.addListener(deviceUpdateListener); |
| 243 | portDescriptions.addListener(portUpdateListener); | 244 | portDescriptions.addListener(portUpdateListener); | ... | ... |
| ... | @@ -15,13 +15,10 @@ | ... | @@ -15,13 +15,10 @@ |
| 15 | */ | 15 | */ |
| 16 | package org.onosproject.store.primitives.impl; | 16 | package org.onosproject.store.primitives.impl; |
| 17 | 17 | ||
| 18 | -import org.onosproject.core.ApplicationId; | ||
| 19 | import org.onosproject.store.service.AsyncConsistentMap; | 18 | import org.onosproject.store.service.AsyncConsistentMap; |
| 20 | import org.onosproject.store.service.ConsistentMap; | 19 | import org.onosproject.store.service.ConsistentMap; |
| 21 | import org.onosproject.store.service.ConsistentMapBuilder; | 20 | import org.onosproject.store.service.ConsistentMapBuilder; |
| 22 | -import org.onosproject.store.service.Serializer; | ||
| 23 | 21 | ||
| 24 | -import static com.google.common.base.Preconditions.checkArgument; | ||
| 25 | import static com.google.common.base.Preconditions.checkState; | 22 | import static com.google.common.base.Preconditions.checkState; |
| 26 | 23 | ||
| 27 | /** | 24 | /** |
| ... | @@ -30,85 +27,25 @@ import static com.google.common.base.Preconditions.checkState; | ... | @@ -30,85 +27,25 @@ import static com.google.common.base.Preconditions.checkState; |
| 30 | * @param <K> type for map key | 27 | * @param <K> type for map key |
| 31 | * @param <V> type for map value | 28 | * @param <V> type for map value |
| 32 | */ | 29 | */ |
| 33 | -public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K, V> { | 30 | +public class DefaultConsistentMapBuilder<K, V> extends ConsistentMapBuilder<K, V> { |
| 34 | 31 | ||
| 35 | - private Serializer serializer; | ||
| 36 | - private String name; | ||
| 37 | - private ApplicationId applicationId; | ||
| 38 | - private boolean purgeOnUninstall = false; | ||
| 39 | - private boolean partitionsEnabled = true; | ||
| 40 | - private boolean readOnly = false; | ||
| 41 | - private boolean metering = true; | ||
| 42 | - private boolean relaxedReadConsistency = false; | ||
| 43 | private final DatabaseManager manager; | 32 | private final DatabaseManager manager; |
| 44 | - private static final long DEFAULT_OPERATION_TIMEOUT_MILLIS = 5000L; | ||
| 45 | 33 | ||
| 46 | public DefaultConsistentMapBuilder(DatabaseManager manager) { | 34 | public DefaultConsistentMapBuilder(DatabaseManager manager) { |
| 47 | this.manager = manager; | 35 | this.manager = manager; |
| 48 | } | 36 | } |
| 49 | 37 | ||
| 50 | - @Override | ||
| 51 | - public ConsistentMapBuilder<K, V> withName(String name) { | ||
| 52 | - checkArgument(name != null && !name.isEmpty()); | ||
| 53 | - this.name = name; | ||
| 54 | - return this; | ||
| 55 | - } | ||
| 56 | - | ||
| 57 | - @Override | ||
| 58 | - public ConsistentMapBuilder<K, V> withApplicationId(ApplicationId id) { | ||
| 59 | - checkArgument(id != null); | ||
| 60 | - this.applicationId = id; | ||
| 61 | - return this; | ||
| 62 | - } | ||
| 63 | - | ||
| 64 | - @Override | ||
| 65 | - public ConsistentMapBuilder<K, V> withPurgeOnUninstall() { | ||
| 66 | - purgeOnUninstall = true; | ||
| 67 | - return this; | ||
| 68 | - } | ||
| 69 | - | ||
| 70 | - @Override | ||
| 71 | - public ConsistentMapBuilder<K, V> withMeteringDisabled() { | ||
| 72 | - metering = false; | ||
| 73 | - return this; | ||
| 74 | - } | ||
| 75 | - | ||
| 76 | - @Override | ||
| 77 | - public ConsistentMapBuilder<K, V> withSerializer(Serializer serializer) { | ||
| 78 | - checkArgument(serializer != null); | ||
| 79 | - this.serializer = serializer; | ||
| 80 | - return this; | ||
| 81 | - } | ||
| 82 | - | ||
| 83 | - @Override | ||
| 84 | - public ConsistentMapBuilder<K, V> withPartitionsDisabled() { | ||
| 85 | - partitionsEnabled = false; | ||
| 86 | - return this; | ||
| 87 | - } | ||
| 88 | - | ||
| 89 | - @Override | ||
| 90 | - public ConsistentMapBuilder<K, V> withUpdatesDisabled() { | ||
| 91 | - readOnly = true; | ||
| 92 | - return this; | ||
| 93 | - } | ||
| 94 | - | ||
| 95 | - @Override | ||
| 96 | - public ConsistentMapBuilder<K, V> withRelaxedReadConsistency() { | ||
| 97 | - relaxedReadConsistency = true; | ||
| 98 | - return this; | ||
| 99 | - } | ||
| 100 | - | ||
| 101 | private void validateInputs() { | 38 | private void validateInputs() { |
| 102 | - checkState(name != null, "name must be specified"); | 39 | + checkState(name() != null, "name must be specified"); |
| 103 | - checkState(serializer != null, "serializer must be specified"); | 40 | + checkState(serializer() != null, "serializer must be specified"); |
| 104 | - if (purgeOnUninstall) { | 41 | + if (purgeOnUninstall()) { |
| 105 | - checkState(applicationId != null, "ApplicationId must be specified when purgeOnUninstall is enabled"); | 42 | + checkState(applicationId() != null, "ApplicationId must be specified when purgeOnUninstall is enabled"); |
| 106 | } | 43 | } |
| 107 | } | 44 | } |
| 108 | 45 | ||
| 109 | @Override | 46 | @Override |
| 110 | public ConsistentMap<K, V> build() { | 47 | public ConsistentMap<K, V> build() { |
| 111 | - return buildAndRegisterMap().asConsistentMap(DEFAULT_OPERATION_TIMEOUT_MILLIS); | 48 | + return buildAndRegisterMap().asConsistentMap(); |
| 112 | } | 49 | } |
| 113 | 50 | ||
| 114 | @Override | 51 | @Override |
| ... | @@ -118,25 +55,25 @@ public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K | ... | @@ -118,25 +55,25 @@ public class DefaultConsistentMapBuilder<K, V> implements ConsistentMapBuilder<K |
| 118 | 55 | ||
| 119 | private DefaultAsyncConsistentMap<K, V> buildAndRegisterMap() { | 56 | private DefaultAsyncConsistentMap<K, V> buildAndRegisterMap() { |
| 120 | validateInputs(); | 57 | validateInputs(); |
| 121 | - Database database = partitionsEnabled ? manager.partitionedDatabase : manager.inMemoryDatabase; | 58 | + Database database = partitionsDisabled() ? manager.inMemoryDatabase : manager.partitionedDatabase; |
| 122 | - if (relaxedReadConsistency) { | 59 | + if (relaxedReadConsistency()) { |
| 123 | return manager.registerMap( | 60 | return manager.registerMap( |
| 124 | - new AsyncCachingConsistentMap<>(name, | 61 | + new AsyncCachingConsistentMap<>(name(), |
| 125 | - applicationId, | 62 | + applicationId(), |
| 126 | database, | 63 | database, |
| 127 | - serializer, | 64 | + serializer(), |
| 128 | - readOnly, | 65 | + readOnly(), |
| 129 | - purgeOnUninstall, | 66 | + purgeOnUninstall(), |
| 130 | - metering)); | 67 | + meteringEnabled())); |
| 131 | } else { | 68 | } else { |
| 132 | return manager.registerMap( | 69 | return manager.registerMap( |
| 133 | - new DefaultAsyncConsistentMap<>(name, | 70 | + new DefaultAsyncConsistentMap<>(name(), |
| 134 | - applicationId, | 71 | + applicationId(), |
| 135 | database, | 72 | database, |
| 136 | - serializer, | 73 | + serializer(), |
| 137 | - readOnly, | 74 | + readOnly(), |
| 138 | - purgeOnUninstall, | 75 | + purgeOnUninstall(), |
| 139 | - metering)); | 76 | + meteringEnabled())); |
| 140 | } | 77 | } |
| 141 | } | 78 | } |
| 142 | } | 79 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -20,7 +20,6 @@ import java.util.function.Supplier; | ... | @@ -20,7 +20,6 @@ import java.util.function.Supplier; |
| 20 | import org.onosproject.core.ApplicationId; | 20 | import org.onosproject.core.ApplicationId; |
| 21 | import org.onosproject.store.service.AsyncDistributedSet; | 21 | import org.onosproject.store.service.AsyncDistributedSet; |
| 22 | import org.onosproject.store.service.ConsistentMapBuilder; | 22 | import org.onosproject.store.service.ConsistentMapBuilder; |
| 23 | -import org.onosproject.store.service.DistributedSet; | ||
| 24 | import org.onosproject.store.service.Serializer; | 23 | import org.onosproject.store.service.Serializer; |
| 25 | import org.onosproject.store.service.DistributedSetBuilder; | 24 | import org.onosproject.store.service.DistributedSetBuilder; |
| 26 | 25 | ||
| ... | @@ -29,7 +28,7 @@ import org.onosproject.store.service.DistributedSetBuilder; | ... | @@ -29,7 +28,7 @@ import org.onosproject.store.service.DistributedSetBuilder; |
| 29 | * | 28 | * |
| 30 | * @param <E> type for set elements | 29 | * @param <E> type for set elements |
| 31 | */ | 30 | */ |
| 32 | -public class DefaultDistributedSetBuilder<E> implements DistributedSetBuilder<E> { | 31 | +public class DefaultDistributedSetBuilder<E> extends DistributedSetBuilder<E> { |
| 33 | 32 | ||
| 34 | private String name; | 33 | private String name; |
| 35 | private ConsistentMapBuilder<E, Boolean> mapBuilder; | 34 | private ConsistentMapBuilder<E, Boolean> mapBuilder; |
| ... | @@ -90,12 +89,7 @@ public class DefaultDistributedSetBuilder<E> implements DistributedSetBuilder<E> | ... | @@ -90,12 +89,7 @@ public class DefaultDistributedSetBuilder<E> implements DistributedSetBuilder<E> |
| 90 | } | 89 | } |
| 91 | 90 | ||
| 92 | @Override | 91 | @Override |
| 93 | - public DistributedSet<E> build() { | 92 | + public AsyncDistributedSet<E> build() { |
| 94 | - return new DefaultDistributedSet<E>(buildAsyncSet()); | ||
| 95 | - } | ||
| 96 | - | ||
| 97 | - @Override | ||
| 98 | - public AsyncDistributedSet<E> buildAsyncSet() { | ||
| 99 | return new DefaultAsyncDistributedSet<E>(mapBuilder.buildAsyncMap(), name, metering); | 93 | return new DefaultAsyncDistributedSet<E>(mapBuilder.buildAsyncMap(), name, metering); |
| 100 | } | 94 | } |
| 101 | } | 95 | } | ... | ... |
| ... | @@ -82,14 +82,16 @@ public class DefaultTransactionContext implements TransactionContext { | ... | @@ -82,14 +82,16 @@ public class DefaultTransactionContext implements TransactionContext { |
| 82 | checkState(isOpen, TX_NOT_OPEN_ERROR); | 82 | checkState(isOpen, TX_NOT_OPEN_ERROR); |
| 83 | checkNotNull(mapName); | 83 | checkNotNull(mapName); |
| 84 | checkNotNull(serializer); | 84 | checkNotNull(serializer); |
| 85 | - return txMaps.computeIfAbsent(mapName, name -> new DefaultTransactionalMap<>( | 85 | + return txMaps.computeIfAbsent(mapName, name -> { |
| 86 | + ConsistentMapBuilder mapBuilder = (ConsistentMapBuilder) mapBuilderSupplier.get() | ||
| 87 | + .withName(name) | ||
| 88 | + .withSerializer(serializer); | ||
| 89 | + return new DefaultTransactionalMap<>( | ||
| 86 | name, | 90 | name, |
| 87 | - mapBuilderSupplier.get() | 91 | + mapBuilder.buildAsyncMap(), |
| 88 | - .withName(name) | ||
| 89 | - .withSerializer(serializer) | ||
| 90 | - .buildAsyncMap(), | ||
| 91 | this, | 92 | this, |
| 92 | - serializer)); | 93 | + serializer); |
| 94 | + }); | ||
| 93 | } | 95 | } |
| 94 | 96 | ||
| 95 | @SuppressWarnings("unchecked") | 97 | @SuppressWarnings("unchecked") | ... | ... |
| ... | @@ -48,7 +48,7 @@ public class DefaultTransactionContextBuilder extends TransactionContextBuilder | ... | @@ -48,7 +48,7 @@ public class DefaultTransactionContextBuilder extends TransactionContextBuilder |
| 48 | return new DefaultTransactionContext(transactionId, transactionCommitter, () -> { | 48 | return new DefaultTransactionContext(transactionId, transactionCommitter, () -> { |
| 49 | ConsistentMapBuilder mapBuilder = mapBuilderSupplier.get(); | 49 | ConsistentMapBuilder mapBuilder = mapBuilderSupplier.get(); |
| 50 | if (partitionsDisabled()) { | 50 | if (partitionsDisabled()) { |
| 51 | - mapBuilder = mapBuilder.withPartitionsDisabled(); | 51 | + mapBuilder = (ConsistentMapBuilder) mapBuilder.withPartitionsDisabled(); |
| 52 | } | 52 | } |
| 53 | return mapBuilder; | 53 | return mapBuilder; |
| 54 | }); | 54 | }); | ... | ... |
-
Please register or login to post a comment