X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fconfiguration%2Fimplementation%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fconfiguration%2Finternal%2FContainerConfigurationService.java;h=dcab1f63fbc1104e4225b0351455fb3de0db1d70;hb=16b547fe4a083171484de9852926cc73f9705aa2;hp=3e067254edb721cd6e5b7adb109c1e96badbadb2;hpb=17c796caf94ffab1e74c1efe9b3321abc93edf0c;p=controller.git diff --git a/opendaylight/configuration/implementation/src/main/java/org/opendaylight/controller/configuration/internal/ContainerConfigurationService.java b/opendaylight/configuration/implementation/src/main/java/org/opendaylight/controller/configuration/internal/ContainerConfigurationService.java index 3e067254ed..dcab1f63fb 100644 --- a/opendaylight/configuration/implementation/src/main/java/org/opendaylight/controller/configuration/internal/ContainerConfigurationService.java +++ b/opendaylight/configuration/implementation/src/main/java/org/opendaylight/controller/configuration/internal/ContainerConfigurationService.java @@ -9,6 +9,7 @@ package org.opendaylight.controller.configuration.internal; +import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Dictionary; @@ -46,17 +47,19 @@ import org.slf4j.LoggerFactory; */ public class ContainerConfigurationService implements IConfigurationContainerService, - IConfigurationAware, ICacheUpdateAware { + IConfigurationAware, + ICacheUpdateAware { public static final String CONTAINER_SAVE_EVENT_CACHE = "config.container.event.save"; private static final Logger logger = LoggerFactory.getLogger(ContainerConfigurationService.class); private IClusterContainerServices clusterServices; - private ConcurrentMap containerConfigEvent; + private ConcurrentMap containerConfigEvent; // Directory which contains the startup files for this container private String root; private Set configurationAwareList = Collections .synchronizedSet(new HashSet()); private ObjectReader objReader; private ObjectWriter objWriter; + private String containerName; public void addConfigurationContainerAware( IConfigurationContainerAware configurationAware) { @@ -88,7 +91,7 @@ public class ContainerConfigurationService implements IConfigurationContainerSer void init(Component c) { Dictionary props = c.getServiceProperties(); - String containerName = (props != null) ? (String) props.get("containerName") : + containerName = (props != null) ? (String) props.get("containerName") : GlobalConstants.DEFAULT.toString(); root = String.format("%s%s/", GlobalConstants.STARTUPHOME.toString(), containerName); } @@ -127,24 +130,25 @@ public class ContainerConfigurationService implements IConfigurationContainerSer Status status = configurationAware.saveConfiguration(); if (!status.isSuccess()) { success = false; - logger.warn("Failed to save config for {}", configurationAware.getClass().getSimpleName()); + logger.warn("Failed to save config for {} ({})", configurationAware.getClass().getSimpleName(), + status.getDescription()); } } if (success) { return new Status(StatusCode.SUCCESS); } else { - return new Status(StatusCode.INTERNALERROR, "Failed to Save All Configurations"); + return new Status(StatusCode.INTERNALERROR, "Failed to save one or more configurations"); } } @Override public Status saveConfigurations() { - containerConfigEvent.put(ConfigurationEvent.SAVE, ""); + containerConfigEvent.put(ConfigurationEvent.SAVE.toString(), ""); return saveConfiguration(); } @Override - public void entryCreated(ConfigurationEvent key, String cacheName, + public void entryCreated(String key, String cacheName, boolean originLocal) { if (originLocal) { return; @@ -152,19 +156,19 @@ public class ContainerConfigurationService implements IConfigurationContainerSer } @Override - public void entryUpdated(ConfigurationEvent key, String new_value, + public void entryUpdated(String key, String new_value, String cacheName, boolean originLocal) { if (originLocal) { return; } logger.debug("Processing {} event", key); - if (key == ConfigurationEvent.SAVE) { + if (key.equals(ConfigurationEvent.SAVE.toString())) { saveConfiguration(); } } @Override - public void entryDeleted(ConfigurationEvent key, String cacheName, + public void entryDeleted(String key, String cacheName, boolean originLocal) { if (originLocal) { return; @@ -192,7 +196,8 @@ public class ContainerConfigurationService implements IConfigurationContainerSer logger.error("uninitialized clusterServices, can't retrieve cache"); return; } - containerConfigEvent = (ConcurrentMap) this.clusterServices.getCache(CONTAINER_SAVE_EVENT_CACHE); + containerConfigEvent = + (ConcurrentMap) this.clusterServices.getCache(CONTAINER_SAVE_EVENT_CACHE); if (containerConfigEvent == null) { logger.error("Failed to retrieve configuration Cache"); } @@ -200,6 +205,10 @@ public class ContainerConfigurationService implements IConfigurationContainerSer @Override public Status persistConfiguration(List config, String fileName) { + if (!hasBeenSaved()) { + return new Status(StatusCode.NOTALLOWED, + String.format("Container %s has not been saved yet", containerName)); + } String destination = String.format("%s%s", root, fileName); return objWriter.write(config, destination); } @@ -219,4 +228,15 @@ public class ContainerConfigurationService implements IConfigurationContainerSer } return (List) obj; } + + @Override + public boolean hasBeenSaved() { + try { + File configRoot = new File(this.getConfigurationRoot()); + return configRoot.exists(); + } catch (Exception e) { + return false; + } + + } }