summaryrefslogtreecommitdiffstats
path: root/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer
diff options
context:
space:
mode:
authorJan Srnicek <jsrnicek@cisco.com>2017-06-30 12:46:56 +0200
committerMarek Gradzki <mgradzki@cisco.com>2017-06-30 13:15:59 +0000
commit84ff4e5fd52c064437d0b6dcf43b2223f440b3c5 (patch)
tree45485b3df79423a42922c946724bdc55ee075067 /infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer
parenta90863760d1ae1a92520ce29841aec600d25a83a (diff)
HONEYCOMB-373 - Separate minimal distribution modules to core module
Change-Id: I5278f91ea06f57c84b44a8458ef44469ebd0cf84 Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
Diffstat (limited to 'infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer')
-rw-r--r--infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerPipelineModule.java48
-rw-r--r--infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerRegistryAdapter.java101
-rw-r--r--infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerRegistryAdapterProvider.java54
-rw-r--r--infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/ModifiableDTDelegInitProvider.java50
-rw-r--r--infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/PersistedFileInitializerProvider.java78
5 files changed, 331 insertions, 0 deletions
diff --git a/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerPipelineModule.java b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerPipelineModule.java
new file mode 100644
index 000000000..e0c38f38b
--- /dev/null
+++ b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerPipelineModule.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.honeycomb.infra.distro.initializer;
+
+import com.google.inject.PrivateModule;
+import com.google.inject.Singleton;
+import com.google.inject.name.Names;
+import io.fd.honeycomb.data.ModifiableDataManager;
+import io.fd.honeycomb.data.init.InitializerRegistry;
+import io.fd.honeycomb.infra.distro.data.BindingDataBrokerProvider;
+import io.fd.honeycomb.infra.distro.data.HoneycombDOMDataBrokerProvider;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+
+public final class InitializerPipelineModule extends PrivateModule {
+
+ public static final String HONEYCOMB_INITIALIZER = "honeycomb-initializer";
+
+ protected void configure() {
+ // Create data tree manager on top of non-persisting config data tree
+ bind(ModifiableDataManager.class).toProvider(ModifiableDTDelegInitProvider.class).in(Singleton.class);
+ // Wrap as DOMDataBroker
+ bind(DOMDataBroker.class).toProvider(HoneycombDOMDataBrokerProvider.class).in(Singleton.class);
+ // Wrap as BA data broker
+ bind(DataBroker.class).annotatedWith(Names.named(HONEYCOMB_INITIALIZER))
+ .toProvider(BindingDataBrokerProvider.class).in(Singleton.class);
+ expose(DataBroker.class).annotatedWith(Names.named(HONEYCOMB_INITIALIZER));
+
+ // Create initializer registry so that plugins can provide their initializers
+ bind(InitializerRegistry.class).annotatedWith(Names.named(HONEYCOMB_INITIALIZER))
+ .toProvider(InitializerRegistryAdapterProvider.class).in(Singleton.class);
+ expose(InitializerRegistry.class).annotatedWith(Names.named(HONEYCOMB_INITIALIZER));
+ }
+}
diff --git a/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerRegistryAdapter.java b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerRegistryAdapter.java
new file mode 100644
index 000000000..85fb7772c
--- /dev/null
+++ b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerRegistryAdapter.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.honeycomb.infra.distro.initializer;
+
+import io.fd.honeycomb.data.init.DataTreeInitializer;
+import io.fd.honeycomb.data.init.InitializerRegistry;
+import io.fd.honeycomb.translate.MappingContext;
+import io.fd.honeycomb.translate.ModificationCache;
+import io.fd.honeycomb.translate.read.ReadContext;
+import io.fd.honeycomb.translate.read.registry.InitRegistry;
+import javax.annotation.Nonnull;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+final class InitializerRegistryAdapter implements InitializerRegistry {
+
+ private static final Logger LOG = LoggerFactory.getLogger(InitializerRegistryAdapter.class);
+
+ private final DataTreeInitializer configInitializer;
+ private final DataTreeInitializer contextInitializer;
+ private final InitRegistry initRegistry;
+ private final DataBroker dataBroker;
+ private final MappingContext realtimeMappingContext;
+
+ InitializerRegistryAdapter(final DataTreeInitializer configInitializer,
+ final DataTreeInitializer contextInitializer,
+ final InitRegistry initRegistry,
+ final DataBroker noopConfigDataBroker,
+ final MappingContext realtimeMappingContext) {
+ this.configInitializer = configInitializer;
+ this.contextInitializer = contextInitializer;
+ this.initRegistry = initRegistry;
+ this.dataBroker = noopConfigDataBroker;
+ this.realtimeMappingContext = realtimeMappingContext;
+ }
+
+ @Override
+ public void initialize() throws DataTreeInitializer.InitializeException {
+ LOG.info("Config initialization started");
+
+ try {
+ // Initialize contexts first so that other initializers can find any relevant mapping before initializing
+ // configuration to what is already in VPP
+ contextInitializer.initialize();
+ LOG.info("Persisted context restored successfully");
+ // Initialize all registered initializers
+ initRegistry.initAll(dataBroker, new InitReadContext(realtimeMappingContext));
+ LOG.info("Configuration initialized successfully");
+ // Initialize stored configuration on top
+ configInitializer.initialize();
+ LOG.info("Persisted configuration restored successfully");
+ } catch (Exception e) {
+ LOG.warn("Failed to initialize config", e);
+ }
+
+ LOG.info("Honeycomb initialized");
+ }
+
+ private static final class InitReadContext implements ReadContext {
+
+ private final ModificationCache modificationCache;
+ private final MappingContext realtimeMappingContext;
+
+ InitReadContext(final MappingContext realtimeMappingContext) {
+ modificationCache = new ModificationCache();
+ this.realtimeMappingContext = realtimeMappingContext;
+ }
+
+ @Nonnull
+ @Override
+ public ModificationCache getModificationCache() {
+ return modificationCache;
+ }
+
+ @Nonnull
+ @Override
+ public MappingContext getMappingContext() {
+ return realtimeMappingContext;
+ }
+
+ @Override
+ public void close() {
+ modificationCache.close();
+ }
+ }
+}
diff --git a/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerRegistryAdapterProvider.java b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerRegistryAdapterProvider.java
new file mode 100644
index 000000000..4f5185c40
--- /dev/null
+++ b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/InitializerRegistryAdapterProvider.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.honeycomb.infra.distro.initializer;
+
+import static io.fd.honeycomb.infra.distro.data.ConfigAndOperationalPipelineModule.HONEYCOMB_CONFIG;
+import static io.fd.honeycomb.infra.distro.data.context.ContextPipelineModule.HONEYCOMB_CONTEXT;
+import static io.fd.honeycomb.infra.distro.initializer.InitializerPipelineModule.HONEYCOMB_INITIALIZER;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+import io.fd.honeycomb.data.init.DataTreeInitializer;
+import io.fd.honeycomb.data.init.InitializerRegistry;
+import io.fd.honeycomb.infra.distro.ProviderTrait;
+import io.fd.honeycomb.translate.MappingContext;
+import io.fd.honeycomb.translate.read.registry.ReaderRegistry;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+
+public final class InitializerRegistryAdapterProvider extends ProviderTrait<InitializerRegistry> {
+
+ @Inject
+ @Named(HONEYCOMB_CONTEXT)
+ private DataTreeInitializer contextInitializer;
+ @Inject
+ @Named(HONEYCOMB_CONFIG)
+ private DataTreeInitializer configInitializer;
+ @Inject
+ private ReaderRegistry initRegistry;
+ @Inject
+ @Named(HONEYCOMB_INITIALIZER)
+ private DataBroker noopConfigDataBroker;
+ @Inject
+ @Named(HONEYCOMB_CONTEXT)
+ private MappingContext realtimeMappingContext;
+
+ @Override
+ protected InitializerRegistryAdapter create() {
+ return new InitializerRegistryAdapter(configInitializer, contextInitializer, initRegistry,
+ noopConfigDataBroker, realtimeMappingContext);
+ }
+}
diff --git a/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/ModifiableDTDelegInitProvider.java b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/ModifiableDTDelegInitProvider.java
new file mode 100644
index 000000000..3579ff11d
--- /dev/null
+++ b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/ModifiableDTDelegInitProvider.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.honeycomb.infra.distro.initializer;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+import io.fd.honeycomb.data.ModifiableDataManager;
+import io.fd.honeycomb.data.impl.ModifiableDataTreeDelegator;
+import io.fd.honeycomb.infra.distro.ProviderTrait;
+import io.fd.honeycomb.infra.distro.data.ConfigAndOperationalPipelineModule;
+import io.fd.honeycomb.infra.distro.data.context.ContextPipelineModule;
+import io.fd.honeycomb.translate.util.write.NoopWriterRegistry;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.impl.BindingToNormalizedNodeCodec;
+import org.opendaylight.controller.sal.core.api.model.SchemaService;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree;
+
+public final class ModifiableDTDelegInitProvider extends ProviderTrait<ModifiableDataManager> {
+
+ @Inject
+ private BindingToNormalizedNodeCodec serializer;
+ @Inject
+ @Named(ConfigAndOperationalPipelineModule.HONEYCOMB_CONFIG_NONPERSIST)
+ private DataTree dataTree;
+ @Inject
+ @Named(ContextPipelineModule.HONEYCOMB_CONTEXT)
+ private DataBroker contextBroker;
+ @Inject
+ private SchemaService schemaService;
+
+ @Override
+ public ModifiableDataTreeDelegator create() {
+ return new ModifiableDataTreeDelegator(serializer, dataTree, schemaService.getGlobalContext(),
+ new NoopWriterRegistry(), contextBroker);
+ }
+}
diff --git a/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/PersistedFileInitializerProvider.java b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/PersistedFileInitializerProvider.java
new file mode 100644
index 000000000..58d63cfb3
--- /dev/null
+++ b/infra/minimal-distribution-core/src/main/java/io/fd/honeycomb/infra/distro/initializer/PersistedFileInitializerProvider.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * 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 io.fd.honeycomb.infra.distro.initializer;
+
+import com.google.inject.Inject;
+import io.fd.honeycomb.data.init.RestoringInitializer;
+import io.fd.honeycomb.infra.distro.ProviderTrait;
+import io.fd.honeycomb.infra.distro.cfgattrs.HoneycombConfiguration;
+import java.nio.file.Paths;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.opendaylight.controller.sal.core.api.model.SchemaService;
+
+public abstract class PersistedFileInitializerProvider extends ProviderTrait<RestoringInitializer> {
+
+ @Inject
+ private SchemaService schemaService;
+ @Inject
+ protected HoneycombConfiguration cfgAttributes;
+ @Inject
+ private DOMDataBroker domDataBroker;
+
+ @Override
+ public RestoringInitializer create() {
+ return new RestoringInitializer(schemaService, Paths.get(getPersistPath()), domDataBroker,
+ RestoringInitializer.RestorationType.valueOf(getRestorationType()), getDataStoreType());
+ }
+
+ public abstract String getPersistPath();
+
+ public abstract LogicalDatastoreType getDataStoreType();
+
+ public abstract String getRestorationType();
+
+ public static class PersistedContextInitializerProvider extends PersistedFileInitializerProvider {
+ public String getPersistPath() {
+ return cfgAttributes.peristContextPath;
+ }
+
+ public LogicalDatastoreType getDataStoreType() {
+ return LogicalDatastoreType.OPERATIONAL;
+ }
+
+ public String getRestorationType() {
+ return cfgAttributes.persistedContextRestorationType;
+ }
+
+ }
+
+ public static class PersistedConfigInitializerProvider extends PersistedFileInitializerProvider {
+ public String getPersistPath() {
+ return cfgAttributes.peristConfigPath;
+ }
+
+ public LogicalDatastoreType getDataStoreType() {
+ return LogicalDatastoreType.CONFIGURATION;
+ }
+
+ public String getRestorationType() {
+ return cfgAttributes.persistedConfigRestorationType;
+ }
+
+ }
+}