<forwardingrulesmanager.version>0.5.1-SNAPSHOT</forwardingrulesmanager.version>
<statisticsmanager.version>0.5.1-SNAPSHOT</statisticsmanager.version>
<clustering.services.version>0.5.1-SNAPSHOT</clustering.services.version>
- <configuration.version>0.4.2-SNAPSHOT</configuration.version>
+ <configuration.version>0.4.3-SNAPSHOT</configuration.version>
<topologymanager.version>0.4.2-SNAPSHOT</topologymanager.version>
<protocol_plugin.stub.version>0.4.2-SNAPSHOT</protocol_plugin.stub.version>
<clustering.stub.version>0.4.2-SNAPSHOT</clustering.stub.version>
</scm>
<artifactId>configuration</artifactId>
- <version>0.4.2-SNAPSHOT</version>
+ <version>0.4.3-SNAPSHOT</version>
<packaging>bundle</packaging>
<build>
public interface IConfigurationContainerService extends IConfigurationServiceCommon {
/**
- * Bundle will call this function to ask ContainerConfigurationService to provide the
- * directory location of container
+ * This function returns the path to the configuration directory of the
+ * current container.
*
- * @return The path to active container directory
+ * @return The path to active container's configuration directory
*/
- String getConfigurationRoot();
+ public String getConfigurationRoot();
+
+ /**
+ * Function checks whether there exists a saved configuration for this
+ * container (This is essentially checking whether the container's root
+ * configuration directory exists)
+ *
+ * @return True iff container config has been saved at least once
+ */
+ public boolean hasBeenSaved();
+
}
</scm>
<artifactId>configuration.implementation</artifactId>
- <version>0.4.2-SNAPSHOT</version>
+ <version>0.4.3-SNAPSHOT</version>
<packaging>bundle</packaging>
<build>
public void init() {
logger.info("ConfigurationService Manager init");
+
+ // Create the default startup directory, so that container unaware apps can initiate save
+ createContainerDirectory(ROOT + GlobalConstants.DEFAULT.toString());
}
public void start() {
List<String> containerList = new ArrayList<String>();
for (IConfigurationAware configurationAware : this.configurationAwareList) {
if (configurationAware instanceof IConfigurationContainerService) {
- String containerFilePath = ((ContainerConfigurationService)configurationAware).getConfigurationRoot();
+ String containerFilePath = ((IConfigurationContainerService)configurationAware).getConfigurationRoot();
containerList.add(containerFilePath);
}
}
}
private void createContainerDirectory(IConfigurationAware configurationAware) {
- String containerFilePath = ((ContainerConfigurationService) configurationAware).getConfigurationRoot();
- if (!new File(containerFilePath).exists()) {
- boolean created = new File(containerFilePath).mkdir();
- if (!created) {
- logger.error("Failed to create startup config directory: {}", containerFilePath);
+ String containerFilePath = ((IConfigurationContainerService) configurationAware).getConfigurationRoot();
+ createContainerDirectory(containerFilePath);
+ }
+
+ private void createContainerDirectory(String containerFilePath) {
+
+ try {
+ if (!new File(containerFilePath).exists()) {
+ boolean created = new File(containerFilePath).mkdir();
+ if (!created) {
+ logger.error("Failed to create config directory: {}", containerFilePath);
+ }
}
+ } catch (Exception e) {
+ logger.error("Failed to create config directory: {} ({})", containerFilePath, e.getMessage());
}
}
package org.opendaylight.controller.configuration.internal;
+import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Dictionary;
.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 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;
+ }
+
+ }
}