Method name refactor in DistributedPrimitive + Builder for AsyncLeaderElector
Change-Id: I59be6e66665c0b12d02106bd5c722e9fa38dd7a1
diff --git a/core/api/src/main/java/org/onosproject/store/primitives/DefaultLeaderElector.java b/core/api/src/main/java/org/onosproject/store/primitives/DefaultLeaderElector.java
new file mode 100644
index 0000000..e7a7f82
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/store/primitives/DefaultLeaderElector.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.store.primitives;
+
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.function.Consumer;
+
+import org.onosproject.cluster.Leadership;
+import org.onosproject.cluster.NodeId;
+import org.onosproject.event.Change;
+import org.onosproject.store.service.AsyncLeaderElector;
+import org.onosproject.store.service.LeaderElector;
+import org.onosproject.store.service.StorageException;
+import org.onosproject.store.service.Synchronous;
+
+/**
+ * Default implementation for a {@code LeaderElector} backed by a {@link AsyncLeaderElector}.
+ */
+public class DefaultLeaderElector extends Synchronous<AsyncLeaderElector> implements LeaderElector {
+
+ private final AsyncLeaderElector asyncElector;
+ private final long operationTimeoutMillis;
+
+ public DefaultLeaderElector(AsyncLeaderElector asyncElector, long operationTimeoutMillis) {
+ super(asyncElector);
+ this.asyncElector = asyncElector;
+ this.operationTimeoutMillis = operationTimeoutMillis;
+ }
+
+ @Override
+ public Leadership run(String topic, NodeId nodeId) {
+ return complete(asyncElector.run(topic, nodeId));
+ }
+
+ @Override
+ public void withdraw(String topic) {
+ complete(asyncElector.withdraw(topic));
+ }
+
+ @Override
+ public boolean anoint(String topic, NodeId nodeId) {
+ return complete(asyncElector.anoint(topic, nodeId));
+ }
+
+ @Override
+ public Leadership getLeadership(String topic) {
+ return complete(asyncElector.getLeadership(topic));
+ }
+
+ @Override
+ public Map<String, Leadership> getLeaderships() {
+ return complete(asyncElector.getLeaderships());
+ }
+
+ @Override
+ public void addChangeListener(Consumer<Change<Leadership>> consumer) {
+ complete(asyncElector.addChangeListener(consumer));
+ }
+
+ @Override
+ public void removeChangeListener(Consumer<Change<Leadership>> consumer) {
+ complete(asyncElector.removeChangeListener(consumer));
+ }
+
+ private <T> T complete(CompletableFuture<T> future) {
+ try {
+ return future.get(operationTimeoutMillis, TimeUnit.MILLISECONDS);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ throw new StorageException.Interrupted();
+ } catch (TimeoutException e) {
+ throw new StorageException.Timeout();
+ } catch (ExecutionException e) {
+ throw new StorageException(e.getCause());
+ }
+ }
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/AsyncAtomicCounter.java b/core/api/src/main/java/org/onosproject/store/service/AsyncAtomicCounter.java
index 05326a2..5e6d82c 100644
--- a/core/api/src/main/java/org/onosproject/store/service/AsyncAtomicCounter.java
+++ b/core/api/src/main/java/org/onosproject/store/service/AsyncAtomicCounter.java
@@ -25,7 +25,7 @@
public interface AsyncAtomicCounter extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.COUNTER;
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/AsyncAtomicValue.java b/core/api/src/main/java/org/onosproject/store/service/AsyncAtomicValue.java
index a0e72ff..d56b1fb 100644
--- a/core/api/src/main/java/org/onosproject/store/service/AsyncAtomicValue.java
+++ b/core/api/src/main/java/org/onosproject/store/service/AsyncAtomicValue.java
@@ -32,7 +32,7 @@
public interface AsyncAtomicValue<V> extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.VALUE;
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/AsyncConsistentMap.java b/core/api/src/main/java/org/onosproject/store/service/AsyncConsistentMap.java
index a914d0c..fe85e21 100644
--- a/core/api/src/main/java/org/onosproject/store/service/AsyncConsistentMap.java
+++ b/core/api/src/main/java/org/onosproject/store/service/AsyncConsistentMap.java
@@ -55,7 +55,7 @@
public interface AsyncConsistentMap<K, V> extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.CONSISTENT_MAP;
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/AsyncDistributedSet.java b/core/api/src/main/java/org/onosproject/store/service/AsyncDistributedSet.java
index 3f1a215..da345d4 100644
--- a/core/api/src/main/java/org/onosproject/store/service/AsyncDistributedSet.java
+++ b/core/api/src/main/java/org/onosproject/store/service/AsyncDistributedSet.java
@@ -33,7 +33,7 @@
public interface AsyncDistributedSet<E> extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.SET;
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java b/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java
index 000d10f..609ac70 100644
--- a/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java
+++ b/core/api/src/main/java/org/onosproject/store/service/AsyncLeaderElector.java
@@ -22,6 +22,7 @@
import org.onosproject.cluster.Leadership;
import org.onosproject.cluster.NodeId;
import org.onosproject.event.Change;
+import org.onosproject.store.primitives.DefaultLeaderElector;
/**
* Distributed mutual exclusion primitive.
@@ -45,7 +46,7 @@
public interface AsyncLeaderElector extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.LEADER_ELECTOR;
}
@@ -102,4 +103,23 @@
* @return CompletableFuture that is completed when the operation completes
*/
CompletableFuture<Void> removeChangeListener(Consumer<Change<Leadership>> consumer);
+
+ /**
+ * Returns a new {@link LeaderElector} that is backed by this instance.
+ *
+ * @param timeoutMillis timeout duration for the returned LeaderElector operations
+ * @return new {@code LeaderElector} instance
+ */
+ default LeaderElector asLeaderElector(long timeoutMillis) {
+ return new DefaultLeaderElector(this, timeoutMillis);
+ }
+
+ /**
+ * Returns a new {@link LeaderElector} that is backed by this instance and with a default operation timeout.
+ *
+ * @return new {@code LeaderElector} instance
+ */
+ default LeaderElector asLeaderElector() {
+ return asLeaderElector(DEFAULT_OPERTATION_TIMEOUT_MILLIS);
+ }
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/AtomicCounter.java b/core/api/src/main/java/org/onosproject/store/service/AtomicCounter.java
index 592f67a0..818d816 100644
--- a/core/api/src/main/java/org/onosproject/store/service/AtomicCounter.java
+++ b/core/api/src/main/java/org/onosproject/store/service/AtomicCounter.java
@@ -21,7 +21,7 @@
public interface AtomicCounter extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.COUNTER;
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/DistributedPrimitive.java b/core/api/src/main/java/org/onosproject/store/service/DistributedPrimitive.java
index 09d2979..292626c 100644
--- a/core/api/src/main/java/org/onosproject/store/service/DistributedPrimitive.java
+++ b/core/api/src/main/java/org/onosproject/store/service/DistributedPrimitive.java
@@ -81,7 +81,7 @@
* Returns the type of primitive.
* @return primitive type
*/
- Type type();
+ Type primitiveType();
/**
* Returns the application owning this primitive.
diff --git a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMap.java b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMap.java
index 5399422..01c0c8f 100644
--- a/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMap.java
+++ b/core/api/src/main/java/org/onosproject/store/service/EventuallyConsistentMap.java
@@ -42,7 +42,7 @@
public interface EventuallyConsistentMap<K, V> extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.EVENTUALLY_CONSISTENT_MAP;
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java b/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java
index b5d1c66..b37d1c4 100644
--- a/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java
+++ b/core/api/src/main/java/org/onosproject/store/service/LeaderElector.java
@@ -29,7 +29,7 @@
public interface LeaderElector extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.LEADER_ELECTOR;
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/LeaderElectorBuilder.java b/core/api/src/main/java/org/onosproject/store/service/LeaderElectorBuilder.java
new file mode 100644
index 0000000..f2a1b78
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/store/service/LeaderElectorBuilder.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2016 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.store.service;
+
+import org.onosproject.store.primitives.DistributedPrimitiveBuilder;
+
+/**
+ * Builder for constructing new {@link AsyncLeaderElector} instances.
+ */
+public abstract class LeaderElectorBuilder
+ extends DistributedPrimitiveBuilder<LeaderElectorBuilder, AsyncLeaderElector> {
+ public LeaderElectorBuilder() {
+ super(DistributedPrimitive.Type.LEADER_ELECTOR);
+ }
+}
diff --git a/core/api/src/main/java/org/onosproject/store/service/MapTransaction.java b/core/api/src/main/java/org/onosproject/store/service/MapTransaction.java
index 3c4f743..ba3a84d 100644
--- a/core/api/src/main/java/org/onosproject/store/service/MapTransaction.java
+++ b/core/api/src/main/java/org/onosproject/store/service/MapTransaction.java
@@ -21,6 +21,7 @@
import org.onosproject.store.primitives.MapUpdate;
import org.onosproject.store.primitives.TransactionId;
+import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@@ -58,6 +59,14 @@
return updates;
}
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(getClass())
+ .add("transactionId", transactionId)
+ .add("updates", updates)
+ .toString();
+ }
+
/**
* Maps this instance to another {@code MapTransaction} with different key and value types.
*
diff --git a/core/api/src/main/java/org/onosproject/store/service/StorageService.java b/core/api/src/main/java/org/onosproject/store/service/StorageService.java
index f6b411d..30e6efe 100644
--- a/core/api/src/main/java/org/onosproject/store/service/StorageService.java
+++ b/core/api/src/main/java/org/onosproject/store/service/StorageService.java
@@ -75,6 +75,13 @@
<V> AtomicValueBuilder<V> atomicValueBuilder();
/**
+ * Creates a new LeaderElectorBuilder.
+ *
+ * @return leader elector builder
+ */
+ LeaderElectorBuilder leaderElectorBuilder();
+
+ /**
* Creates a new transaction context builder.
*
* @return a builder for a transaction context.
diff --git a/core/api/src/main/java/org/onosproject/store/service/Synchronous.java b/core/api/src/main/java/org/onosproject/store/service/Synchronous.java
index d938e48..7ab9e11 100644
--- a/core/api/src/main/java/org/onosproject/store/service/Synchronous.java
+++ b/core/api/src/main/java/org/onosproject/store/service/Synchronous.java
@@ -37,8 +37,8 @@
}
@Override
- public Type type() {
- return primitive.type();
+ public Type primitiveType() {
+ return primitive.primitiveType();
}
@Override
diff --git a/core/api/src/main/java/org/onosproject/store/service/TransactionContext.java b/core/api/src/main/java/org/onosproject/store/service/TransactionContext.java
index 0ac490b..3027fcf 100644
--- a/core/api/src/main/java/org/onosproject/store/service/TransactionContext.java
+++ b/core/api/src/main/java/org/onosproject/store/service/TransactionContext.java
@@ -36,7 +36,7 @@
public interface TransactionContext extends DistributedPrimitive {
@Override
- default DistributedPrimitive.Type type() {
+ default DistributedPrimitive.Type primitiveType() {
return DistributedPrimitive.Type.TRANSACTION_CONTEXT;
}
diff --git a/core/api/src/main/java/org/onosproject/store/service/Versioned.java b/core/api/src/main/java/org/onosproject/store/service/Versioned.java
index 0eec3ff..addaaf9 100644
--- a/core/api/src/main/java/org/onosproject/store/service/Versioned.java
+++ b/core/api/src/main/java/org/onosproject/store/service/Versioned.java
@@ -19,6 +19,7 @@
import java.util.function.Function;
import org.joda.time.DateTime;
+import org.onlab.util.ByteArraySizeHashPrinter;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
@@ -140,7 +141,7 @@
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
- .add("value", value)
+ .add("value", value instanceof byte[] ? new ByteArraySizeHashPrinter((byte[]) value) : value)
.add("version", version)
.add("creationTime", new DateTime(creationTime))
.toString();