From 0e4e58bf061df695341ac250beb97a978cefdaf7 Mon Sep 17 00:00:00 2001 From: Dan Timoney Date: Fri, 29 Jan 2021 17:42:42 +0000 Subject: Revert "migrate sli to alu-SR1" This reverts commit ce4e5f9a00d2677495240ad367b9bfc4b74752d0. Reason for revert: ODL upgrade changes need to be backed out until issues in ccsdk/features are resolved. Change-Id: I168e2519e37f3eee61609d0da890c14db49ec49e --- core/sliapi/provider/pom.xml | 70 ++++++---- .../onap/ccsdk/sli/core/sliapi/SliapiProvider.java | 148 +++++++++++---------- .../OSGI-INF/blueprint/sliapi-blueprint.xml | 28 ++++ .../opendaylight/blueprint/sliapi-blueprint.xml | 9 +- .../ccsdk/sli/core/sliapi/TestSliapiProvider.java | 45 +++---- 5 files changed, 168 insertions(+), 132 deletions(-) create mode 100644 core/sliapi/provider/src/main/resources/OSGI-INF/blueprint/sliapi-blueprint.xml (limited to 'core/sliapi/provider') diff --git a/core/sliapi/provider/pom.xml b/core/sliapi/provider/pom.xml index 5bccec9b6..b9d1c9a67 100755 --- a/core/sliapi/provider/pom.xml +++ b/core/sliapi/provider/pom.xml @@ -17,52 +17,56 @@ ccsdk-sli-core :: sliapi :: ${project.artifactId} - - - org.onap.ccsdk.sli.core - dblib-provider - ${project.version} - - - - + + + org.onap.ccsdk.sli.core + dblib-provider + ${project.version} + + + + + org.onap.ccsdk.sli.core + sliapi-model-yang + ${project.version} + + org.opendaylight.mdsal mdsal-binding-api - provided + + + org.opendaylight.controller + sal-binding-api + + + + org.opendaylight.controller + sal-binding-broker-impl + + org.opendaylight.mdsal mdsal-binding-dom-adapter - provided + org.opendaylight.mdsal yang-binding - provided + org.opendaylight.controller sal-common-util - provided - - - org.opendaylight.yangtools - yang-data-impl - provided - - - org.osgi - org.osgi.core - provided + + org.osgi + org.osgi.core + provided + - - org.onap.ccsdk.sli.core - sliapi-model-yang - ${project.version} - org.onap.ccsdk.sli.core sli-common @@ -78,17 +82,27 @@ sli-provider-base ${project.version} + + org.opendaylight.controller + sal-core-api + + + org.opendaylight.yangtools + yang-data-impl + junit junit test + org.mockito mockito-core test + org.apache.derby derby diff --git a/core/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/SliapiProvider.java b/core/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/SliapiProvider.java index a00131efb..449fc3822 100644 --- a/core/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/SliapiProvider.java +++ b/core/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/SliapiProvider.java @@ -21,8 +21,6 @@ package org.onap.ccsdk.sli.core.sliapi; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; @@ -30,14 +28,19 @@ import java.io.IOException; import java.util.Enumeration; import java.util.LinkedList; import java.util.Properties; -import java.util.concurrent.ExecutionException; + import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService; -import org.opendaylight.mdsal.binding.api.NotificationPublishService; -import org.opendaylight.mdsal.binding.api.RpcProviderService; -import org.opendaylight.mdsal.common.api.LogicalDatastoreType; -import org.opendaylight.mdsal.common.api.OptimisticLockFailedException; -import org.opendaylight.mdsal.dom.api.DOMDataBroker; -import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException; +import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; +import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; +import org.opendaylight.controller.md.sal.dom.api.DOMDataWriteTransaction; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInput; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInput.Mode; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInputBuilder; @@ -47,13 +50,14 @@ import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.Hea import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.HealthcheckOutput; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.HealthcheckOutputBuilder; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.SLIAPIService; +import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.TestResults; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.VlbcheckInput; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.VlbcheckOutput; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.VlbcheckOutputBuilder; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameter; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.test.results.TestResult; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.test.results.TestResultBuilder; -import org.opendaylight.yangtools.concepts.ObjectRegistration; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcError.ErrorType; import org.opendaylight.yangtools.yang.common.RpcResult; @@ -74,6 +78,9 @@ import org.osgi.framework.ServiceReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; + /** * Defines a base implementation for your provider. This class extends from a * helper class which provides storage for the most commonly used components of @@ -85,17 +92,17 @@ import org.slf4j.LoggerFactory; * src/main/java in this project (created only once during first compilation): * *
- *
+ * 
  * @Override
  * public java.lang.AutoCloseable createInstance() {
- *
+ * 
  * 	final SliapiProvider provider = new SliapiProvider();
  * 	provider.setDataBroker(getDataBrokerDependency());
  * 	provider.setNotificationService(getNotificationServiceDependency());
  * 	provider.setRpcRegistry(getRpcRegistryDependency());
  * 	provider.initialize();
  * 	return new AutoCloseable() {
- *
+ * 
  * 		@Override
  * 		public void close() throws Exception {
  * 			// TODO: CLOSE ANY REGISTRATION OBJECTS CREATED USING ABOVE
@@ -105,7 +112,7 @@ import org.slf4j.LoggerFactory;
  * 		}
  * 	};
  * }
- *
+ * 
  * 
*/ public class SliapiProvider implements AutoCloseable, SLIAPIService { @@ -113,14 +120,14 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { private static final Logger LOG = LoggerFactory.getLogger(SliapiProvider.class); private static final String appName = "slitester"; - //protected DataBroker dataBroker; + protected DataBroker dataBroker; protected DOMDataBroker domDataBroker; protected NotificationPublishService notificationService; - protected RpcProviderService rpcRegistry; + protected RpcProviderRegistry rpcRegistry; private SvcLogicService svcLogic; - protected ObjectRegistration rpcRegistration; + protected BindingAwareBroker.RpcRegistration rpcRegistration; private static String SLIAPI_NAMESPACE = "org:onap:ccsdk:sli:core:sliapi"; private static String SLIAPI_REVISION = "2016-11-10"; @@ -141,26 +148,25 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { RESULTS_QNAME = QName.create(TEST_RESULT_QNAME, "results"); } - public SliapiProvider(DOMDataBroker dataBroker, NotificationPublishService notificationPublishService, - RpcProviderService rpcProviderRegistry) { + public SliapiProvider(DataBroker dataBroker, NotificationPublishService notificationPublishService, + RpcProviderRegistry rpcProviderRegistry) { this(dataBroker, notificationPublishService, rpcProviderRegistry, findSvcLogicService()); } - public SliapiProvider(DOMDataBroker dataBroker, NotificationPublishService notificationPublishService, - RpcProviderService rpcProviderRegistry, SvcLogicService svcLogic) { + public SliapiProvider(DataBroker dataBroker, NotificationPublishService notificationPublishService, + RpcProviderRegistry rpcProviderRegistry, SvcLogicService svcLogic) { this.LOG.info("Creating provider for " + appName); - //this.dataBroker = dataBroker; + this.dataBroker = dataBroker; this.notificationService = notificationPublishService; this.rpcRegistry = rpcProviderRegistry; this.svcLogic = svcLogic; - this.domDataBroker = dataBroker; initialize(); } public void initialize() { LOG.info("Initializing provider for " + appName); // initialization code goes here. - rpcRegistration = rpcRegistry.registerRpcImplementation(SLIAPIService.class, this); + rpcRegistration = rpcRegistry.addRpcImplementation(SLIAPIService.class, this); sdncStatusFile = System.getenv(SDNC_STATUS_FILE); LOG.info("SDNC STATUS FILE = " + sdncStatusFile); @@ -180,9 +186,11 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { LOG.info("Successfully closed provider for " + appName); } - public void setDataBroker(DOMDataBroker dataBroker) { - domDataBroker = dataBroker; - + public void setDataBroker(DataBroker dataBroker) { + this.dataBroker = dataBroker; + if (dataBroker instanceof AbstractForwardedDataBroker) { + domDataBroker = ((AbstractForwardedDataBroker) dataBroker).getDelegate(); + } if (LOG.isDebugEnabled()) { LOG.debug("DataBroker set to " + (dataBroker == null ? "null" : NON_NULL) + "."); } @@ -195,7 +203,7 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { } } - public void setRpcRegistry(RpcProviderService rpcRegistry) { + public void setRpcRegistry(RpcProviderRegistry rpcRegistry) { this.rpcRegistry = rpcRegistry; if (LOG.isDebugEnabled()) { LOG.debug("RpcRegistry set to " + (rpcRegistry == null ? "null" : NON_NULL) + "."); @@ -254,7 +262,7 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { Properties parms = new Properties(); // Pass properties using names from sli-parameters - for (SliParameter sliParm : input.getSliParameter().values()) { + for (SliParameter sliParm : input.getSliParameter()) { String propValue = ""; @@ -446,8 +454,7 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { return (Futures.immediateFuture(rpcResult)); } - @Override - public ListenableFuture> vlbcheck(VlbcheckInput vlbInput) { + public ListenableFuture> vlbcheck(VlbcheckInput vlbInput) { RpcResult rpcResult = null; SvcLogicService svcLogic = getSvcLogicService(); @@ -571,12 +578,12 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { YangInstanceIdentifier testResultsPid = YangInstanceIdentifier.builder().node(TEST_RESULTS_QNAME) .node(QName.create(TEST_RESULTS_QNAME, "test-result")).build(); YangInstanceIdentifier testResultPid = testResultsPid - .node(NodeIdentifierWithPredicates.of(TEST_RESULT_QNAME, resultNode.getIdentifier().asMap())); + .node(new NodeIdentifierWithPredicates(TEST_RESULT_QNAME, resultNode.getIdentifier().getKeyValues())); int tries = 2; while (true) { try { - DOMDataTreeWriteTransaction wtx = domDataBroker.newWriteOnlyTransaction(); + DOMDataWriteTransaction wtx = domDataBroker.newWriteOnlyTransaction(); if (merge) { LOG.info("Merging test identifier " + entry.getTestIdentifier()); wtx.merge(storeType, testResultPid, resultNode); @@ -584,10 +591,10 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { LOG.info("Putting test identifier " + entry.getTestIdentifier()); wtx.put(storeType, testResultPid, resultNode); } - wtx.commit().get(); + wtx.submit().checkedGet(); LOG.trace("Update DataStore succeeded"); break; - } catch (final InterruptedException | ExecutionException e) { + } catch (final TransactionCommitFailedException e) { if (e instanceof OptimisticLockFailedException) { if (--tries <= 0) { LOG.trace("Got OptimisticLockFailedException on last try - failing "); @@ -603,40 +610,40 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { } -// private void SaveTestResult(final TestResult entry, boolean merge, LogicalDatastoreType storeType) -// throws IllegalStateException { -// // Each entry will be identifiable by a unique key, we have to create that -// // identifier -// -// InstanceIdentifier.InstanceIdentifierBuilder testResultIdBuilder = InstanceIdentifier -// .builder(TestResults.class).child(TestResult.class, entry.key()); -// InstanceIdentifier path = testResultIdBuilder.build(); -// int tries = 2; -// while (true) { -// try { -// WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); -// if (merge) { -// tx.merge(storeType, path, entry); -// } else { -// tx.put(storeType, path, entry); -// } -// tx.submit().checkedGet(); -// LOG.trace("Update DataStore succeeded"); -// break; -// } catch (final TransactionCommitFailedException e) { -// if (e instanceof OptimisticLockFailedException) { -// if (--tries <= 0) { -// LOG.trace("Got OptimisticLockFailedException on last try - failing "); -// throw new IllegalStateException(e); -// } -// LOG.trace("Got OptimisticLockFailedException - trying again "); -// } else { -// LOG.trace("Update DataStore failed"); -// throw new IllegalStateException(e); -// } -// } -// } -// } + private void SaveTestResult(final TestResult entry, boolean merge, LogicalDatastoreType storeType) + throws IllegalStateException { + // Each entry will be identifiable by a unique key, we have to create that + // identifier + + InstanceIdentifier.InstanceIdentifierBuilder testResultIdBuilder = InstanceIdentifier + .builder(TestResults.class).child(TestResult.class, entry.key()); + InstanceIdentifier path = testResultIdBuilder.build(); + int tries = 2; + while (true) { + try { + WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); + if (merge) { + tx.merge(storeType, path, entry); + } else { + tx.put(storeType, path, entry); + } + tx.submit().checkedGet(); + LOG.trace("Update DataStore succeeded"); + break; + } catch (final TransactionCommitFailedException e) { + if (e instanceof OptimisticLockFailedException) { + if (--tries <= 0) { + LOG.trace("Got OptimisticLockFailedException on last try - failing "); + throw new IllegalStateException(e); + } + LOG.trace("Got OptimisticLockFailedException - trying again "); + } else { + LOG.trace("Update DataStore failed"); + throw new IllegalStateException(e); + } + } + } + } private MapEntryNode toMapEntryNode(TestResult testResult) { @@ -657,8 +664,7 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService { // Construct test result ContainerNode with 2 children - test-identifier leaf // and results leaf-set MapEntryNode testResultNode = ImmutableNodes.mapEntryBuilder() - - .withNodeIdentifier(NodeIdentifierWithPredicates.of(TEST_RESULT_QNAME, TEST_ID_QNAME, + .withNodeIdentifier(new NodeIdentifierWithPredicates(TEST_RESULT_QNAME, TEST_ID_QNAME, testResult.getTestIdentifier())) .withChild(ImmutableNodes.leafNode(TEST_ID_QNAME, testResult.getTestIdentifier())) .withChild(resultsNode).build(); diff --git a/core/sliapi/provider/src/main/resources/OSGI-INF/blueprint/sliapi-blueprint.xml b/core/sliapi/provider/src/main/resources/OSGI-INF/blueprint/sliapi-blueprint.xml new file mode 100644 index 000000000..875027e63 --- /dev/null +++ b/core/sliapi/provider/src/main/resources/OSGI-INF/blueprint/sliapi-blueprint.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/sliapi/provider/src/main/resources/org/opendaylight/blueprint/sliapi-blueprint.xml b/core/sliapi/provider/src/main/resources/org/opendaylight/blueprint/sliapi-blueprint.xml index 8ec666d53..875027e63 100644 --- a/core/sliapi/provider/src/main/resources/org/opendaylight/blueprint/sliapi-blueprint.xml +++ b/core/sliapi/provider/src/main/resources/org/opendaylight/blueprint/sliapi-blueprint.xml @@ -8,13 +8,16 @@ + interface="org.opendaylight.controller.md.sal.binding.api.DataBroker" + odl:type="default" /> + interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService" + odl:type="default" /> + interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry" + odl:type="default" /> diff --git a/core/sliapi/provider/src/test/java/org/onap/ccsdk/sli/core/sliapi/TestSliapiProvider.java b/core/sliapi/provider/src/test/java/org/onap/ccsdk/sli/core/sliapi/TestSliapiProvider.java index b731423c5..f48cf783b 100644 --- a/core/sliapi/provider/src/test/java/org/onap/ccsdk/sli/core/sliapi/TestSliapiProvider.java +++ b/core/sliapi/provider/src/test/java/org/onap/ccsdk/sli/core/sliapi/TestSliapiProvider.java @@ -1,30 +1,15 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP : CCSDK - * ================================================================================ - * Copyright (C) 2018 IBM. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 +/** * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= */ package org.onap.ccsdk.sli.core.sliapi; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; + import java.io.InputStream; import java.net.URL; import java.util.HashMap; @@ -62,9 +47,10 @@ import org.onap.ccsdk.sli.core.sli.provider.base.SetNodeExecutor; import org.onap.ccsdk.sli.core.sli.provider.base.SwitchNodeExecutor; import org.onap.ccsdk.sli.core.sli.provider.base.UpdateNodeExecutor; import org.onap.ccsdk.sli.core.sli.provider.base.WhileNodeExecutor; -import org.opendaylight.mdsal.binding.api.NotificationPublishService; -import org.opendaylight.mdsal.binding.api.RpcProviderService; -import org.opendaylight.mdsal.dom.api.DOMDataBroker; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInput; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInputBuilder; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.HealthcheckInput; @@ -72,7 +58,6 @@ import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.SLI import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.VlbcheckInput; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameter; import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameterBuilder; -import org.opendaylight.yangtools.concepts.ObjectRegistration; /** * @author dt5972 @@ -114,12 +99,12 @@ public class TestSliapiProvider { */ @Before public void setUp() throws Exception { - DOMDataBroker dataBroker = mock(DOMDataBroker.class); + DataBroker dataBroker = mock(DataBroker.class); NotificationPublishService notifyService = mock(NotificationPublishService.class); - RpcProviderService rpcRegistry = mock(RpcProviderService.class); - ObjectRegistration rpcRegistration = mock( - ObjectRegistration.class); - when(rpcRegistry.registerRpcImplementation(any(Class.class), any(SLIAPIService.class))).thenReturn(rpcRegistration); + RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class); + BindingAwareBroker.RpcRegistration rpcRegistration = (BindingAwareBroker.RpcRegistration) mock( + BindingAwareBroker.RpcRegistration.class); + when(rpcRegistry.addRpcImplementation(any(Class.class), any(SLIAPIService.class))).thenReturn(rpcRegistration); // Load svclogic.properties and get a SvcLogicStore InputStream propStr = TestSliapiProvider.class.getResourceAsStream("/svclogic.properties"); @@ -187,8 +172,8 @@ public class TestSliapiProvider { pList.add(pBuilder.build()); inputBuilder.setSliParameter(pList); provider.executeGraph(inputBuilder.build()); - - + + // Invalid test - graph does not exist inputBuilder.setMode(ExecuteGraphInput.Mode.Sync); inputBuilder.setModuleName("sli"); @@ -208,7 +193,7 @@ public class TestSliapiProvider { pList.add(pBuilder.build()); inputBuilder.setSliParameter(pList); provider.executeGraph(inputBuilder.build()); - + assertTrue(provider.vlbcheck(mock(VlbcheckInput.class)) instanceof Future); } -- cgit 1.2.3-korg