package org.opendaylight.controller.configuration.internal;
+import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Dictionary;
*/
public class ContainerConfigurationService implements IConfigurationContainerService,
- IConfigurationAware, ICacheUpdateAware<ConfigurationEvent, String> {
+ IConfigurationAware,
+ ICacheUpdateAware<String, String> {
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 <ConfigurationEvent, String> containerConfigEvent;
+ private ConcurrentMap<String, String> containerConfigEvent;
// Directory which contains the startup files for this container
private String root;
private Set<IConfigurationContainerAware> configurationAwareList = Collections
.synchronizedSet(new HashSet<IConfigurationContainerAware>());
private ObjectReader objReader;
private ObjectWriter objWriter;
+ private String containerName;
public void addConfigurationContainerAware(
IConfigurationContainerAware configurationAware) {
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);
}
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;
}
@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;
logger.error("uninitialized clusterServices, can't retrieve cache");
return;
}
- containerConfigEvent = (ConcurrentMap<ConfigurationEvent, String>) this.clusterServices.getCache(CONTAINER_SAVE_EVENT_CACHE);
+ containerConfigEvent =
+ (ConcurrentMap<String, String>) this.clusterServices.getCache(CONTAINER_SAVE_EVENT_CACHE);
if (containerConfigEvent == null) {
logger.error("Failed to retrieve configuration Cache");
}
@Override
public Status persistConfiguration(List<ConfigurationObject> 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);
}
}
return (List<ConfigurationObject>) obj;
}
+
+ @Override
+ public boolean hasBeenSaved() {
+ try {
+ File configRoot = new File(this.getConfigurationRoot());
+ return configRoot.exists();
+ } catch (Exception e) {
+ return false;
+ }
+
+ }
}