From c9e5e95accc9b417c4be9754e979f38f008eaac0 Mon Sep 17 00:00:00 2001 From: Deepthi V V Date: Tue, 21 Apr 2015 12:14:18 +0530 Subject: [PATCH] Initial checkin for FIB Manager Provider Signed-off-by: Deepthi V V Change-Id: I92db8ae164b14d47c3d8e4b7e9cefe709cea3564 --- fibmanager/fibmanager-impl/pom.xml | 10 ++ .../vpnservice/fibmanager/FibManager.java | 114 ++++++++++++++++++ .../fibmanager/FibManagerProvider.java | 39 ++++++ .../impl/rev150325/FibmanagerImplModule.java | 14 ++- .../impl/rev150325/NexthopmgrImplModule.java | 8 +- 5 files changed, 181 insertions(+), 4 deletions(-) create mode 100644 fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java create mode 100644 fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java diff --git a/fibmanager/fibmanager-impl/pom.xml b/fibmanager/fibmanager-impl/pom.xml index 732bd2f5..95b37969 100644 --- a/fibmanager/fibmanager-impl/pom.xml +++ b/fibmanager/fibmanager-impl/pom.xml @@ -21,6 +21,16 @@ and is available at http://www.eclipse.org/legal/epl-v10.html 0.0.1-SNAPSHOT bundle + + org.opendaylight.vpnservice + fibmanager-api + 0.0.1-SNAPSHOT + + + org.opendaylight.vpnservice + vpnmanager-impl + 1.0-SNAPSHOT + junit diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java new file mode 100644 index 00000000..42476b08 --- /dev/null +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManager.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.vpnservice.fibmanager; + +import com.google.common.util.concurrent.Futures; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import com.google.common.util.concurrent.FutureCallback; +import org.opendaylight.vpnservice.AbstractDataChangeListener; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.fibmanager.rev150330.FibEntries; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.google.common.base.Optional; + +public class FibManager extends AbstractDataChangeListener implements AutoCloseable{ + private static final Logger LOG = LoggerFactory.getLogger(FibManager.class); + private ListenerRegistration listenerRegistration; + private final DataBroker broker; + + private static final FutureCallback DEFAULT_CALLBACK = + new FutureCallback() { + public void onSuccess(Void result) { + LOG.debug("Success in Datastore write operation"); + } + + public void onFailure(Throwable error) { + LOG.error("Error in Datastore write operation", error); + }; + }; + + public FibManager(final DataBroker db) { + super(FibEntries.class); + broker = db; + registerListener(db); + } + + @Override + public void close() throws Exception { + if (listenerRegistration != null) { + try { + listenerRegistration.close(); + } catch (final Exception e) { + LOG.error("Error when cleaning up DataChangeListener.", e); + } + listenerRegistration = null; + } + LOG.info("Fib Manager Closed"); + } + + private void registerListener(final DataBroker db) { + try { + listenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, + getWildCardPath(), FibManager.this, DataChangeScope.SUBTREE); + } catch (final Exception e) { + LOG.error("FibManager DataChange listener registration fail!", e); + throw new IllegalStateException("FibManager registration Listener failed.", e); + } + } + + @Override + protected void add(final InstanceIdentifier identifier, + final FibEntries fibEntries) { + LOG.trace("key: " + identifier + ", value=" + fibEntries ); + } + + private Optional read(LogicalDatastoreType datastoreType, + InstanceIdentifier path) { + + ReadOnlyTransaction tx = broker.newReadOnlyTransaction(); + + Optional result = Optional.absent(); + try { + result = tx.read(datastoreType, path).get(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return result; + } + + private InstanceIdentifier getWildCardPath() { + return InstanceIdentifier.create(FibEntries.class); + } + + @Override + protected void remove(InstanceIdentifier identifier, FibEntries del) { + LOG.trace("key: " + identifier + ", value=" + del ); + } + + @Override + protected void update(InstanceIdentifier identifier, FibEntries original, FibEntries update) { + LOG.trace("key: " + identifier + ", original=" + original + ", update=" + update ); + } + + private void asyncWrite(LogicalDatastoreType datastoreType, + InstanceIdentifier path, T data, FutureCallback callback) { + WriteTransaction tx = broker.newWriteOnlyTransaction(); + tx.put(datastoreType, path, data, true); + Futures.addCallback(tx.submit(), callback); + } +} diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java new file mode 100644 index 00000000..2015dc0f --- /dev/null +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/vpnservice/fibmanager/FibManagerProvider.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.vpnservice.fibmanager; + +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; +import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FibManagerProvider implements BindingAwareProvider, AutoCloseable { + + private static final Logger LOG = LoggerFactory.getLogger(FibManagerProvider.class); + + private FibManager fibManager; + + @Override + public void onSessionInitiated(ProviderContext session) { + LOG.info("FibManagerProvider Session Initiated"); + try { + final DataBroker dataBroker = session.getSALService(DataBroker.class); + fibManager = new FibManager(dataBroker); + } catch (Exception e) { + LOG.error("Error initializing services", e); + } + } + + @Override + public void close() throws Exception { + LOG.info("FibManagerProvider Closed"); + fibManager.close(); + } + +} \ No newline at end of file diff --git a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/fibmanager/impl/rev150325/FibmanagerImplModule.java b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/fibmanager/impl/rev150325/FibmanagerImplModule.java index c8457217..f3d9acd9 100644 --- a/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/fibmanager/impl/rev150325/FibmanagerImplModule.java +++ b/fibmanager/fibmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/fibmanager/impl/rev150325/FibmanagerImplModule.java @@ -1,4 +1,13 @@ +/* + * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.fibmanager.impl.rev150325; +import org.opendaylight.vpnservice.fibmanager.FibManagerProvider; + public class FibmanagerImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.fibmanager.impl.rev150325.AbstractFibmanagerImplModule { public FibmanagerImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); @@ -15,8 +24,9 @@ public class FibmanagerImplModule extends org.opendaylight.yang.gen.v1.urn.opend @Override public java.lang.AutoCloseable createInstance() { - // TODO:implement - throw new java.lang.UnsupportedOperationException(); + FibManagerProvider provider = new FibManagerProvider(); + getBrokerDependency().registerProvider(provider); + return provider; } } diff --git a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/nexthopmgr/impl/rev150325/NexthopmgrImplModule.java b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/nexthopmgr/impl/rev150325/NexthopmgrImplModule.java index 66ae335c..90470f0c 100644 --- a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/nexthopmgr/impl/rev150325/NexthopmgrImplModule.java +++ b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/nexthopmgr/impl/rev150325/NexthopmgrImplModule.java @@ -1,4 +1,7 @@ package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nexthopmgr.impl.rev150325; + +import org.opendaylight.vpnservice.nexthopmgr.NexthopmgrProvider; + public class NexthopmgrImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nexthopmgr.impl.rev150325.AbstractNexthopmgrImplModule { public NexthopmgrImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { super(identifier, dependencyResolver); @@ -15,8 +18,9 @@ public class NexthopmgrImplModule extends org.opendaylight.yang.gen.v1.urn.opend @Override public java.lang.AutoCloseable createInstance() { - // TODO:implement - throw new java.lang.UnsupportedOperationException(); + NexthopmgrProvider provider = new NexthopmgrProvider(); + getBrokerDependency().registerProvider(provider); + return provider; } } -- 2.36.6