PartitionManager support for reacting to cluster metadata changes

Change-Id: I65e358f5cb47e9420fae9589661ba0ce45f58df6
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartitionServer.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartitionServer.java
index e6669dc..6d613c3 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartitionServer.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartitionServer.java
@@ -31,16 +31,13 @@
 
 import java.io.File;
 import java.util.Collection;
-import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Supplier;
 
-import org.onosproject.cluster.NodeId;
 import org.onosproject.store.service.PartitionInfo;
 import org.slf4j.Logger;
 
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Sets;
 
 /**
  * {@link StoragePartition} server.
@@ -80,7 +77,7 @@
                 return CompletableFuture.completedFuture(null);
             }
             synchronized (this) {
-                server = server();
+                server = buildServer();
             }
             serverOpenFuture = server.open();
         } else {
@@ -97,13 +94,22 @@
 
     @Override
     public CompletableFuture<Void> close() {
-        // We do not close the server because doing so is equivalent to this node
-        // leaving the cluster and we don't want that here.
-        // The Raft protocol should take care of servers leaving unannounced.
-        return CompletableFuture.completedFuture(null);
+        /**
+         * CopycatServer#kill just shuts down the server and does not result
+         * in any cluster membership changes.
+         */
+        return server.kill();
     }
 
-    private CopycatServer server() {
+    /**
+     * Closes the server and exits the partition.
+     * @return future that is completed when the operation is complete
+     */
+    public CompletableFuture<Void> closeAndExit() {
+        return server.close();
+    }
+
+    private CopycatServer buildServer() {
         ResourceTypeResolver resourceResolver = new ServiceLoaderResourceResolver();
         ResourceRegistry registry = new ResourceRegistry();
         resourceTypes.forEach(registry::register);
@@ -124,10 +130,6 @@
         return server;
     }
 
-    public Set<NodeId> configuredMembers() {
-        return Sets.newHashSet(partition.getMembers());
-    }
-
     @Override
     public boolean isOpen() {
         return server.isOpen();