From: Moiz Raja Date: Tue, 19 Aug 2014 16:53:44 +0000 (+0000) Subject: Merge "Moving common code out of remote rpc to clustering common bundle" X-Git-Tag: release/helium~266 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=341ef75cc16912e5b51a260ce1a0a57076d4da58;hp=d6a1d8b811deb7e593fb89e80a48433a315ba698 Merge "Moving common code out of remote rpc to clustering common bundle" --- diff --git a/.gitignore b/.gitignore index 9144cda4cc..b304ffce87 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,6 @@ maven-eclipse.xml .DS_STORE .metadata opendaylight/md-sal/sal-distributed-datastore/journal +!opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin + diff --git a/features/config-netty/pom.xml b/features/config-netty/pom.xml index 2f4b4b1e21..5fbc463df3 100644 --- a/features/config-netty/pom.xml +++ b/features/config-netty/pom.xml @@ -9,7 +9,7 @@ features-config-netty - pom + jar features.xml @@ -21,7 +21,6 @@ features-config-persister features xml - runtime org.opendaylight.controller @@ -47,6 +46,11 @@ org.opendaylight.controller config-netty-config + + + org.opendaylight.yangtools + features-test + @@ -92,6 +96,20 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + org.opendaylight.controller + opendaylight-karaf-empty + ${commons.opendaylight.version} + + + org.opendaylight.yangtools:features-test + + + diff --git a/features/config-persister/pom.xml b/features/config-persister/pom.xml index 6dc8941345..3346c754d6 100644 --- a/features/config-persister/pom.xml +++ b/features/config-persister/pom.xml @@ -9,7 +9,7 @@ features-config-persister - pom + jar features.xml @@ -22,21 +22,18 @@ ${yangtools.version} features xml - runtime org.opendaylight.controller features-netconf features xml - runtime org.opendaylight.controller features-config features xml - runtime org.opendaylight.controller @@ -82,6 +79,11 @@ org.eclipse.persistence org.eclipse.persistence.moxy + + + org.opendaylight.yangtools + features-test + @@ -127,6 +129,20 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + org.opendaylight.controller + opendaylight-karaf-empty + ${commons.opendaylight.version} + + + org.opendaylight.yangtools:features-test + + + diff --git a/features/config/pom.xml b/features/config/pom.xml index c69e11bed2..8c061c2736 100644 --- a/features/config/pom.xml +++ b/features/config/pom.xml @@ -9,7 +9,7 @@ features-config - pom + jar features.xml @@ -22,7 +22,6 @@ ${yangtools.version} features xml - runtime org.opendaylight.controller @@ -92,6 +91,11 @@ org.opendaylight.controller config-manager + + + org.opendaylight.yangtools + features-test + @@ -137,6 +141,20 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + org.opendaylight.controller + opendaylight-karaf-empty + ${commons.opendaylight.version} + + + org.opendaylight.yangtools:features-test + + + diff --git a/features/config/src/main/resources/features.xml b/features/config/src/main/resources/features.xml index 6c0d32427d..5027588acb 100644 --- a/features/config/src/main/resources/features.xml +++ b/features/config/src/main/resources/features.xml @@ -6,7 +6,7 @@ mvn:org.opendaylight.yangtools/features-yangtools/${yangtools.version}/xml/features - odl-mdsal-common + odl-mdsal-common odl-config-api odl-config-netty-config-api odl-config-core diff --git a/features/flow/pom.xml b/features/flow/pom.xml index 09bb6c91e6..ac189737d9 100644 --- a/features/flow/pom.xml +++ b/features/flow/pom.xml @@ -9,7 +9,7 @@ features-flow - pom + jar features.xml @@ -22,7 +22,6 @@ ${mdsal.version} features xml - runtime org.opendaylight.controller.model @@ -64,6 +63,11 @@ org.opendaylight.controller.md forwardingrules-manager + + + org.opendaylight.yangtools + features-test + @@ -109,6 +113,20 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + org.opendaylight.controller + opendaylight-karaf-empty + ${commons.opendaylight.version} + + + org.opendaylight.yangtools:features-test + + + diff --git a/features/mdsal/pom.xml b/features/mdsal/pom.xml index 4f1ba98e5c..e7b825c48b 100644 --- a/features/mdsal/pom.xml +++ b/features/mdsal/pom.xml @@ -9,7 +9,7 @@ features-mdsal - pom + jar features.xml @@ -21,28 +21,24 @@ features-yangtools features xml - runtime org.opendaylight.controller features-config features xml - runtime org.opendaylight.controller features-config-persister features xml - runtime org.opendaylight.controller features-config-netty features xml - runtime org.opendaylight.controller @@ -172,6 +168,12 @@ org.opendaylight.controller.samples toaster-config + + + org.opendaylight.yangtools + features-test + 0.6.2-SNAPSHOT + @@ -217,6 +219,20 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + org.opendaylight.controller + opendaylight-karaf-empty + ${commons.opendaylight.version} + + + org.opendaylight.yangtools:features-test + + + diff --git a/features/protocol-framework/pom.xml b/features/protocol-framework/pom.xml index 97836be455..dcd24d6216 100644 --- a/features/protocol-framework/pom.xml +++ b/features/protocol-framework/pom.xml @@ -9,7 +9,7 @@ features-protocol-framework ${protocol-framework.version} - pom + jar features.xml @@ -21,12 +21,16 @@ features-config features xml - runtime org.opendaylight.controller protocol-framework + + + org.opendaylight.yangtools + features-test + @@ -72,6 +76,20 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + org.opendaylight.controller + opendaylight-karaf-empty + ${commons.opendaylight.version} + + + org.opendaylight.yangtools:features-test + + + diff --git a/opendaylight/commons/opendaylight/pom.xml b/opendaylight/commons/opendaylight/pom.xml index c74e7ae410..1064afd82d 100644 --- a/opendaylight/commons/opendaylight/pom.xml +++ b/opendaylight/commons/opendaylight/pom.xml @@ -1570,6 +1570,12 @@ toaster-config ${mdsal.version} + + org.opendaylight.yangtools + features-test + ${yangtools.version} + test + org.opendaylight.yangtools features-yangtools diff --git a/opendaylight/distribution/opendaylight-karaf-empty/pom.xml b/opendaylight/distribution/opendaylight-karaf-empty/pom.xml new file mode 100644 index 0000000000..d3dfe19c2b --- /dev/null +++ b/opendaylight/distribution/opendaylight-karaf-empty/pom.xml @@ -0,0 +1,235 @@ + + + 4.0.0 + + org.opendaylight.controller + commons.opendaylight + 1.4.2-SNAPSHOT + ../../commons/opendaylight + + opendaylight-karaf-empty + pom + + 3.0 + + + + + + org.apache.karaf.features + framework + ${karaf.version} + kar + + + + org.apache.karaf.features + standard + ${karaf.version} + features + xml + runtime + + + + + org.opendaylight.controller + karaf.branding + compile + + + + + org.opendaylight.controller + opendaylight-karaf-resources + ${project.version} + + + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.apache.felix + maven-bundle-plugin + [0,) + + cleanVersions + + + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + [0,) + + copy + unpack + + + + + + + + + org.apache.karaf.tooling + karaf-maven-plugin + [0,) + + commands-generate-help + + + + + + + + + org.fusesource.scalate + maven-scalate-plugin + [0,) + + sitegen + + + + + + + + + org.apache.servicemix.tooling + depends-maven-plugin + [0,) + + generate-depends-file + + + + + + + + + + + + + + + org.apache.karaf.tooling + karaf-maven-plugin + ${karaf.version} + true + + + process-resources + + install-kars + + process-resources + + + package + + instance-create-archive + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle.version} + + **\/target\/,**\/bin\/,**\/target-ide\/,**\/configuration\/initial\/ + + + + org.apache.maven.plugins + maven-dependency-plugin + 2.6 + + + copy + + copy + + + generate-resources + + + + org.opendaylight.controller + karaf.branding + ${karaf.branding.version} + target/assembly/lib + karaf.branding-${branding.version}.jar + + + + + + unpack-karaf-resources + + unpack-dependencies + + prepare-package + + ${project.build.directory}/assembly + org.opendaylight.controller + opendaylight-karaf-resources + META-INF\/** + true + false + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + prepare-package + + run + + + + + + + + + + + + + + + + + + scm:git:ssh://git.opendaylight.org:29418/controller.git + scm:git:ssh://git.opendaylight.org:29418/controller.git + HEAD + https://wiki.opendaylight.org/view/OpenDaylight_Controller:Main + + diff --git a/opendaylight/distribution/opendaylight-karaf-resources/pom.xml b/opendaylight/distribution/opendaylight-karaf-resources/pom.xml new file mode 100644 index 0000000000..00495a3201 --- /dev/null +++ b/opendaylight/distribution/opendaylight-karaf-resources/pom.xml @@ -0,0 +1,21 @@ + + + + + 4.0.0 + + org.opendaylight.controller + commons.opendaylight + 1.4.2-SNAPSHOT + ../../commons/opendaylight + + opendaylight-karaf-resources + Resources for opendaylight-karaf + jar + diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/karaf/instance b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin/instance similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/karaf/instance rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin/instance diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/karaf/instance.bat b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin/instance.bat similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/karaf/instance.bat rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin/instance.bat diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/karaf/karaf b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin/karaf similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/karaf/karaf rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin/karaf diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/karaf/karaf.bat b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin/karaf.bat similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/karaf/karaf.bat rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/bin/karaf.bat diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/context.xml b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/configuration/context.xml similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/context.xml rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/configuration/context.xml diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/logback.xml b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/configuration/logback.xml similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/logback.xml rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/configuration/logback.xml diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-logging.properties b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/configuration/tomcat-logging.properties similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-logging.properties rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/configuration/tomcat-logging.properties diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-server.xml b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/configuration/tomcat-server.xml similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/configuration/tomcat-server.xml rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/configuration/tomcat-server.xml diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/custom.properties b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/etc/custom.properties similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/custom.properties rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/etc/custom.properties diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/version.properties b/opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/version.properties similarity index 100% rename from opendaylight/distribution/opendaylight-karaf/src/main/resources/version.properties rename to opendaylight/distribution/opendaylight-karaf-resources/src/main/resources/version.properties diff --git a/opendaylight/distribution/opendaylight-karaf/pom.xml b/opendaylight/distribution/opendaylight-karaf/pom.xml index b3c3f20ba8..5cbe412b2b 100644 --- a/opendaylight/distribution/opendaylight-karaf/pom.xml +++ b/opendaylight/distribution/opendaylight-karaf/pom.xml @@ -22,76 +22,48 @@ ${karaf.version} kar - - org.opendaylight.controller - base-features - ${project.version} - kar - org.opendaylight.controller karaf.branding compile - - - org.apache.karaf.features - standard - ${karaf.version} - features - xml - runtime - - - org.opendaylight.controller - base-features - ${project.parent.version} - features - xml - runtime - - + + org.opendaylight.controller - extras-features + opendaylight-karaf-resources ${project.version} - kar - runtime - - - - org.opendaylight.controller - features-adsal - features - xml - runtime + + - org.opendaylight.controller - features-nsf - ${project.version} + org.apache.karaf.features + standard + ${karaf.version} features xml - runtime + + org.opendaylight.controller features-mdsal features xml - runtime org.opendaylight.controller features-flow features xml - runtime @@ -238,27 +210,45 @@ + + unpack-karaf-resources + + unpack-dependencies + + prepare-package + + ${project.build.directory}/assembly + org.opendaylight.controller + opendaylight-karaf-resources + META-INF\/** + true + false + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + prepare-package + + run + + + + + + + + + + + + - - org.apache.maven.plugins - maven-antrun-plugin - - - prepare-package - - run - - - - - - - - - - - diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/jre.properties b/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/jre.properties deleted file mode 100644 index a98956e98d..0000000000 --- a/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/jre.properties +++ /dev/null @@ -1,506 +0,0 @@ -################################################################################ -# -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. -# -################################################################################ - -# -# Java platform package export properties. -# - -# Standard package set. Note that: -# - javax.transaction* is exported with a mandatory attribute -jre-1.6= \ - javax.accessibility, \ - javax.activation;version="1.1", \ - javax.activity, \ - javax.crypto, \ - javax.crypto.interfaces, \ - javax.crypto.spec, \ - javax.imageio, \ - javax.imageio.event, \ - javax.imageio.metadata, \ - javax.imageio.plugins.bmp, \ - javax.imageio.plugins.jpeg, \ - javax.imageio.spi, \ - javax.imageio.stream, \ - javax.jws, \ - javax.jws.soap, \ - javax.lang.model, \ - javax.lang.model.element, \ - javax.lang.model.type, \ - javax.lang.model.util, \ - javax.management, \ - javax.management.loading, \ - javax.management.modelmbean, \ - javax.management.monitor, \ - javax.management.openmbean, \ - javax.management.relation, \ - javax.management.remote, \ - javax.management.remote.rmi, \ - javax.management.timer, \ - javax.naming, \ - javax.naming.directory, \ - javax.naming.event, \ - javax.naming.ldap, \ - javax.naming.spi, \ - javax.net, \ - javax.net.ssl, \ - javax.print, \ - javax.print.attribute, \ - javax.print.attribute.standard, \ - javax.print.event, \ - javax.rmi, \ - javax.rmi.CORBA, \ - javax.rmi.ssl, \ - javax.script, \ - javax.security.auth, \ - javax.security.auth.callback, \ - javax.security.auth.kerberos, \ - javax.security.auth.login, \ - javax.security.auth.spi, \ - javax.security.auth.x500, \ - javax.security.cert, \ - javax.security.sasl, \ - javax.sound.midi, \ - javax.sound.midi.spi, \ - javax.sound.sampled, \ - javax.sound.sampled.spi, \ - javax.sql, \ - javax.sql.rowset, \ - javax.sql.rowset.serial, \ - javax.sql.rowset.spi, \ - javax.swing, \ - javax.swing.border, \ - javax.swing.colorchooser, \ - javax.swing.event, \ - javax.swing.filechooser, \ - javax.swing.plaf, \ - javax.swing.plaf.basic, \ - javax.swing.plaf.metal, \ - javax.swing.plaf.multi, \ - javax.swing.plaf.synth, \ - javax.swing.table, \ - javax.swing.text, \ - javax.swing.text.html, \ - javax.swing.text.html.parser, \ - javax.swing.text.rtf, \ - javax.swing.tree, \ - javax.swing.undo, \ - javax.tools, \ - javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \ - javax.xml, \ - javax.xml.bind;version="2.2.1", \ - javax.xml.bind.annotation;version="2.2.1", \ - javax.xml.bind.annotation.adapters;version="2.2.1", \ - javax.xml.bind.attachment;version="2.2.1", \ - javax.xml.bind.helpers;version="2.2.1", \ - javax.xml.bind.util;version="2.2.1", \ - javax.xml.crypto, \ - javax.xml.crypto.dom, \ - javax.xml.crypto.dsig, \ - javax.xml.crypto.dsig.dom, \ - javax.xml.crypto.dsig.keyinfo, \ - javax.xml.crypto.dsig.spec, \ - javax.xml.datatype, \ - javax.xml.namespace, \ - javax.xml.parsers, \ - javax.xml.soap;version="1.3", \ - javax.xml.stream;version="1.2", \ - javax.xml.stream.events;version="1.2", \ - javax.xml.stream.util;version="1.2", \ - javax.xml.transform, \ - javax.xml.transform.dom, \ - javax.xml.transform.sax, \ - javax.xml.transform.stax, \ - javax.xml.transform.stream, \ - javax.xml.validation, \ - javax.xml.ws;version="2.2", \ - javax.xml.ws.handler;version="2.2", \ - javax.xml.ws.handler.soap;version="2.2", \ - javax.xml.ws.http;version="2.2", \ - javax.xml.ws.soap;version="2.2", \ - javax.xml.ws.spi;version="2.2", \ - javax.xml.ws.wsaddressing;version="2.2", \ - javax.xml.ws.spi.http;version="2.2", \ - javax.xml.xpath, \ - org.ietf.jgss, \ - org.omg.CORBA, \ - org.omg.CORBA_2_3, \ - org.omg.CORBA_2_3.portable, \ - org.omg.CORBA.DynAnyPackage, \ - org.omg.CORBA.ORBPackage, \ - org.omg.CORBA.portable, \ - org.omg.CORBA.TypeCodePackage, \ - org.omg.CosNaming, \ - org.omg.CosNaming.NamingContextExtPackage, \ - org.omg.CosNaming.NamingContextPackage, \ - org.omg.Dynamic, \ - org.omg.DynamicAny, \ - org.omg.DynamicAny.DynAnyFactoryPackage, \ - org.omg.DynamicAny.DynAnyPackage, \ - org.omg.IOP, \ - org.omg.IOP.CodecFactoryPackage, \ - org.omg.IOP.CodecPackage, \ - org.omg.Messaging, \ - org.omg.PortableInterceptor, \ - org.omg.PortableInterceptor.ORBInitInfoPackage, \ - org.omg.PortableServer, \ - org.omg.PortableServer.CurrentPackage, \ - org.omg.PortableServer.POAManagerPackage, \ - org.omg.PortableServer.POAPackage, \ - org.omg.PortableServer.portable, \ - org.omg.PortableServer.ServantLocatorPackage, \ - org.omg.SendingContext, \ - org.omg.stub.java.rmi, \ - org.omg.stub.javax.management.remote.rmi, \ - org.w3c.dom, \ - org.w3c.dom.bootstrap, \ - org.w3c.dom.css, \ - org.w3c.dom.events, \ - org.w3c.dom.html, \ - org.w3c.dom.ls, \ - org.w3c.dom.ranges, \ - org.w3c.dom.stylesheets, \ - org.w3c.dom.traversal, \ - org.w3c.dom.views, \ - org.w3c.dom.xpath, \ - org.xml.sax, \ - org.xml.sax.ext, \ - org.xml.sax.helpers, \ - javax.annotation.processing - -# Standard package set. Note that: -# - javax.transaction* is exported with a mandatory attribute -jre-1.7= \ - javax.accessibility, \ - javax.activation;version="1.1", \ - javax.activity, \ - javax.crypto, \ - javax.crypto.interfaces, \ - javax.crypto.spec, \ - javax.imageio, \ - javax.imageio.event, \ - javax.imageio.metadata, \ - javax.imageio.plugins.bmp, \ - javax.imageio.plugins.jpeg, \ - javax.imageio.spi, \ - javax.imageio.stream, \ - javax.jws, \ - javax.jws.soap, \ - javax.lang.model, \ - javax.lang.model.element, \ - javax.lang.model.type, \ - javax.lang.model.util, \ - javax.management, \ - javax.management.loading, \ - javax.management.modelmbean, \ - javax.management.monitor, \ - javax.management.openmbean, \ - javax.management.relation, \ - javax.management.remote, \ - javax.management.remote.rmi, \ - javax.management.timer, \ - javax.naming, \ - javax.naming.directory, \ - javax.naming.event, \ - javax.naming.ldap, \ - javax.naming.spi, \ - javax.net, \ - javax.net.ssl, \ - javax.print, \ - javax.print.attribute, \ - javax.print.attribute.standard, \ - javax.print.event, \ - javax.rmi, \ - javax.rmi.CORBA, \ - javax.rmi.ssl, \ - javax.script, \ - javax.security.auth, \ - javax.security.auth.callback, \ - javax.security.auth.kerberos, \ - javax.security.auth.login, \ - javax.security.auth.spi, \ - javax.security.auth.x500, \ - javax.security.cert, \ - javax.security.sasl, \ - javax.sound.midi, \ - javax.sound.midi.spi, \ - javax.sound.sampled, \ - javax.sound.sampled.spi, \ - javax.sql, \ - javax.sql.rowset, \ - javax.sql.rowset.serial, \ - javax.sql.rowset.spi, \ - javax.swing, \ - javax.swing.border, \ - javax.swing.colorchooser, \ - javax.swing.event, \ - javax.swing.filechooser, \ - javax.swing.plaf, \ - javax.swing.plaf.basic, \ - javax.swing.plaf.metal, \ - javax.swing.plaf.multi, \ - javax.swing.plaf.synth, \ - javax.swing.table, \ - javax.swing.text, \ - javax.swing.text.html, \ - javax.swing.text.html.parser, \ - javax.swing.text.rtf, \ - javax.swing.tree, \ - javax.swing.undo, \ - javax.tools, \ - javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \ - javax.xml, \ - javax.xml.bind;version="2.2.1", \ - javax.xml.bind.annotation;version="2.2.1", \ - javax.xml.bind.annotation.adapters;version="2.2.1", \ - javax.xml.bind.attachment;version="2.2.1", \ - javax.xml.bind.helpers;version="2.2.1", \ - javax.xml.bind.util;version="2.2.1", \ - javax.xml.crypto, \ - javax.xml.crypto.dom, \ - javax.xml.crypto.dsig, \ - javax.xml.crypto.dsig.dom, \ - javax.xml.crypto.dsig.keyinfo, \ - javax.xml.crypto.dsig.spec, \ - javax.xml.datatype, \ - javax.xml.namespace, \ - javax.xml.parsers, \ - javax.xml.soap;version="1.3", \ - javax.xml.stream;version="1.2", \ - javax.xml.stream.events;version="1.2", \ - javax.xml.stream.util;version="1.2", \ - javax.xml.transform, \ - javax.xml.transform.dom, \ - javax.xml.transform.sax, \ - javax.xml.transform.stax, \ - javax.xml.transform.stream, \ - javax.xml.validation, \ - javax.xml.ws;version="2.2", \ - javax.xml.ws.handler;version="2.2", \ - javax.xml.ws.handler.soap;version="2.2", \ - javax.xml.ws.http;version="2.2", \ - javax.xml.ws.soap;version="2.2", \ - javax.xml.ws.spi;version="2.2", \ - javax.xml.ws.wsaddressing;version="2.2", \ - javax.xml.ws.spi.http;version="2.2", \ - javax.xml.xpath, \ - org.ietf.jgss, \ - org.omg.CORBA, \ - org.omg.CORBA_2_3, \ - org.omg.CORBA_2_3.portable, \ - org.omg.CORBA.DynAnyPackage, \ - org.omg.CORBA.ORBPackage, \ - org.omg.CORBA.portable, \ - org.omg.CORBA.TypeCodePackage, \ - org.omg.CosNaming, \ - org.omg.CosNaming.NamingContextExtPackage, \ - org.omg.CosNaming.NamingContextPackage, \ - org.omg.Dynamic, \ - org.omg.DynamicAny, \ - org.omg.DynamicAny.DynAnyFactoryPackage, \ - org.omg.DynamicAny.DynAnyPackage, \ - org.omg.IOP, \ - org.omg.IOP.CodecFactoryPackage, \ - org.omg.IOP.CodecPackage, \ - org.omg.Messaging, \ - org.omg.PortableInterceptor, \ - org.omg.PortableInterceptor.ORBInitInfoPackage, \ - org.omg.PortableServer, \ - org.omg.PortableServer.CurrentPackage, \ - org.omg.PortableServer.POAManagerPackage, \ - org.omg.PortableServer.POAPackage, \ - org.omg.PortableServer.portable, \ - org.omg.PortableServer.ServantLocatorPackage, \ - org.omg.SendingContext, \ - org.omg.stub.java.rmi, \ - org.omg.stub.javax.management.remote.rmi, \ - org.w3c.dom, \ - org.w3c.dom.bootstrap, \ - org.w3c.dom.css, \ - org.w3c.dom.events, \ - org.w3c.dom.html, \ - org.w3c.dom.ls, \ - org.w3c.dom.ranges, \ - org.w3c.dom.stylesheets, \ - org.w3c.dom.traversal, \ - org.w3c.dom.views, \ - org.w3c.dom.xpath, \ - org.xml.sax, \ - org.xml.sax.ext, \ - org.xml.sax.helpers, \ - javax.annotation.processing - -jre-1.8= \ - javax.accessibility, \ - javax.activation;version="1.1", \ - javax.activity, \ - javax.crypto, \ - javax.crypto.interfaces, \ - javax.crypto.spec, \ - javax.imageio, \ - javax.imageio.event, \ - javax.imageio.metadata, \ - javax.imageio.plugins.bmp, \ - javax.imageio.plugins.jpeg, \ - javax.imageio.spi, \ - javax.imageio.stream, \ - javax.jws, \ - javax.jws.soap, \ - javax.lang.model, \ - javax.lang.model.element, \ - javax.lang.model.type, \ - javax.lang.model.util, \ - javax.management, \ - javax.management.loading, \ - javax.management.modelmbean, \ - javax.management.monitor, \ - javax.management.openmbean, \ - javax.management.relation, \ - javax.management.remote, \ - javax.management.remote.rmi, \ - javax.management.timer, \ - javax.naming, \ - javax.naming.directory, \ - javax.naming.event, \ - javax.naming.ldap, \ - javax.naming.spi, \ - javax.net, \ - javax.net.ssl, \ - javax.print, \ - javax.print.attribute, \ - javax.print.attribute.standard, \ - javax.print.event, \ - javax.rmi, \ - javax.rmi.CORBA, \ - javax.rmi.ssl, \ - javax.script, \ - javax.security.auth, \ - javax.security.auth.callback, \ - javax.security.auth.kerberos, \ - javax.security.auth.login, \ - javax.security.auth.spi, \ - javax.security.auth.x500, \ - javax.security.cert, \ - javax.security.sasl, \ - javax.sound.midi, \ - javax.sound.midi.spi, \ - javax.sound.sampled, \ - javax.sound.sampled.spi, \ - javax.sql, \ - javax.sql.rowset, \ - javax.sql.rowset.serial, \ - javax.sql.rowset.spi, \ - javax.swing, \ - javax.swing.border, \ - javax.swing.colorchooser, \ - javax.swing.event, \ - javax.swing.filechooser, \ - javax.swing.plaf, \ - javax.swing.plaf.basic, \ - javax.swing.plaf.metal, \ - javax.swing.plaf.multi, \ - javax.swing.plaf.synth, \ - javax.swing.table, \ - javax.swing.text, \ - javax.swing.text.html, \ - javax.swing.text.html.parser, \ - javax.swing.text.rtf, \ - javax.swing.tree, \ - javax.swing.undo, \ - javax.tools, \ - javax.transaction; javax.transaction.xa; partial=true; mandatory:=partial, \ - javax.xml, \ - javax.xml.bind;version="2.2.1", \ - javax.xml.bind.annotation;version="2.2.1", \ - javax.xml.bind.annotation.adapters;version="2.2.1", \ - javax.xml.bind.attachment;version="2.2.1", \ - javax.xml.bind.helpers;version="2.2.1", \ - javax.xml.bind.util;version="2.2.1", \ - javax.xml.crypto, \ - javax.xml.crypto.dom, \ - javax.xml.crypto.dsig, \ - javax.xml.crypto.dsig.dom, \ - javax.xml.crypto.dsig.keyinfo, \ - javax.xml.crypto.dsig.spec, \ - javax.xml.datatype, \ - javax.xml.namespace, \ - javax.xml.parsers, \ - javax.xml.soap;version="1.3", \ - javax.xml.stream;version="1.2", \ - javax.xml.stream.events;version="1.2", \ - javax.xml.stream.util;version="1.2", \ - javax.xml.transform, \ - javax.xml.transform.dom, \ - javax.xml.transform.sax, \ - javax.xml.transform.stax, \ - javax.xml.transform.stream, \ - javax.xml.validation, \ - javax.xml.ws;version="2.2", \ - javax.xml.ws.handler;version="2.2", \ - javax.xml.ws.handler.soap;version="2.2", \ - javax.xml.ws.http;version="2.2", \ - javax.xml.ws.soap;version="2.2", \ - javax.xml.ws.spi;version="2.2", \ - javax.xml.ws.wsaddressing;version="2.2", \ - javax.xml.ws.spi.http;version="2.2", \ - javax.xml.xpath, \ - org.ietf.jgss, \ - org.omg.CORBA, \ - org.omg.CORBA_2_3, \ - org.omg.CORBA_2_3.portable, \ - org.omg.CORBA.DynAnyPackage, \ - org.omg.CORBA.ORBPackage, \ - org.omg.CORBA.portable, \ - org.omg.CORBA.TypeCodePackage, \ - org.omg.CosNaming, \ - org.omg.CosNaming.NamingContextExtPackage, \ - org.omg.CosNaming.NamingContextPackage, \ - org.omg.Dynamic, \ - org.omg.DynamicAny, \ - org.omg.DynamicAny.DynAnyFactoryPackage, \ - org.omg.DynamicAny.DynAnyPackage, \ - org.omg.IOP, \ - org.omg.IOP.CodecFactoryPackage, \ - org.omg.IOP.CodecPackage, \ - org.omg.Messaging, \ - org.omg.PortableInterceptor, \ - org.omg.PortableInterceptor.ORBInitInfoPackage, \ - org.omg.PortableServer, \ - org.omg.PortableServer.CurrentPackage, \ - org.omg.PortableServer.POAManagerPackage, \ - org.omg.PortableServer.POAPackage, \ - org.omg.PortableServer.portable, \ - org.omg.PortableServer.ServantLocatorPackage, \ - org.omg.SendingContext, \ - org.omg.stub.java.rmi, \ - org.omg.stub.javax.management.remote.rmi, \ - org.w3c.dom, \ - org.w3c.dom.bootstrap, \ - org.w3c.dom.css, \ - org.w3c.dom.events, \ - org.w3c.dom.html, \ - org.w3c.dom.ls, \ - org.w3c.dom.ranges, \ - org.w3c.dom.stylesheets, \ - org.w3c.dom.traversal, \ - org.w3c.dom.views, \ - org.w3c.dom.xpath, \ - org.xml.sax, \ - org.xml.sax.ext, \ - org.xml.sax.helpers, \ - javax.annotation.processing diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/startup.properties b/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/startup.properties deleted file mode 100644 index ca8c83c380..0000000000 --- a/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/startup.properties +++ /dev/null @@ -1,53 +0,0 @@ -#Bundles to be started on startup, with startlevel - -# feature: framework version: 3.0.1 -mvn\:org.ops4j.base/ops4j-base-lang/1.4.0 = 5 -mvn\:biz.aQute.bnd/bndlib/2.2.0 = 5 -mvn\:org.ops4j.pax.swissbox/pax-swissbox-bnd/1.7.0 = 5 -mvn\:org.ops4j.pax.url/pax-url-maven-commons/1.6.0 = 5 -mvn\:org.ops4j.pax.url/pax-url-aether/1.6.0 = 5 -mvn\:org.ops4j.pax.url/pax-url-wrap/1.6.0 = 5 -mvn\:javax.annotation/javax.annotation-api/1.2 = 5 -mvn\:org.ops4j.pax.logging/pax-logging-api/1.7.2 = 8 -mvn\:org.ops4j.pax.logging/pax-logging-service/1.7.2 = 8 -mvn\:org.apache.karaf.service/org.apache.karaf.service.guard/3.0.1 = 10 -mvn\:org.apache.felix/org.apache.felix.configadmin/1.6.0 = 10 -mvn\:org.apache.felix/org.apache.felix.fileinstall/3.2.8 = 11 -mvn\:org.ow2.asm/asm-all/4.1 = 12 -mvn\:org.apache.aries/org.apache.aries.util/1.1.0 = 20 -mvn\:org.apache.aries.proxy/org.apache.aries.proxy.api/1.0.0 = 20 -mvn\:org.apache.aries.proxy/org.apache.aries.proxy.impl/1.0.2 = 20 -mvn\:org.apache.aries.blueprint/org.apache.aries.blueprint.api/1.0.0 = 20 -mvn\:org.apache.aries.blueprint/org.apache.aries.blueprint.cm/1.0.3 = 20 -mvn\:org.apache.aries.blueprint/org.apache.aries.blueprint.core.compatibility/1.0.0 = 20 -mvn\:org.apache.aries.blueprint/org.apache.aries.blueprint.core/1.4.0 = 20 -mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.spring/3.0.1 = 24 -mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.blueprint/3.0.1 = 24 -mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.wrap/3.0.1 = 24 -mvn\:org.apache.karaf.region/org.apache.karaf.region.core/3.0.1 = 25 -mvn\:org.apache.karaf.features/org.apache.karaf.features.core/3.0.1 = 25 -mvn\:org.apache.karaf.deployer/org.apache.karaf.deployer.features/3.0.1 = 26 -mvn\:jline/jline/2.11 = 30 -mvn\:org.jledit/core/0.2.1 = 30 -mvn\:org.fusesource.jansi/jansi/1.11 = 30 -mvn\:org.ops4j.base/ops4j-base-util-property/1.4.0 = 30 -mvn\:org.ops4j.base/ops4j-base-util-xml/1.4.0 = 30 -mvn\:org.ops4j.base/ops4j-base-util-collections/1.4.0 = 30 -mvn\:org.ops4j.pax.url/pax-url-commons/1.6.0 = 30 -mvn\:org.ops4j.pax.swissbox/pax-swissbox-property/1.7.0 = 30 -mvn\:org.ops4j.base/ops4j-base-net/1.4.0 = 30 -mvn\:org.ops4j.base/ops4j-base-monitors/1.4.0 = 30 -mvn\:org.apache.karaf.features/org.apache.karaf.features.command/3.0.1 = 30 -mvn\:org.apache.karaf.shell/org.apache.karaf.shell.console/3.0.1 = 30 -mvn\:org.apache.karaf.jaas/org.apache.karaf.jaas.modules/3.0.1 = 30 -mvn\:org.apache.karaf.jaas/org.apache.karaf.jaas.config/3.0.1 = 30 -mvn\:org.apache.karaf.jaas/org.apache.karaf.jaas.boot/3.0.1 = 30 -mvn\:org.apache.sshd/sshd-core/0.9.0 = 30 -mvn\:org.apache.karaf.bundle/org.apache.karaf.bundle.command/3.0.1 = 30 -mvn\:org.apache.karaf.shell/org.apache.karaf.shell.table/3.0.1 = 30 -mvn\:org.apache.karaf.bundle/org.apache.karaf.bundle.core/3.0.1 = 30 -mvn\:org.apache.karaf.shell/org.apache.karaf.shell.help/3.0.1 = 30 -mvn\:org.apache.karaf.system/org.apache.karaf.system.core/3.0.1 = 30 -mvn\:org.apache.karaf.system/org.apache.karaf.system.command/3.0.1 = 30 -mvn\:org.apache.karaf.shell/org.apache.karaf.shell.commands/3.0.1 = 30 -mvn\:org.apache.aries.quiesce/org.apache.aries.quiesce.api/1.0.0 = 30 diff --git a/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/system.properties b/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/system.properties deleted file mode 100644 index a312d66ad5..0000000000 --- a/opendaylight/distribution/opendaylight-karaf/src/main/resources/etc/system.properties +++ /dev/null @@ -1,109 +0,0 @@ -# -# The properties defined in this file will be made available through system -# properties at the very beginning of the Karaf's boot process. -# - -# Use Equinox as default OSGi Framework Implementation -karaf.framework=equinox - -# https://bugs.eclipse.org/bugs/show_bug.cgi?id=325578 -# Extend the framework to avoid the resources to be presented with -# a URL of type bundleresource: but to be presented as file: -osgi.hook.configurators.include=org.eclipse.virgo.kernel.equinox.extensions.hooks.ExtensionsHookConfigurator - - -# Log level when the pax-logging service is not available -# This level will only be used while the pax-logging service bundle -# is not fully available. -# To change log levels, please refer to the org.ops4j.pax.logging.cfg file -# instead. -org.ops4j.pax.logging.DefaultServiceLog.level = ERROR - -# -# Name of this Karaf instance. -# -karaf.name = root - -# -# Default repository where bundles will be loaded from before using -# other Maven repositories. For the full Maven configuration, see -# the org.ops4j.pax.url.mvn.cfg file. -# -karaf.default.repository = system - -# -# Location of a shell script that will be run when starting a shell -# session. This script can be used to create aliases and define -# additional commands. -# -karaf.shell.init.script = ${karaf.etc}/shell.init.script - -# -# Sets the maximum size of the shell command history. If not set, -# defaults to 500 entries. Setting to 0 will disable history. -# -# karaf.shell.history.maxSize = 0 - -# -# Deletes the entire karaf.data directory at every start -# -karaf.clean.all = false - -# -# Deletes the karaf.data/cache directory at every start -# -karaf.clean.cache = false - -# -# Roles to use when logging into a local Karaf console. -# -# The syntax is the following: -# [classname:]principal -# where classname is the class name of the principal object -# (defaults to org.apache.karaf.jaas.modules.RolePrincipal) -# and principal is the name of the principal of that class -# (defaults to instance). -# -karaf.local.roles = admin,manager,viewer - -# -# Set this empty property to avoid errors when validating xml documents. -# -xml.catalog.files = - -# -# Suppress the bell in the console when hitting backspace too many times -# for example -# -jline.nobell = true - -# -# ServiceMix specs options -# -org.apache.servicemix.specs.debug = false -org.apache.servicemix.specs.timeout = 0 - -# -# Settings for the OSGi 4.3 Weaving -# By default, we will not weave any classes. Change this setting to include classes -# that you application needs to have woven. -# -org.apache.aries.proxy.weaving.enabled = none -# Classes not to weave - Aries default + Xerces which is known to have issues. -org.apache.aries.proxy.weaving.disabled = org.objectweb.asm.*,org.slf4j.*,org.apache.log4j.*,javax.*,org.apache.xerces.* - -# -# By default, only Karaf shell commands are secured, but additional services can be -# secured by expanding this filter -# -karaf.secured.services = (&(osgi.command.scope=*)(osgi.command.function=*)) - -# -# Security properties -# -# To enable OSGi security, uncomment the properties below, -# install the framework-security feature and restart. -# -#java.security.policy=${karaf.etc}/all.policy -#org.osgi.framework.security=osgi -#org.osgi.framework.trust.repositories=${karaf.etc}/trustStore.ks diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractUntypedActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractUntypedActor.java index ac01f42a7f..b258c4466a 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractUntypedActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/AbstractUntypedActor.java @@ -18,7 +18,7 @@ public abstract class AbstractUntypedActor extends UntypedActor { Logging.getLogger(getContext().system(), this); - public AbstractUntypedActor(){ + public AbstractUntypedActor() { LOG.debug("Actor created {}", getSelf()); getContext(). system(). @@ -29,16 +29,18 @@ public abstract class AbstractUntypedActor extends UntypedActor { @Override public void onReceive(Object message) throws Exception { LOG.debug("Received message {}", message.getClass().getSimpleName()); handleReceive(message); - LOG.debug("Done handling message {}", message.getClass().getSimpleName()); + LOG.debug("Done handling message {}", + message.getClass().getSimpleName()); } protected abstract void handleReceive(Object message) throws Exception; - protected void ignoreMessage(Object message){ + protected void ignoreMessage(Object message) { LOG.debug("Unhandled message {} ", message); } - protected void unknownMessage(Object message) throws Exception{ + protected void unknownMessage(Object message) throws Exception { + LOG.debug("Received unhandled message {}", message); unhandled(message); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java index c329a10c04..75f540ade0 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java @@ -17,6 +17,8 @@ import akka.japi.Creator; import akka.serialization.Serialization; import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; import org.opendaylight.controller.cluster.datastore.identifiers.ShardTransactionIdentifier; @@ -111,21 +113,27 @@ public class Shard extends RaftActor { } - private static Map mapPeerAddresses(Map peerAddresses){ - Map map = new HashMap<>(); + private static Map mapPeerAddresses( + Map peerAddresses) { + Map map = new HashMap<>(); - for(Map.Entry entry : peerAddresses.entrySet()){ + for (Map.Entry entry : peerAddresses + .entrySet()) { map.put(entry.getKey().toString(), entry.getValue()); } return map; } + + + public static Props props(final ShardIdentifier name, final Map peerAddresses, final InMemoryDOMDataStoreConfigProperties dataStoreProperties) { Preconditions.checkNotNull(name, "name should not be null"); - Preconditions.checkNotNull(peerAddresses, "peerAddresses should not be null"); + Preconditions + .checkNotNull(peerAddresses, "peerAddresses should not be null"); return Props.create(new Creator() { @@ -164,14 +172,16 @@ public class Shard extends RaftActor { } } else if (message instanceof PeerAddressResolved) { PeerAddressResolved resolved = (PeerAddressResolved) message; - setPeerAddress(resolved.getPeerId().toString(), resolved.getPeerAddress()); + setPeerAddress(resolved.getPeerId().toString(), + resolved.getPeerAddress()); } else { super.onReceiveCommand(message); } } private ActorRef createTypedTransactionActor( - CreateTransaction createTransaction, ShardTransactionIdentifier transactionId) { + CreateTransaction createTransaction, + ShardTransactionIdentifier transactionId) { if (createTransaction.getTransactionType() == TransactionProxy.TransactionType.READ_ONLY.ordinal()) { @@ -203,24 +213,26 @@ public class Shard extends RaftActor { .props(store.newWriteOnlyTransaction(), getSelf(), schemaContext), transactionId.toString()); } else { - // FIXME: This does not seem right throw new IllegalArgumentException( - "CreateTransaction message has unidentified transaction type=" + "Shard="+name + ":CreateTransaction message has unidentified transaction type=" + createTransaction.getTransactionType()); } } private void createTransaction(CreateTransaction createTransaction) { - ShardTransactionIdentifier transactionId = ShardTransactionIdentifier.builder().remoteTransactionId(createTransaction.getTransactionId()).build(); + ShardTransactionIdentifier transactionId = + ShardTransactionIdentifier.builder() + .remoteTransactionId(createTransaction.getTransactionId()) + .build(); LOG.debug("Creating transaction : {} ", transactionId); ActorRef transactionActor = createTypedTransactionActor(createTransaction, transactionId); getSender() .tell(new CreateTransactionReply( - Serialization.serializedActorPath(transactionActor), - createTransaction.getTransactionId()).toSerializable(), + Serialization.serializedActorPath(transactionActor), + createTransaction.getTransactionId()).toSerializable(), getSelf()); } @@ -255,22 +267,21 @@ public class Shard extends RaftActor { final ListenableFuture future = cohort.commit(); final ActorRef self = getSelf(); - future.addListener(new Runnable() { - @Override - public void run() { - try { - future.get(); - sender - .tell(new CommitTransactionReply().toSerializable(), - self); - shardMBean.incrementCommittedTransactionCount(); - shardMBean.setLastCommittedTransactionTime(new Date()); - } catch (InterruptedException | ExecutionException e) { - shardMBean.incrementFailedTransactionsCount(); - sender.tell(new akka.actor.Status.Failure(e),self); - } + + Futures.addCallback(future, new FutureCallback() { + public void onSuccess(Void v) { + sender.tell(new CommitTransactionReply().toSerializable(),self); + shardMBean.incrementCommittedTransactionCount(); + shardMBean.setLastCommittedTransactionTime(new Date()); } - }, getContext().dispatcher()); + + public void onFailure(Throwable t) { + LOG.error(t, "An exception happened during commit"); + shardMBean.incrementFailedTransactionsCount(); + sender.tell(new akka.actor.Status.Failure(t), self); + } + }); + } private void handleForwardedCommit(ForwardedCommitTransaction message) { @@ -329,7 +340,7 @@ public class Shard extends RaftActor { LOG.debug( "registerDataChangeListener sending reply, listenerRegistrationPath = {} " - , listenerRegistration.path().toString()); + , listenerRegistration.path().toString()); getSender() .tell(new RegisterChangeListenerReply(listenerRegistration.path()), @@ -370,7 +381,7 @@ public class Shard extends RaftActor { // Update stats ReplicatedLogEntry lastLogEntry = getLastLogEntry(); - if(lastLogEntry != null){ + if (lastLogEntry != null) { shardMBean.setLastLogIndex(lastLogEntry.getIndex()); shardMBean.setLastLogTerm(lastLogEntry.getTerm()); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java index 5fce64e248..3396eb5564 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java @@ -290,10 +290,12 @@ public class ShardManager extends AbstractUntypedActor { @Override public SupervisorStrategy supervisorStrategy() { + return new OneForOneStrategy(10, Duration.create("1 minute"), new Function() { @Override public SupervisorStrategy.Directive apply(Throwable t) { + LOG.warning("Supervisor Strategy of resume applied {}",t); return SupervisorStrategy.resume(); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ThreePhaseCommitCohort.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ThreePhaseCommitCohort.java index 500b73ce9d..25705bff41 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ThreePhaseCommitCohort.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ThreePhaseCommitCohort.java @@ -14,6 +14,8 @@ import akka.actor.Props; import akka.event.Logging; import akka.event.LoggingAdapter; import akka.japi.Creator; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.controller.cluster.datastore.messages.AbortTransaction; import org.opendaylight.controller.cluster.datastore.messages.AbortTransactionReply; @@ -26,8 +28,6 @@ import org.opendaylight.controller.cluster.datastore.messages.PreCommitTransacti import org.opendaylight.controller.cluster.datastore.modification.CompositeModification; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; -import java.util.concurrent.ExecutionException; - public class ThreePhaseCommitCohort extends AbstractUntypedActor { private final DOMStoreThreePhaseCommitCohort cohort; private final ActorRef shardActor; @@ -58,13 +58,17 @@ public class ThreePhaseCommitCohort extends AbstractUntypedActor { @Override public void handleReceive(Object message) throws Exception { - if (message.getClass().equals(CanCommitTransaction.SERIALIZABLE_CLASS)) { + if (message.getClass() + .equals(CanCommitTransaction.SERIALIZABLE_CLASS)) { canCommit(new CanCommitTransaction()); - } else if (message.getClass().equals(PreCommitTransaction.SERIALIZABLE_CLASS)) { + } else if (message.getClass() + .equals(PreCommitTransaction.SERIALIZABLE_CLASS)) { preCommit(new PreCommitTransaction()); - } else if (message.getClass().equals(CommitTransaction.SERIALIZABLE_CLASS)) { + } else if (message.getClass() + .equals(CommitTransaction.SERIALIZABLE_CLASS)) { commit(new CommitTransaction()); - } else if (message.getClass().equals(AbortTransaction.SERIALIZABLE_CLASS)) { + } else if (message.getClass() + .equals(AbortTransaction.SERIALIZABLE_CLASS)) { abort(new AbortTransaction()); } else { unknownMessage(message); @@ -76,17 +80,19 @@ public class ThreePhaseCommitCohort extends AbstractUntypedActor { final ActorRef sender = getSender(); final ActorRef self = getSelf(); - future.addListener(new Runnable() { - @Override - public void run() { - try { - future.get(); - sender.tell(new AbortTransactionReply().toSerializable(), self); - } catch (InterruptedException | ExecutionException e) { - log.error(e, "An exception happened when aborting"); - } + Futures.addCallback(future, new FutureCallback() { + public void onSuccess(Void v) { + sender + .tell(new AbortTransactionReply().toSerializable(), + self); + } + + public void onFailure(Throwable t) { + LOG.error(t, "An exception happened during abort"); + sender + .tell(new akka.actor.Status.Failure(t), getSelf()); } - }, getContext().dispatcher()); + }); } private void commit(CommitTransaction message) { @@ -103,18 +109,19 @@ public class ThreePhaseCommitCohort extends AbstractUntypedActor { final ListenableFuture future = cohort.preCommit(); final ActorRef sender = getSender(); final ActorRef self = getSelf(); + Futures.addCallback(future, new FutureCallback() { + public void onSuccess(Void v) { + sender + .tell(new PreCommitTransactionReply().toSerializable(), + self); + } - future.addListener(new Runnable() { - @Override - public void run() { - try { - future.get(); - sender.tell(new PreCommitTransactionReply().toSerializable(), self); - } catch (InterruptedException | ExecutionException e) { - log.error(e, "An exception happened when preCommitting"); - } + public void onFailure(Throwable t) { + LOG.error(t, "An exception happened during pre-commit"); + sender + .tell(new akka.actor.Status.Failure(t), getSelf()); } - }, getContext().dispatcher()); + }); } @@ -122,18 +129,19 @@ public class ThreePhaseCommitCohort extends AbstractUntypedActor { final ListenableFuture future = cohort.canCommit(); final ActorRef sender = getSender(); final ActorRef self = getSelf(); + Futures.addCallback(future, new FutureCallback() { + public void onSuccess(Boolean canCommit) { + sender.tell(new CanCommitTransactionReply(canCommit) + .toSerializable(), self); + } - future.addListener(new Runnable() { - @Override - public void run() { - try { - Boolean canCommit = future.get(); - sender.tell(new CanCommitTransactionReply(canCommit).toSerializable(), self); - } catch (InterruptedException | ExecutionException e) { - log.error(e, "An exception happened when checking canCommit"); - } + public void onFailure(Throwable t) { + LOG.error(t, "An exception happened during canCommit"); + sender + .tell(new akka.actor.Status.Failure(t), getSelf()); } - }, getContext().dispatcher()); + }); + } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTransactionFailureTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTransactionFailureTest.java index 2c23afca12..16b73040a5 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTransactionFailureTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTransactionFailureTest.java @@ -33,6 +33,7 @@ import static org.junit.Assert.assertTrue; /** * Covers negative test cases + * * @author Basheeruddin Ahmed */ public class ShardTransactionFailureTest extends AbstractActorTest { @@ -48,7 +49,7 @@ public class ShardTransactionFailureTest extends AbstractActorTest { private static final ShardIdentifier SHARD_IDENTIFIER = ShardIdentifier.builder().memberName("member-1") - .shardName("inventory").type("config").build(); + .shardName("inventory").type("operational").build(); static { store.onGlobalContextUpdated(testSchemaContext); @@ -95,7 +96,7 @@ public class ShardTransactionFailureTest extends AbstractActorTest { throws Throwable { final ActorRef shard = - getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP, null)); + getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); final Props props = ShardTransaction.props(store.newReadWriteTransaction(), shard, TestModel.createTestContext()); @@ -129,7 +130,7 @@ public class ShardTransactionFailureTest extends AbstractActorTest { throws Throwable { final ActorRef shard = - getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP, null)); + getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); final Props props = ShardTransaction.props(store.newReadWriteTransaction(), shard, TestModel.createTestContext()); @@ -164,7 +165,7 @@ public class ShardTransactionFailureTest extends AbstractActorTest { final ActorRef shard = - getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP, null)); + getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); final Props props = ShardTransaction.props(store.newWriteOnlyTransaction(), shard, TestModel.createTestContext()); @@ -203,7 +204,7 @@ public class ShardTransactionFailureTest extends AbstractActorTest { final ActorRef shard = - getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP, null)); + getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); final Props props = ShardTransaction.props(store.newReadWriteTransaction(), shard, TestModel.createTestContext()); @@ -241,7 +242,7 @@ public class ShardTransactionFailureTest extends AbstractActorTest { final ActorRef shard = - getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP, null)); + getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); final Props props = ShardTransaction.props(store.newReadWriteTransaction(), shard, TestModel.createTestContext()); @@ -279,7 +280,7 @@ public class ShardTransactionFailureTest extends AbstractActorTest { final ActorRef shard = - getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP, null)); + getSystem().actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); final Props props = ShardTransaction.props(store.newReadWriteTransaction(), shard, TestModel.createTestContext()); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ThreePhaseCommitCohortFailureTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ThreePhaseCommitCohortFailureTest.java new file mode 100644 index 0000000000..870889b350 --- /dev/null +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ThreePhaseCommitCohortFailureTest.java @@ -0,0 +1,232 @@ +/* + * + * Copyright (c) 2014 Cisco Systems, Inc. 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.controller.cluster.datastore; + +import akka.actor.ActorRef; +import akka.actor.Props; +import akka.testkit.TestActorRef; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import org.junit.Test; +import org.mockito.Mockito; +import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; +import org.opendaylight.controller.cluster.datastore.messages.ForwardedCommitTransaction; +import org.opendaylight.controller.cluster.datastore.modification.CompositeModification; +import org.opendaylight.controller.cluster.datastore.modification.Modification; +import org.opendaylight.controller.md.cluster.datastore.model.TestModel; +import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException; +import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore; +import org.opendaylight.controller.protobuff.messages.cohort3pc.ThreePhaseCommitCohortMessages; +import org.opendaylight.controller.protobuff.messages.common.NormalizedNodeMessages; +import org.opendaylight.controller.protobuff.messages.persistent.PersistentMessages; +import org.opendaylight.controller.protobuff.messages.transaction.ShardTransactionMessages; +import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import scala.concurrent.Await; +import scala.concurrent.Future; +import scala.concurrent.duration.Duration; +import scala.concurrent.duration.FiniteDuration; + +import java.util.Collections; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + + +public class ThreePhaseCommitCohortFailureTest extends AbstractActorTest { + + private static ListeningExecutorService storeExecutor = + MoreExecutors.listeningDecorator(MoreExecutors.sameThreadExecutor()); + + private static final InMemoryDOMDataStore store = + new InMemoryDOMDataStore("OPER", storeExecutor, + MoreExecutors.sameThreadExecutor()); + + private static final SchemaContext testSchemaContext = + TestModel.createTestContext(); + + private static final ShardIdentifier SHARD_IDENTIFIER = + ShardIdentifier.builder().memberName("member-1") + .shardName("inventory").type("config").build(); + + static { + store.onGlobalContextUpdated(testSchemaContext); + } + + private FiniteDuration ASK_RESULT_DURATION = Duration.create(3000, TimeUnit.MILLISECONDS); + + + @Test(expected = TestException.class) + public void testNegativeAbortResultsInException() throws Exception { + + final ActorRef shard = + getSystem() + .actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); + final DOMStoreThreePhaseCommitCohort mockCohort = Mockito + .mock(DOMStoreThreePhaseCommitCohort.class); + final CompositeModification mockComposite = + Mockito.mock(CompositeModification.class); + final Props props = + ThreePhaseCommitCohort.props(mockCohort, shard, mockComposite); + + final TestActorRef subject = TestActorRef + .create(getSystem(), props, + "testNegativeAbortResultsInException"); + + when(mockCohort.abort()).thenReturn( + Futures.immediateFailedFuture(new TestException())); + + Future future = + akka.pattern.Patterns.ask(subject, + ThreePhaseCommitCohortMessages.AbortTransaction.newBuilder() + .build(), 3000); + assertTrue(future.isCompleted()); + + Await.result(future, ASK_RESULT_DURATION); + + + + } + + + @Test(expected = OptimisticLockFailedException.class) + public void testNegativeCanCommitResultsInException() throws Exception { + + final ActorRef shard = + getSystem() + .actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); + final DOMStoreThreePhaseCommitCohort mockCohort = Mockito + .mock(DOMStoreThreePhaseCommitCohort.class); + final CompositeModification mockComposite = + Mockito.mock(CompositeModification.class); + final Props props = + ThreePhaseCommitCohort.props(mockCohort, shard, mockComposite); + + final TestActorRef subject = TestActorRef + .create(getSystem(), props, + "testNegativeCanCommitResultsInException"); + + when(mockCohort.canCommit()).thenReturn( + Futures + .immediateFailedFuture( + new OptimisticLockFailedException("some exception"))); + + Future future = + akka.pattern.Patterns.ask(subject, + ThreePhaseCommitCohortMessages.CanCommitTransaction.newBuilder() + .build(), 3000); + + + Await.result(future, ASK_RESULT_DURATION); + + } + + + @Test(expected = TestException.class) + public void testNegativePreCommitResultsInException() throws Exception { + + final ActorRef shard = + getSystem() + .actorOf(Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null)); + final DOMStoreThreePhaseCommitCohort mockCohort = Mockito + .mock(DOMStoreThreePhaseCommitCohort.class); + final CompositeModification mockComposite = + Mockito.mock(CompositeModification.class); + final Props props = + ThreePhaseCommitCohort.props(mockCohort, shard, mockComposite); + + final TestActorRef subject = TestActorRef + .create(getSystem(), props, + "testNegativePreCommitResultsInException"); + + when(mockCohort.preCommit()).thenReturn( + Futures + .immediateFailedFuture( + new TestException())); + + Future future = + akka.pattern.Patterns.ask(subject, + ThreePhaseCommitCohortMessages.PreCommitTransaction.newBuilder() + .build(), 3000); + + Await.result(future, ASK_RESULT_DURATION); + + } + + @Test(expected = TestException.class) + public void testNegativeCommitResultsInException() throws Exception { + + final TestActorRef subject = TestActorRef + .create(getSystem(), + Shard.props(SHARD_IDENTIFIER, Collections.EMPTY_MAP,null), + "testNegativeCommitResultsInException"); + + final ActorRef shardTransaction = + getSystem().actorOf( + ShardTransaction.props(store.newReadWriteTransaction(), subject, + TestModel.createTestContext())); + + ShardTransactionMessages.WriteData writeData = + ShardTransactionMessages.WriteData.newBuilder() + .setInstanceIdentifierPathArguments( + NormalizedNodeMessages.InstanceIdentifier.newBuilder() + .build()).setNormalizedNode( + NormalizedNodeMessages.Node.newBuilder().build() + + ).build(); + + //This is done so that Modification list is updated which is used during commit + Future future = + akka.pattern.Patterns.ask(shardTransaction, writeData, 3000); + + //ready transaction creates the cohort so that we get into the + //block where in commmit is done + ShardTransactionMessages.ReadyTransaction readyTransaction = + ShardTransactionMessages.ReadyTransaction.newBuilder().build(); + + future = + akka.pattern.Patterns.ask(shardTransaction, readyTransaction, 3000); + + //but when the message is sent it will have the MockCommit object + //so that we can simulate throwing of exception + ForwardedCommitTransaction mockForwardCommitTransaction = + Mockito.mock(ForwardedCommitTransaction.class); + DOMStoreThreePhaseCommitCohort mockThreePhaseCommitTransaction = + Mockito.mock(DOMStoreThreePhaseCommitCohort.class); + when(mockForwardCommitTransaction.getCohort()) + .thenReturn(mockThreePhaseCommitTransaction); + when(mockThreePhaseCommitTransaction.commit()).thenReturn(Futures + .immediateFailedFuture( + new TestException())); + Modification mockModification = Mockito.mock( + Modification.class); + when(mockForwardCommitTransaction.getModification()) + .thenReturn(mockModification); + + when(mockModification.toSerializable()).thenReturn( + PersistentMessages.CompositeModification.newBuilder().build()); + + future = + akka.pattern.Patterns.ask(subject, + mockForwardCommitTransaction + , 3000); + Await.result(future, ASK_RESULT_DURATION); + + + } + + private class TestException extends Exception { + } + + +} diff --git a/pom.xml b/pom.xml index e4c51b7839..0bfc64f892 100644 --- a/pom.xml +++ b/pom.xml @@ -129,7 +129,9 @@ opendaylight/dummy-console opendaylight/karaf-branding + opendaylight/distribution/opendaylight-karaf-empty opendaylight/distribution/opendaylight-karaf + opendaylight/distribution/opendaylight-karaf-resources features