X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fconfig%2Fconfig-persister-directory-adapter%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfig%2Fpersist%2Fstorage%2Fdirectory%2FDirectoryPersister.java;h=39595edb0b728de43917e32d9d7a71283499f293;hp=cf4ef98bdc95ecc95700d18191135191660052c1;hb=eff404d4edd10fcde6d85c5821c80263339d9a4a;hpb=49bfc449558d0306f0b6550bc5bdf41e5cafca44 diff --git a/opendaylight/config/config-persister-directory-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/DirectoryPersister.java b/opendaylight/config/config-persister-directory-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/DirectoryPersister.java index cf4ef98bdc..39595edb0b 100644 --- a/opendaylight/config/config-persister-directory-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/DirectoryPersister.java +++ b/opendaylight/config/config-persister-directory-adapter/src/main/java/org/opendaylight/controller/config/persist/storage/directory/DirectoryPersister.java @@ -8,10 +8,10 @@ package org.opendaylight.controller.config.persist.storage.directory; import com.google.common.base.Charsets; -import com.google.common.base.Optional; import com.google.common.io.Files; import org.apache.commons.io.IOUtils; import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolder; +import org.opendaylight.controller.config.persist.api.ConfigSnapshotHolderImpl; import org.opendaylight.controller.config.persist.api.Persister; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,30 +64,25 @@ public class DirectoryPersister implements Persister { } @Override - public Optional loadLastConfig() throws IOException { + public List loadLastConfigs() throws IOException { File[] filesArray = storage.listFiles(); - if (filesArray.length == 0) { - return Optional.absent(); + if (filesArray == null || filesArray.length == 0) { + return Collections.emptyList(); } List sortedFiles = new ArrayList<>(Arrays.asList(filesArray)); Collections.sort(sortedFiles); // combine all found files + logger.debug("Reading files in following order: {}", sortedFiles); - SortedSet combinedCapabilities = new TreeSet<>(); - StringBuilder modulesBuilder = new StringBuilder(), servicesBuilder = new StringBuilder(); + List result = new ArrayList<>(); for (File file : sortedFiles) { logger.trace("Adding file '{}' to combined result", file); - final MyLineProcessor lineProcessor = new MyLineProcessor(); + final MyLineProcessor lineProcessor = new MyLineProcessor(file.getAbsolutePath()); Files.readLines(file, ENCODING, lineProcessor); - - modulesBuilder.append(lineProcessor.getModules()); - servicesBuilder.append(lineProcessor.getServices()); - combinedCapabilities.addAll(lineProcessor.getCapabilities()); + result.add(lineProcessor.getConfigSnapshotHolder(header, middle, footer)); } - String combinedSnapshot = header + modulesBuilder.toString() + middle + servicesBuilder.toString() + footer; - ConfigSnapshotHolder result = new ConfigSnapshotHolderImpl(combinedSnapshot, combinedCapabilities); - return Optional.of(result); + return result; } @@ -103,11 +98,16 @@ public class DirectoryPersister implements Persister { } class MyLineProcessor implements com.google.common.io.LineProcessor { + private final String fileNameForReporting; private boolean inModules, inServices, inCapabilities; private final StringBuffer modulesBuffer = new StringBuffer(), servicesBuilder = new StringBuffer(); private final SortedSet caps = new TreeSet<>(); + MyLineProcessor(String fileNameForReporting) { + this.fileNameForReporting = fileNameForReporting; + } + @Override public String getResult() { return null; @@ -138,40 +138,33 @@ class MyLineProcessor implements com.google.common.io.LineProcessor { return true; } + private void checkFileConsistency(){ + checkState(inCapabilities, "File {} is missing delimiters in this order: {}", fileNameForReporting, + Arrays.asList(DirectoryPersister.MODULES_START, + DirectoryPersister.SERVICES_START, + DirectoryPersister.CAPABILITIES_START)); + } + String getModules() { - checkState(inCapabilities); + checkFileConsistency(); return modulesBuffer.toString(); } String getServices() { - checkState(inCapabilities); + checkFileConsistency(); return servicesBuilder.toString(); } SortedSet getCapabilities() { - checkState(inCapabilities); + checkFileConsistency(); return caps; } -} - -class ConfigSnapshotHolderImpl implements ConfigSnapshotHolder { - - private final String snapshot; - private final SortedSet caps; - - public ConfigSnapshotHolderImpl(String configSnapshot, SortedSet capabilities) { - this.snapshot = configSnapshot; - this.caps = capabilities; - } - - @Override - public String getConfigSnapshot() { - return snapshot; + ConfigSnapshotHolder getConfigSnapshotHolder(String header, String middle, String footer) { + String combinedSnapshot = header + getModules() + middle + getServices() + footer; + ConfigSnapshotHolder result = new ConfigSnapshotHolderImpl(combinedSnapshot, getCapabilities(), fileNameForReporting); + return result; } - @Override - public SortedSet getCapabilities() { - return caps; - } } +