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;
private final String restoreDirectoryPath;
private final Map<String, DatastoreSnapshot> 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);
}
}
- 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();
}