X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDatastoreSnapshotRestore.java;h=f6068dd539a0490bc3f74ae9a21ecc4e47bcd571;hb=546cd1fd100dbaa36908b22c2f422320dbd8c4b2;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..f6068dd539 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 @@ -7,20 +7,9 @@ */ package org.opendaylight.controller.cluster.datastore; -import com.google.common.base.Preconditions; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -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; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import com.google.common.annotations.Beta; +import java.util.Optional; +import org.opendaylight.controller.cluster.datastore.persisted.DatastoreSnapshot; /** * This class looks for a previously saved data store backup file in a directory and, if found, de-serializes @@ -28,79 +17,8 @@ import org.slf4j.LoggerFactory; * * @author Thomas Pantelis */ -public class DatastoreSnapshotRestore { - private static final Logger LOG = LoggerFactory.getLogger(DatastoreSnapshotRestore.class); +@Beta +public interface DatastoreSnapshotRestore { - private static AtomicReference instance = new AtomicReference<>(); - - private final String restoreDirectoryPath; - private final Map datastoreSnapshots = new ConcurrentHashMap<>(); - private final AtomicBoolean initialized = new AtomicBoolean(); - - public static void createInstance(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"); - } - - private DatastoreSnapshotRestore(String restoreDirectoryPath) { - this.restoreDirectoryPath = Preconditions.checkNotNull(restoreDirectoryPath); - } - - private void initialize() { - if(!initialized.compareAndSet(false, true)) { - return; - } - - File restoreDirectoryFile = new File(restoreDirectoryPath); - - String[] files = restoreDirectoryFile.list(); - if(files == null || files.length == 0) { - LOG.debug("Restore directory {} does not exist or is empty", restoreDirectoryFile); - return; - } - - if(files.length > 1) { - LOG.error("Found {} files in clustered datastore restore directory {} - expected 1. No restore will be attempted", - files.length, restoreDirectoryFile); - return; - } - - File restoreFile = new File(restoreDirectoryFile, files[0]); - - LOG.info("Clustered datastore will be restored from file {}", restoreFile); - - try(FileInputStream fis = new FileInputStream(restoreFile)) { - DatastoreSnapshotList snapshots = deserialize(fis); - LOG.debug("Deserialized {} snapshots", snapshots.size()); - - for(DatastoreSnapshot snapshot: snapshots) { - datastoreSnapshots.put(snapshot.getType(), snapshot); - } - } catch (Exception e) { - LOG.error("Error reading clustered datastore restore file {}", restoreFile, e); - } finally { - if(!restoreFile.delete()) { - LOG.error("Could not delete clustered datastore restore file {}", restoreFile); - } - } - } - - private DatastoreSnapshotList deserialize(InputStream inputStream) throws IOException, ClassNotFoundException { - try(ObjectInputStream ois = new ObjectInputStream(inputStream)) { - return (DatastoreSnapshotList) ois.readObject(); - } - } - - public DatastoreSnapshot getAndRemove(String datastoreType) { - initialize(); - return datastoreSnapshots.remove(datastoreType); - } + Optional getAndRemove(String datastoreType); }