diff options
author | CNlucius <lukai1@huawei.com> | 2016-09-13 11:40:12 +0800 |
---|---|---|
committer | CNlucius <lukai1@huawei.com> | 2016-09-13 11:41:53 +0800 |
commit | b731e2f1dd0972409b136aebc7b463dd72c9cfad (patch) | |
tree | 5107d7d80c19ad8076c2c97c2b5ef8d1cf3ab903 /framework/src/onos/core/net/src/main/java/org/onosproject/cfg | |
parent | ee93993458266114c29271a481ef9ce7ce621b2a (diff) |
ONOSFW-171
O/S-SFC-ONOS scenario documentation
Change-Id: I51ae1cf736ea24ab6680f8edca1b2bf5dd598365
Signed-off-by: CNlucius <lukai1@huawei.com>
Diffstat (limited to 'framework/src/onos/core/net/src/main/java/org/onosproject/cfg')
4 files changed, 0 insertions, 480 deletions
diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigLoader.java b/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigLoader.java deleted file mode 100644 index 6678db27..00000000 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigLoader.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.onosproject.cfg.impl; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.onosproject.cfg.ComponentConfigService; -import org.slf4j.Logger; - -import java.io.File; - -import static org.slf4j.LoggerFactory.getLogger; - -/** - * Component responsible for automatically loading configuration file from - * configuration directory. - */ -@Component(immediate = true) -public class ComponentConfigLoader { - - private static final String CFG_JSON = "../config/component-cfg.json"; - static File cfgFile = new File(CFG_JSON); - - private final Logger log = getLogger(getClass()); - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected ComponentConfigService configService; - - private ObjectNode root; - - @Activate - protected void activate() { - this.loadConfigs(); - log.info("Started"); - } - - // Loads the configurations for each component from the file in - // ../config/component-cfg.json, using the preSetProperty method. - private void loadConfigs() { - try { - if (cfgFile.exists()) { - root = (ObjectNode) new ObjectMapper().readTree(cfgFile); - root.fieldNames(). - forEachRemaining(component -> root.path(component).fieldNames() - .forEachRemaining(k -> configService - .preSetProperty(component, k, - root.path(component).path(k) - .asText()))); - log.info("Loaded initial component configuration from {}", cfgFile); - } - } catch (Exception e) { - log.warn("Unable to load initial component configuration from {}", - cfgFile, e); - } - } -} diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java b/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java deleted file mode 100644 index b3b22c76..00000000 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ComponentConfigManager.java +++ /dev/null @@ -1,305 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.cfg.impl; - -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; -import org.apache.felix.scr.annotations.Activate; -import org.apache.felix.scr.annotations.Component; -import org.apache.felix.scr.annotations.Deactivate; -import org.apache.felix.scr.annotations.Reference; -import org.apache.felix.scr.annotations.ReferenceCardinality; -import org.apache.felix.scr.annotations.Service; -import org.onlab.util.AbstractAccumulator; -import org.onlab.util.Accumulator; -import org.onlab.util.SharedExecutors; -import org.onosproject.cfg.ComponentConfigEvent; -import org.onosproject.cfg.ComponentConfigService; -import org.onosproject.cfg.ComponentConfigStore; -import org.onosproject.cfg.ComponentConfigStoreDelegate; -import org.onosproject.cfg.ConfigProperty; -import org.osgi.service.cm.Configuration; -import org.osgi.service.cm.ConfigurationAdmin; -import org.slf4j.Logger; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static org.onosproject.security.AppGuard.checkPermission; -import static org.slf4j.LoggerFactory.getLogger; -import static org.onosproject.security.AppPermission.Type.*; - - -/** - * Implementation of the centralized component configuration service. - */ -@Component(immediate = true) -@Service -public class ComponentConfigManager implements ComponentConfigService { - - private static final String COMPONENT_NULL = "Component name cannot be null"; - private static final String PROPERTY_NULL = "Property name cannot be null"; - private static final String COMPONENT_MISSING = "Component %s is not registered"; - private static final String PROPERTY_MISSING = "Property %s does not exist for %s"; - - - //Symbolic constants for use with the accumulator - private static final int MAX_ITEMS = 100; - private static final int MAX_BATCH_MILLIS = 1000; - private static final int MAX_IDLE_MILLIS = 250; - - private static final String RESOURCE_EXT = ".cfgdef"; - - private final Logger log = getLogger(getClass()); - - private final ComponentConfigStoreDelegate delegate = new InternalStoreDelegate(); - private final InternalAccumulator accumulator = new InternalAccumulator(); - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected ComponentConfigStore store; - - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) - protected ConfigurationAdmin cfgAdmin; - - // Locally maintained catalog of definitions. - private final Map<String, Map<String, ConfigProperty>> properties = - Maps.newConcurrentMap(); - - - @Activate - public void activate() { - store.setDelegate(delegate); - log.info("Started"); - } - - @Deactivate - public void deactivate() { - store.unsetDelegate(delegate); - log.info("Stopped"); - } - - @Override - public Set<String> getComponentNames() { - checkPermission(CONFIG_READ); - - return ImmutableSet.copyOf(properties.keySet()); - } - - @Override - public void registerProperties(Class<?> componentClass) { - checkPermission(CONFIG_WRITE); - - String componentName = componentClass.getName(); - String resourceName = componentClass.getSimpleName() + RESOURCE_EXT; - try (InputStream ris = componentClass.getResourceAsStream(resourceName)) { - checkArgument(ris != null, "Property definitions not found at resource %s", - resourceName); - - // Read the definitions - Set<ConfigProperty> defs = ConfigPropertyDefinitions.read(ris); - - // Produce a new map of the properties and register it. - Map<String, ConfigProperty> map = Maps.newConcurrentMap(); - defs.forEach(p -> map.put(p.name(), p)); - - properties.put(componentName, map); - loadExistingValues(componentName); - } catch (IOException e) { - log.error("Unable to read property definitions from resource " + resourceName, e); - } - } - - @Override - public void unregisterProperties(Class<?> componentClass, boolean clear) { - checkPermission(CONFIG_WRITE); - - String componentName = componentClass.getName(); - checkNotNull(componentName, COMPONENT_NULL); - Map<String, ConfigProperty> cps = properties.remove(componentName); - if (clear && cps != null) { - cps.keySet().forEach(name -> store.unsetProperty(componentName, name)); - clearExistingValues(componentName); - } - } - - // Clears any existing values that may have been set. - private void clearExistingValues(String componentName) { - triggerUpdate(componentName); - } - - @Override - public Set<ConfigProperty> getProperties(String componentName) { - checkPermission(CONFIG_READ); - - Map<String, ConfigProperty> map = properties.get(componentName); - return map != null ? ImmutableSet.copyOf(map.values()) : null; - } - - @Override - public void setProperty(String componentName, String name, String value) { - checkPermission(CONFIG_WRITE); - - checkNotNull(componentName, COMPONENT_NULL); - checkNotNull(name, PROPERTY_NULL); - - checkArgument(properties.containsKey(componentName), - COMPONENT_MISSING, componentName); - checkArgument(properties.get(componentName).containsKey(name), - PROPERTY_MISSING, name, componentName); - store.setProperty(componentName, name, value); - } - - @Override - public void preSetProperty(String componentName, String name, String value) { - - checkPermission(CONFIG_WRITE); - - checkNotNull(componentName, COMPONENT_NULL); - checkNotNull(name, PROPERTY_NULL); - - store.setProperty(componentName, name, value); - } - - @Override - public void unsetProperty(String componentName, String name) { - checkPermission(CONFIG_WRITE); - - checkNotNull(componentName, COMPONENT_NULL); - checkNotNull(name, PROPERTY_NULL); - - checkArgument(properties.containsKey(componentName), - COMPONENT_MISSING, componentName); - checkArgument(properties.get(componentName).containsKey(name), - PROPERTY_MISSING, name, componentName); - store.unsetProperty(componentName, name); - } - - private class InternalStoreDelegate implements ComponentConfigStoreDelegate { - - @Override - public void notify(ComponentConfigEvent event) { - String componentName = event.subject(); - String name = event.name(); - String value = event.value(); - - switch (event.type()) { - case PROPERTY_SET: - set(componentName, name, value); - break; - case PROPERTY_UNSET: - reset(componentName, name); - break; - default: - break; - } - } - } - - // Buffers multiple subsequent configuration updates into one notification. - private class InternalAccumulator extends AbstractAccumulator<String> - implements Accumulator<String> { - - protected InternalAccumulator() { - super(SharedExecutors.getTimer(), MAX_ITEMS, MAX_BATCH_MILLIS, MAX_IDLE_MILLIS); - } - - @Override - public void processItems(List<String> items) { - // Conversion to set removes duplicates - Set<String> componentSet = new HashSet<>(items); - componentSet.forEach(ComponentConfigManager.this::triggerUpdate); - } - } - - // Locates the property in the component map and replaces it with an - // updated copy. - private void set(String componentName, String name, String value) { - Map<String, ConfigProperty> map = properties.get(componentName); - if (map != null) { - ConfigProperty prop = map.get(name); - if (prop != null) { - map.put(name, ConfigProperty.setProperty(prop, value)); - accumulator.add(componentName); - return; - } - } - log.warn("Unable to set non-existent property {} for component {}", - name, componentName); - } - - // Locates the property in the component map and replaces it with an - // reset copy. - private void reset(String componentName, String name) { - Map<String, ConfigProperty> map = properties.get(componentName); - if (map != null) { - ConfigProperty prop = map.get(name); - if (prop != null) { - map.put(name, ConfigProperty.resetProperty(prop)); - accumulator.add(componentName); - return; - } - log.warn("Unable to reset non-existent property {} for component {}", - name, componentName); - } - } - - // Loads existing property values that may have been set. - private void loadExistingValues(String componentName) { - try { - Configuration cfg = cfgAdmin.getConfiguration(componentName, null); - Map<String, ConfigProperty> map = properties.get(componentName); - Dictionary<String, Object> props = cfg.getProperties(); - if (props != null) { - Enumeration<String> it = props.keys(); - while (it.hasMoreElements()) { - String name = it.nextElement(); - ConfigProperty p = map.get(name); - if (p != null) { - map.put(name, ConfigProperty.setProperty(p, (String) props.get(name))); - } - } - } - } catch (IOException e) { - log.error("Unable to get configuration for " + componentName, e); - } - - } - - // FIXME: This should be a slightly deferred execution to allow changing - // values just once per component when a number of updates arrive shortly - // after each other. - private void triggerUpdate(String componentName) { - try { - Configuration cfg = cfgAdmin.getConfiguration(componentName, null); - Map<String, ConfigProperty> map = properties.get(componentName); - Dictionary<String, Object> props = new Hashtable<>(); - map.values().forEach(p -> props.put(p.name(), p.value())); - cfg.update(props); - } catch (IOException e) { - log.warn("Unable to update configuration for " + componentName, e); - } - } - -} diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ConfigPropertyDefinitions.java b/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ConfigPropertyDefinitions.java deleted file mode 100644 index 0f416c76..00000000 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/ConfigPropertyDefinitions.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.onosproject.cfg.impl; - -import com.google.common.collect.ImmutableSet; -import org.onosproject.cfg.ConfigProperty; -import org.onosproject.cfg.ConfigProperty.Type; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.util.Set; - -import static org.onosproject.cfg.ConfigProperty.defineProperty; - -/** - * Utility for writing and reading configuration property definition file. - */ -public final class ConfigPropertyDefinitions { - - private static final String FMT = "%s|%s|%s|%s\n"; - private static final String SEP = "\\|"; - private static final String COMMENT = "#"; - - private ConfigPropertyDefinitions() { - } - - /** - * Writes the specified set of property definitions into the given output - * stream. - * - * @param stream output stream - * @param props properties whose definitions are to be written - * @throws java.io.IOException if unable to write the stream - */ - public static void write(OutputStream stream, Set<ConfigProperty> props) throws IOException { - try (PrintWriter pw = new PrintWriter(new OutputStreamWriter(stream))) { - props.forEach(p -> pw.format(FMT, p.name(), p.type(), p.description(), p.defaultValue())); - } - } - - /** - * Reads the specified input stream and creates from its contents a - * set of property definitions. - * - * @param stream input stream - * @return properties whose definitions are contained in the stream - * @throws java.io.IOException if unable to read the stream - */ - public static Set<ConfigProperty> read(InputStream stream) throws IOException { - ImmutableSet.Builder<ConfigProperty> builder = ImmutableSet.builder(); - try (BufferedReader br = new BufferedReader(new InputStreamReader(stream))) { - String line; - while ((line = br.readLine()) != null) { - if (!line.isEmpty() && !line.startsWith(COMMENT)) { - String[] f = line.split(SEP, 4); - builder.add(defineProperty(f[0], Type.valueOf(f[1]), f[2], f[3])); - } - } - } - return builder.build(); - } - -} diff --git a/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/package-info.java b/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/package-info.java deleted file mode 100644 index 4f76c31c..00000000 --- a/framework/src/onos/core/net/src/main/java/org/onosproject/cfg/impl/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2015 Open Networking Laboratory - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Subsystem for central management of component configurations. - */ -package org.onosproject.cfg.impl;
\ No newline at end of file |