X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDatastoreSnapshotRestore.java;h=52ab3030bff528b4d44027e58757e0d5d3a63e26;hb=3dffbf36946550b6bf11ac03a80cd4e5c58dbbdf;hp=bed23895d3e5dbdd9681631c494855130f0d5a9a;hpb=288a70d15252b3c5fafd202fe7935563f05da9c8;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreSnapshotRestore.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreSnapshotRestore.java index bed23895d3..52ab3030bf 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreSnapshotRestore.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreSnapshotRestore.java @@ -15,7 +15,6 @@ import java.io.InputStream; import java.io.ObjectInputStream; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import org.opendaylight.controller.cluster.datastore.messages.DatastoreSnapshot; import org.opendaylight.controller.cluster.datastore.messages.DatastoreSnapshotList; @@ -35,29 +34,19 @@ public class DatastoreSnapshotRestore { private final String restoreDirectoryPath; private final Map datastoreSnapshots = new ConcurrentHashMap<>(); - private final AtomicBoolean initialized = new AtomicBoolean(); - public static void createInstance(String restoreDirectoryPath) { + public static DatastoreSnapshotRestore instance(String restoreDirectoryPath) { instance.compareAndSet(null, new DatastoreSnapshotRestore(restoreDirectoryPath)); - } - - public static void removeInstance() { - instance.set(null); - } - - public static DatastoreSnapshotRestore instance() { - DatastoreSnapshotRestore localInstance = instance.get(); - return Preconditions.checkNotNull(localInstance, "DatastoreSnapshotRestore instance was not created"); + return instance.get(); } private DatastoreSnapshotRestore(String restoreDirectoryPath) { this.restoreDirectoryPath = Preconditions.checkNotNull(restoreDirectoryPath); } - private void initialize() { - if(!initialized.compareAndSet(false, true)) { - return; - } + // synchronize this method so that, in case of concurrent access to getAndRemove(), + // no one ends up with partially initialized data + private synchronized void initialize() { File restoreDirectoryFile = new File(restoreDirectoryPath); @@ -93,7 +82,7 @@ public class DatastoreSnapshotRestore { } } - private DatastoreSnapshotList deserialize(InputStream inputStream) throws IOException, ClassNotFoundException { + private static DatastoreSnapshotList deserialize(InputStream inputStream) throws IOException, ClassNotFoundException { try(ObjectInputStream ois = new ObjectInputStream(inputStream)) { return (DatastoreSnapshotList) ois.readObject(); }