2 * Copyright (c) 2016 Red Hat, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.ovsdb.openstack.netvirt.providers;
11 import java.util.concurrent.ExecutorService;
12 import java.util.concurrent.Executors;
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
14 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
15 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
16 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
17 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
18 import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
19 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
20 import org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.providers.config.rev160109.*;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation;
23 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
24 import org.opendaylight.yangtools.concepts.ListenerRegistration;
25 import org.opendaylight.yangtools.yang.binding.DataObject;
26 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import org.osgi.framework.BundleContext;
28 import org.osgi.framework.ServiceReference;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
32 public class NetvirtProvidersConfigImpl implements AutoCloseable, ConfigInterface, DataChangeListener {
33 private static final Logger LOG = LoggerFactory.getLogger(NetvirtProvidersConfigImpl.class);
34 private final DataBroker dataBroker;
35 private final ListenerRegistration<DataChangeListener> registration;
36 private final ExecutorService executorService = Executors.newFixedThreadPool(1);
37 private final MdsalUtils mdsalUtils;
39 public NetvirtProvidersConfigImpl(final DataBroker dataBroker, final short tableOffset) {
40 this.dataBroker = dataBroker;
41 mdsalUtils = new MdsalUtils(dataBroker);
43 InstanceIdentifier<NetvirtProvidersConfig> path =
44 InstanceIdentifier.builder(NetvirtProvidersConfig.class).build();
45 registration = dataBroker.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, path, this,
46 AsyncDataBroker.DataChangeScope.SUBTREE);
48 NetvirtProvidersConfigBuilder netvirtProvidersConfigBuilder = new NetvirtProvidersConfigBuilder();
49 NetvirtProvidersConfig netvirtProvidersConfig =
50 mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
51 if (netvirtProvidersConfig != null) {
52 netvirtProvidersConfigBuilder = new NetvirtProvidersConfigBuilder(netvirtProvidersConfig);
54 if (netvirtProvidersConfigBuilder.getTableOffset() == null) {
55 netvirtProvidersConfigBuilder.setTableOffset(tableOffset);
57 boolean result = mdsalUtils.merge(LogicalDatastoreType.CONFIGURATION, path,
58 netvirtProvidersConfigBuilder.build());
60 LOG.info("NetvirtProvidersConfigImpl: dataBroker= {}, registration= {}, tableOffset= {}, result= {}",
61 dataBroker, registration, tableOffset, result);
65 public void close() throws Exception {
67 executorService.shutdown();
71 public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> asyncDataChangeEvent) {
72 executorService.submit(new Runnable() {
76 LOG.info("onDataChanged: {}", asyncDataChangeEvent);
77 processConfigCreate(asyncDataChangeEvent);
78 processConfigUpdate(asyncDataChangeEvent);
83 private void processConfigCreate(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
84 for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : changes.getCreatedData().entrySet()) {
85 if (entry.getValue() instanceof NetvirtProvidersConfig) {
86 NetvirtProvidersConfig netvirtProvidersConfig = (NetvirtProvidersConfig) entry.getValue();
87 applyConfig(netvirtProvidersConfig);
92 private void processConfigUpdate(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changes) {
93 for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : changes.getUpdatedData().entrySet()) {
94 if (entry.getValue() instanceof NetvirtProvidersConfig) {
95 LOG.info("processConfigUpdate: {}", entry);
96 NetvirtProvidersConfig netvirtProvidersConfig = (NetvirtProvidersConfig) entry.getValue();
97 applyConfig(netvirtProvidersConfig);
102 private void applyConfig(NetvirtProvidersConfig netvirtProvidersConfig) {
103 LOG.info("processConfigUpdate: {}", netvirtProvidersConfig);
104 if (netvirtProvidersConfig.getTableOffset() != null) {
105 NetvirtProvidersProvider.setTableOffset(netvirtProvidersConfig.getTableOffset());
110 public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
115 public void setDependencies(Object impl) {