Work queue improvements
- Fixed logic to ensure only session to which task is currently assigned can complete it
- Support destroy method to reset work queue state
- Removed deprecated DistributedQueue primitive

Change-Id: I4e1d5be4eb142115130acf15ff34035cb9319a1a
diff --git a/core/api/src/main/java/org/onosproject/store/primitives/DistributedPrimitiveCreator.java b/core/api/src/main/java/org/onosproject/store/primitives/DistributedPrimitiveCreator.java
index 2dfcd2c..768aa0b 100644
--- a/core/api/src/main/java/org/onosproject/store/primitives/DistributedPrimitiveCreator.java
+++ b/core/api/src/main/java/org/onosproject/store/primitives/DistributedPrimitiveCreator.java
@@ -22,7 +22,6 @@
 import org.onosproject.store.service.AsyncConsistentMap;
 import org.onosproject.store.service.AsyncDistributedSet;
 import org.onosproject.store.service.AsyncLeaderElector;
-import org.onosproject.store.service.DistributedQueue;
 import org.onosproject.store.service.WorkQueue;
 import org.onosproject.store.service.Serializer;
 
@@ -61,16 +60,6 @@
     <V> AsyncAtomicValue<V> newAsyncAtomicValue(String name, Serializer serializer);
 
     /**
-     * Creates a new {@code DistributedQueue}.
-     *
-     * @param name queue name
-     * @param serializer serializer to use for serializing/deserializing queue entries
-     * @param <E> queue entry type
-     * @return queue
-     */
-    <E> DistributedQueue<E> newDistributedQueue(String name, Serializer serializer);
-
-    /**
      * Creates a new {@code AsyncDistributedSet}.
      *
      * @param name set name
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 b3328e5..c8949c8 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
@@ -62,9 +62,9 @@
         VALUE,
 
         /**
-         * Distributed queue.
+         * Distributed work queue.
          */
-        QUEUE,
+        WORK_QUEUE,
 
         /**
          * Leader elector.
diff --git a/core/api/src/main/java/org/onosproject/store/service/DistributedQueue.java b/core/api/src/main/java/org/onosproject/store/service/DistributedQueue.java
deleted file mode 100644
index 7266f29..0000000
--- a/core/api/src/main/java/org/onosproject/store/service/DistributedQueue.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright 2015-present 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 java.util.concurrent.CompletableFuture;
-
-/**
- * A distributed collection designed for holding elements prior to processing.
- * A queue provides insertion, extraction and inspection operations. The extraction operation
- * is designed to be non-blocking.
- *
- * @param <E> queue entry type
- */
-public interface DistributedQueue<E> extends DistributedPrimitive {
-
-    /**
-     * Returns total number of entries in the queue.
-     * @return queue size
-     */
-    long size();
-
-    /**
-     * Returns true if queue has elements in it.
-     * @return true is queue has elements, false otherwise
-     */
-    default boolean isEmpty() {
-        return size() == 0;
-    }
-
-    /**
-     * Inserts an entry into the queue.
-     * @param entry entry to insert
-     */
-    void push(E entry);
-
-    /**
-     * If the queue is non-empty, an entry will be removed from the queue and the returned future
-     * will be immediately completed with it. If queue is empty when this call is made, the returned
-     * future will be eventually completed when an entry is added to the queue.
-     * @return queue entry
-     */
-    CompletableFuture<E> pop();
-
-    /**
-     * Returns an entry from the queue without removing it. If the queue is empty returns null.
-     * @return queue entry or null if queue is empty
-     */
-    E peek();
-}
\ No newline at end of file
diff --git a/core/api/src/main/java/org/onosproject/store/service/DistributedQueueBuilder.java b/core/api/src/main/java/org/onosproject/store/service/DistributedQueueBuilder.java
deleted file mode 100644
index 1f32f5e..0000000
--- a/core/api/src/main/java/org/onosproject/store/service/DistributedQueueBuilder.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2015-present 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;
-
-/**
- * Builder for distributed queue.
- *
- * @param <E> type queue elements.
- */
-public interface DistributedQueueBuilder<E> {
-
-    /**
-     * Sets the name of the queue.
-     * <p>
-     * Each queue is identified by a unique name.
-     * </p>
-     * <p>
-     * Note: This is a mandatory parameter.
-     * </p>
-     *
-     * @param name name of the queue
-     * @return this DistributedQueueBuilder for method chaining
-     */
-    DistributedQueueBuilder<E> withName(String name);
-
-    /**
-     * Sets a serializer that can be used to serialize
-     * the elements pushed into the queue. The serializer
-     * builder should be pre-populated with any classes that will be
-     * put into the queue.
-     * <p>
-     * Note: This is a mandatory parameter.
-     * </p>
-     *
-     * @param serializer serializer
-     * @return this DistributedQueueBuilder for method chaining
-     */
-    DistributedQueueBuilder<E> withSerializer(Serializer serializer);
-
-    /**
-     * Builds a queue based on the configuration options
-     * supplied to this builder.
-     *
-     * @return new distributed queue
-     * @throws java.lang.RuntimeException if a mandatory parameter is missing
-     */
-    DistributedQueue<E> build();
-}
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 f342bdd..53830c2 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
@@ -52,14 +52,6 @@
     <E> DistributedSetBuilder<E> setBuilder();
 
     /**
-     * Creates a new DistributedQueueBuilder.
-     *
-     * @param <E> queue entry type
-     * @return builder for an distributed queue
-     */
-    <E> DistributedQueueBuilder<E> queueBuilder();
-
-    /**
      * Creates a new AtomicCounterBuilder.
      *
      * @return atomic counter builder
diff --git a/core/api/src/main/java/org/onosproject/store/service/WorkQueue.java b/core/api/src/main/java/org/onosproject/store/service/WorkQueue.java
index f9b0173..99eaa03 100644
--- a/core/api/src/main/java/org/onosproject/store/service/WorkQueue.java
+++ b/core/api/src/main/java/org/onosproject/store/service/WorkQueue.java
@@ -39,7 +39,12 @@
  *
  * @param <E> task payload type.
  */
-public interface WorkQueue<E> {
+public interface WorkQueue<E> extends DistributedPrimitive {
+
+    @Override
+    default DistributedPrimitive.Type primitiveType() {
+        return DistributedPrimitive.Type.WORK_QUEUE;
+    }
 
     /**
      * Adds a collection of tasks to the work queue.