From: Florin Coras Date: Mon, 13 Jul 2015 00:20:28 +0000 (+0200) Subject: Move HashMapDb to its own bundle X-Git-Tag: release/beryllium~140 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=6e425e7db05425792380c0ae5e0bea028b25a111;p=lispflowmapping.git Move HashMapDb to its own bundle HashMapDb is a simple, in memory implementation of ILispDAO, the interface that defines the API for the interaction with the Map-Server's mappings database. Until now, HashMapDb was part of mappingservice.implementation but with this commit it is moved to its own mappingservice.inmemorydb bundle. An important feature is that a ILispDAO implementation is now injected into mappingservice.implementation at runtime through config-subsystem. As a result, InMemoryDb can be easily swapped with other implementations. Change-Id: I29af97b831414eecbbf3c29e6fbec086a627a770 Signed-off-by: Florin Coras --- diff --git a/artifacts/pom.xml b/artifacts/pom.xml index 12b76c9bf..bdc3f0046 100644 --- a/artifacts/pom.xml +++ b/artifacts/pom.xml @@ -37,6 +37,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html mappingservice.implementation ${project.version} + + ${project.groupId} + mappingservice.inmemorydb + ${project.version} + ${project.groupId} mappingservice.netconf diff --git a/commons/parent/pom.xml b/commons/parent/pom.xml index fb5bc6122..a6d445562 100644 --- a/commons/parent/pom.xml +++ b/commons/parent/pom.xml @@ -231,7 +231,11 @@ mappingservice.implementation ${lispflowmapping.version} - + + org.opendaylight.lispflowmapping + mappingservice.inmemorydb + ${lispflowmapping.version} + org.opendaylight.lispflowmapping mappingservice.netconf diff --git a/features/pom.xml b/features/pom.xml index 33279f2ed..b400f1599 100644 --- a/features/pom.xml +++ b/features/pom.xml @@ -116,6 +116,17 @@ org.opendaylight.lispflowmapping mappingservice.config + + org.opendaylight.lispflowmapping + mappingservice.inmemorydb + + + ${project.groupId} + mappingservice.inmemorydb + ${project.version} + config + xml + org.opendaylight.lispflowmapping mappingservice.netconf diff --git a/features/src/main/resources/features.xml b/features/src/main/resources/features.xml index eef6465e0..b82417d2a 100644 --- a/features/src/main/resources/features.xml +++ b/features/src/main/resources/features.xml @@ -37,6 +37,7 @@ odl-yangtools-binding odl-yangtools-models + odl-lispflowmapping-inmemorydb mvn:com.google.guava/guava/${guava.version} mvn:org.opendaylight.lispflowmapping/mappingservice.yangmodel/${lispflowmapping.version} mvn:org.opendaylight.lispflowmapping/mappingservice.api/${lispflowmapping.version} @@ -48,6 +49,19 @@ + + odl-mdsal-broker + odl-yangtools-binding + odl-yangtools-models + mvn:com.google.guava/guava/${guava.version} + mvn:org.opendaylight.lispflowmapping/mappingservice.yangmodel/${lispflowmapping.version} + mvn:org.opendaylight.lispflowmapping/mappingservice.api/${lispflowmapping.version} + mvn:org.opendaylight.lispflowmapping/mappingservice.inmemorydb/${lispflowmapping.version} + + mvn:org.opendaylight.lispflowmapping/mappingservice.inmemorydb/${lispflowmapping.version}/xml/config + + + odl-lispflowmapping-mappingservice mvn:org.opendaylight.lispflowmapping/mappingservice.southbound/${lispflowmapping.version} @@ -67,4 +81,5 @@ odl-lispflowmapping-mappingservice mvn:org.opendaylight.lispflowmapping/mappingservice.neutron/${lispflowmapping.version} + diff --git a/mappingservice/api/pom.xml b/mappingservice/api/pom.xml index 9f30d7d2a..6d360c0cc 100644 --- a/mappingservice/api/pom.xml +++ b/mappingservice/api/pom.xml @@ -8,9 +8,7 @@ 1.3.0-SNAPSHOT - org.opendaylight.lispflowmapping mappingservice.api - 1.3.0-SNAPSHOT bundle Mapping Service Public APIs @@ -27,43 +25,13 @@ org.opendaylight.lispflowmapping mappingservice.yangmodel + + org.opendaylight.yangtools.model + ietf-inet-types + + + org.opendaylight.yangtools.model + ietf-yang-types + - - - - - org.apache.felix - maven-bundle-plugin - true - - - org.opendaylight.lispflowmapping.interfaces.dao, - org.opendaylight.lispflowmapping.interfaces.lisp, - org.opendaylight.lispflowmapping.type, - org.opendaylight.lispflowmapping.type.lisp, - org.opendaylight.lispflowmapping.type.lisp.address, - org.opendaylight.lispflowmapping.type.sbplugin - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314, - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress, - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer, - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.locatorrecords, - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords, - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address, - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispsimpleaddress, - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispsimpleaddress.primitiveaddress, - org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.transportaddress, - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924, - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924, - org.opendaylight.controller.sal.binding.api, - org.opendaylight.yangtools.yang.binding, - javax.xml.bind, - javax.xml.bind.annotation, - org.slf4j, - org.opendaylight.yangtools.yang.common, - com.google.common.collect - - - - - diff --git a/mappingservice/api/src/main/yang/lfm-ms-dao.yang b/mappingservice/api/src/main/yang/lfm-ms-dao.yang new file mode 100644 index 000000000..3507e4a77 --- /dev/null +++ b/mappingservice/api/src/main/yang/lfm-ms-dao.yang @@ -0,0 +1,20 @@ +module lfm-ms-dao { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:lfm:ms:dao"; + prefix "ms-dao"; + + import config { prefix config; revision-date 2013-04-05; } + + description + "Service definition for Mapping Service DAO."; + + revision "2015-07-13" { + description + "Initial revision"; + } + + identity ms-dao { + base "config:service-type"; + config:java-class "org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO"; + } +} \ No newline at end of file diff --git a/mappingservice/implementation/pom.xml b/mappingservice/implementation/pom.xml index e95989541..8376d852a 100644 --- a/mappingservice/implementation/pom.xml +++ b/mappingservice/implementation/pom.xml @@ -8,9 +8,7 @@ 1.3.0-SNAPSHOT - org.opendaylight.lispflowmapping mappingservice.implementation - 1.3.0-SNAPSHOT bundle Mapping Service Implementation @@ -20,18 +18,17 @@ mappingservice.api ${project.version} + + ${project.groupId} + mappingservice.inmemorydb + ${project.version} + ${project.groupId} mappingservice.yangmodel ${project.version} - - - org.apache.felix - org.apache.felix.dependencymanager - - equinoxSDK381 diff --git a/mappingservice/implementation/src/main/config/default-config.xml b/mappingservice/implementation/src/main/config/default-config.xml index bce866835..e622f85c2 100644 --- a/mappingservice/implementation/src/main/config/default-config.xml +++ b/mappingservice/implementation/src/main/config/default-config.xml @@ -2,6 +2,7 @@ urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28 + urn:opendaylight:params:xml:ns:yang:controller:config:lfm:ms:dao?module=lfm-ms-dao&revision=2015-07-13 urn:opendaylight:params:xml:ns:yang:controller:config:lfm-mappingservice:impl?module=lfm-mappingservice-impl&revision=2015-05-17 @@ -12,21 +13,22 @@ prefix:lfm-mappingservice-impl lfm-mappingservice-default - binding:binding-rpc-registry binding-rpc-broker - binding:binding-async-data-broker binding-data-broker - binding:binding-broker-osgi-registry binding-osgi-broker + + dao:ms-dao + lfm-ms-inmemorydb + @@ -40,7 +42,5 @@ - - \ No newline at end of file diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/controller/config/yang/config/lfm_mappingservice/impl/LfmMappingServiceModule.java b/mappingservice/implementation/src/main/java/org/opendaylight/controller/config/yang/config/lfm_mappingservice/impl/LfmMappingServiceModule.java index fe59f3fa6..482c4cc64 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/controller/config/yang/config/lfm_mappingservice/impl/LfmMappingServiceModule.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/controller/config/yang/config/lfm_mappingservice/impl/LfmMappingServiceModule.java @@ -36,6 +36,7 @@ public class LfmMappingServiceModule extends org.opendaylight.controller.config. lfmService.setDataBrokerService(getDataBrokerDependency()); lfmService.setRpcProviderRegistry(getRpcRegistryDependency()); lfmService.setBindingAwareBroker(getBrokerDependency()); + lfmService.setLispDao(getDaoDependency()); lfmService.initialize(); return lfmService; diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java index 8c150f692..bf47a9db9 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java @@ -20,7 +20,6 @@ import org.opendaylight.controller.sal.binding.api.NotificationListener; import org.opendaylight.controller.sal.binding.api.NotificationService; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.lispflowmapping.implementation.config.ConfigIni; -import org.opendaylight.lispflowmapping.implementation.dao.HashMapDb; import org.opendaylight.lispflowmapping.implementation.dao.MappingServiceKey; import org.opendaylight.lispflowmapping.implementation.dao.MappingServiceNoMaskKey; import org.opendaylight.lispflowmapping.implementation.lisp.AbstractLispComponent; @@ -122,7 +121,7 @@ public class LispMappingService implements IFlowMapping, IFlowMappingShell, Bind LfmMappingDatabaseRpc mappingDbProviderRpc = new LfmMappingDatabaseRpc(dataBrokerService); lfmDbRpc = rpcRegistry.addRpcImplementation(LfmMappingDatabaseService.class, mappingDbProviderRpc); dsbe = new DataStoreBackEnd(dataBrokerService); - setLispDao(new HashMapDb()); + restoreDaoFromDatastore(); } @Override @@ -158,10 +157,9 @@ public class LispMappingService implements IFlowMapping, IFlowMappingShell, Bind mapServer = new MapServer(dao); } - void setLispDao(ILispDAO dao) { + public void setLispDao(ILispDAO dao) { LOG.trace("LispDAO set in LispMappingService"); basicInit(dao); - restoreDaoFromDatastore(); } void unsetLispDao(ILispDAO dao) { diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/AbstractLispComponent.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/AbstractLispComponent.java index ef4175d07..10eb84b6c 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/AbstractLispComponent.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/AbstractLispComponent.java @@ -9,10 +9,10 @@ package org.opendaylight.lispflowmapping.implementation.lisp; import java.util.HashSet; -import org.opendaylight.lispflowmapping.implementation.dao.HashMapDb; import org.opendaylight.lispflowmapping.implementation.dao.MappingServiceKeyUtil; import org.opendaylight.lispflowmapping.implementation.util.LispAFIConvertor; import org.opendaylight.lispflowmapping.implementation.util.MaskUtil; +import org.opendaylight.lispflowmapping.inmemorydb.HashMapDb; import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO; import org.opendaylight.lispflowmapping.interfaces.dao.IMappingServiceKey; import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry; diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java index b03d13f7d..ae8074401 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java +++ b/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java @@ -23,11 +23,11 @@ import java.util.Map.Entry; import org.apache.commons.lang3.BooleanUtils; import org.opendaylight.lispflowmapping.implementation.authentication.LispAuthenticationUtil; import org.opendaylight.lispflowmapping.implementation.config.ConfigIni; -import org.opendaylight.lispflowmapping.implementation.dao.HashMapDb; import org.opendaylight.lispflowmapping.implementation.dao.MappingServiceKeyUtil; import org.opendaylight.lispflowmapping.implementation.util.DAOMappingUtil; import org.opendaylight.lispflowmapping.implementation.util.LispAFIConvertor; import org.opendaylight.lispflowmapping.implementation.util.MapNotifyBuilderHelper; +import org.opendaylight.lispflowmapping.inmemorydb.HashMapDb; import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO; import org.opendaylight.lispflowmapping.interfaces.dao.IMappingServiceKey; import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry; diff --git a/mappingservice/implementation/src/main/yang/lfm-mappingservice-impl.yang b/mappingservice/implementation/src/main/yang/lfm-mappingservice-impl.yang index fca8565d5..007cdcbcc 100644 --- a/mappingservice/implementation/src/main/yang/lfm-mappingservice-impl.yang +++ b/mappingservice/implementation/src/main/yang/lfm-mappingservice-impl.yang @@ -7,7 +7,7 @@ module lfm-mappingservice-impl { import config { prefix config; revision-date 2013-04-05; } import rpc-context { prefix rpcx; revision-date 2013-06-17; } import opendaylight-md-sal-binding { prefix mdsal; revision-date 2013-10-28; } - + import lfm-ms-dao { prefix ms-dao; revision-date 2015-07-13; } description "This module contains the base YANG definitions for @@ -47,7 +47,6 @@ module lfm-mappingservice-impl { } } } - container broker { uses config:service-ref { refine type { @@ -56,7 +55,6 @@ module lfm-mappingservice-impl { } } } - container rpc-registry { uses config:service-ref { refine type { @@ -65,6 +63,14 @@ module lfm-mappingservice-impl { } } } + container dao { + uses config:service-ref { + refine type { + mandatory true; + config:required-identity ms-dao:ms-dao; + } + } + } } } } \ No newline at end of file diff --git a/mappingservice/inmemorydb/pom.xml b/mappingservice/inmemorydb/pom.xml new file mode 100644 index 000000000..591b527f1 --- /dev/null +++ b/mappingservice/inmemorydb/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + + org.opendaylight.lispflowmapping + mappingservice-parent + 1.3.0-SNAPSHOT + + + mappingservice.inmemorydb + bundle + Mapping Service Inmemory Mappings Database + + + + ${project.groupId} + mappingservice.api + ${project.version} + + + \ No newline at end of file diff --git a/mappingservice/inmemorydb/src/main/config/default-config.xml b/mappingservice/inmemorydb/src/main/config/default-config.xml new file mode 100644 index 000000000..7aabe00b0 --- /dev/null +++ b/mappingservice/inmemorydb/src/main/config/default-config.xml @@ -0,0 +1,29 @@ + + + + urn:opendaylight:params:xml:ns:yang:controller:config:lfm:ms:dao?module=lfm-ms-dao&revision=2015-07-13 + + + + + + + prefix:lfm-ms-inmemorydb + + lfm-ms-inmemorydb-default + 240 + + + + + prefix:ms-dao + + lfm-ms-inmemorydb + /modules/module[type='lfm-ms-inmemorydb'][name='lfm-ms-inmemorydb-default'] + + + + + + + \ No newline at end of file diff --git a/mappingservice/inmemorydb/src/main/java/org/opendaylight/controller/config/yang/config/lfm/ms/dao/inmemorydb/InMemoryDbModule.java b/mappingservice/inmemorydb/src/main/java/org/opendaylight/controller/config/yang/config/lfm/ms/dao/inmemorydb/InMemoryDbModule.java new file mode 100644 index 000000000..b3d9ab8ac --- /dev/null +++ b/mappingservice/inmemorydb/src/main/java/org/opendaylight/controller/config/yang/config/lfm/ms/dao/inmemorydb/InMemoryDbModule.java @@ -0,0 +1,25 @@ +package org.opendaylight.controller.config.yang.config.lfm.ms.dao.inmemorydb; + +import org.opendaylight.lispflowmapping.inmemorydb.HashMapDb; + +public class InMemoryDbModule extends org.opendaylight.controller.config.yang.config.lfm.ms.dao.inmemorydb.AbstractInMemoryDbModule { + public InMemoryDbModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public InMemoryDbModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.config.lfm.ms.dao.inmemorydb.InMemoryDbModule oldModule, java.lang.AutoCloseable oldInstance) { + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + public void customValidation() { + // add custom validation form module attributes here. + } + + @Override + public java.lang.AutoCloseable createInstance() { + final HashMapDb hashMapDb = new HashMapDb(); + hashMapDb.setRecordTimeOut(getRecordTimeout()); + return hashMapDb; + } +} diff --git a/mappingservice/inmemorydb/src/main/java/org/opendaylight/controller/config/yang/config/lfm/ms/dao/inmemorydb/InMemoryDbModuleFactory.java b/mappingservice/inmemorydb/src/main/java/org/opendaylight/controller/config/yang/config/lfm/ms/dao/inmemorydb/InMemoryDbModuleFactory.java new file mode 100644 index 000000000..0a82ca840 --- /dev/null +++ b/mappingservice/inmemorydb/src/main/java/org/opendaylight/controller/config/yang/config/lfm/ms/dao/inmemorydb/InMemoryDbModuleFactory.java @@ -0,0 +1,13 @@ +/* +* Generated file +* +* Generated from: yang module name: lfm-ms-inmemorydb yang module local name: lfm-ms-inmemorydb +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Mon Jul 13 12:44:05 CEST 2015 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.controller.config.yang.config.lfm.ms.dao.inmemorydb; +public class InMemoryDbModuleFactory extends org.opendaylight.controller.config.yang.config.lfm.ms.dao.inmemorydb.AbstractInMemoryDbModuleFactory { + +} diff --git a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/dao/HashMapDb.java b/mappingservice/inmemorydb/src/main/java/org/opendaylight/lispflowmapping/inmemorydb/HashMapDb.java similarity index 95% rename from mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/dao/HashMapDb.java rename to mappingservice/inmemorydb/src/main/java/org/opendaylight/lispflowmapping/inmemorydb/HashMapDb.java index b20cc6dde..32a8801ac 100644 --- a/mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/dao/HashMapDb.java +++ b/mappingservice/inmemorydb/src/main/java/org/opendaylight/lispflowmapping/inmemorydb/HashMapDb.java @@ -6,7 +6,7 @@ * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.lispflowmapping.implementation.dao; +package org.opendaylight.lispflowmapping.inmemorydb; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -20,7 +20,7 @@ import org.opendaylight.lispflowmapping.interfaces.dao.MappingServiceRLOCGroup; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class HashMapDb implements ILispDAO { +public class HashMapDb implements ILispDAO, AutoCloseable { protected static final Logger LOG = LoggerFactory.getLogger(HashMapDb.class); private ConcurrentMap> data = new ConcurrentHashMap>(); @@ -110,4 +110,8 @@ public class HashMapDb implements ILispDAO { this.timeUnit = timeUnit; } + public void close() throws Exception { + data.clear(); + } + } diff --git a/mappingservice/inmemorydb/src/main/yang/lfm-ms-inmemorydb.yang b/mappingservice/inmemorydb/src/main/yang/lfm-ms-inmemorydb.yang new file mode 100644 index 000000000..e33d050a5 --- /dev/null +++ b/mappingservice/inmemorydb/src/main/yang/lfm-ms-inmemorydb.yang @@ -0,0 +1,33 @@ +module lfm-ms-inmemorydb { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:controller:config:lfm:ms:dao:inmemorydb"; + prefix "inmemorydb"; + + import config { prefix config; revision-date 2013-04-05; } + import lfm-ms-dao { prefix ms-dao; revision-date 2015-07-13; } + + description + "Service definition for Mapping Service DAO."; + + revision "2015-07-13" { + description + "Initial revision"; + } + + identity lfm-ms-inmemorydb { + base config:module-type; + config:provided-service ms-dao:ms-dao; + config:java-name-prefix InMemoryDb; + } + + augment "/config:modules/config:module/config:configuration" { + case lfm-ms-inmemorydb { + when "/config:modules/config:module/config:type = 'lfm-ms-inmemorydb'"; + leaf record-timeout { + type uint16; + description + "Mapping record timeout"; + } + } + } +} \ No newline at end of file diff --git a/mappingservice/neutron/pom.xml b/mappingservice/neutron/pom.xml index d83af7aaa..08dabed63 100644 --- a/mappingservice/neutron/pom.xml +++ b/mappingservice/neutron/pom.xml @@ -35,6 +35,11 @@ org.opendaylight.yangtools.model ietf-inet-types + + + org.apache.felix + org.apache.felix.dependencymanager + diff --git a/mappingservice/pom.xml b/mappingservice/pom.xml index c6d43b8fc..1ea7781af 100644 --- a/mappingservice/pom.xml +++ b/mappingservice/pom.xml @@ -20,6 +20,7 @@ api config clusterdao + inmemorydb implementation southbound neutron