summaryrefslogtreecommitdiffstats
path: root/vnfapi/provider/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'vnfapi/provider/src/main')
-rw-r--r--vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/VnfApiProvider.java176
1 files changed, 99 insertions, 77 deletions
diff --git a/vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/VnfApiProvider.java b/vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/VnfApiProvider.java
index 1a05d2db..46184b0a 100644
--- a/vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/VnfApiProvider.java
+++ b/vnfapi/provider/src/main/java/org/onap/sdnc/vnfapi/VnfApiProvider.java
@@ -24,13 +24,14 @@ package org.onap.sdnc.vnfapi;
import com.google.common.util.concurrent.CheckedFuture;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.base.Optional;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
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;
@@ -145,6 +146,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.concurrent.Future;
/**
@@ -153,7 +155,7 @@ import java.util.concurrent.Future;
* initialization / clean up methods.
*/
-public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeListener {
+public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataTreeChangeListener {
protected DataBroker dataBroker;
protected NotificationPublishService notificationService;
protected RpcProviderRegistry rpcRegistry;
@@ -276,60 +278,69 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
}
// On data change not used
- @Override
- public void onDataChanged(AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
-
- log.info(" IN ON DATA CHANGE: ");
-
- boolean changed = false;
- WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
- DataObject updatedSubTree = change.getUpdatedSubtree();
-
- if (updatedSubTree != null) {
- if (log.isDebugEnabled()) {
- log.debug("updatedSubTree was non-null:" + updatedSubTree);
- }
- if (updatedSubTree instanceof Vnfs) {
- changed = isChanged(changed, (Vnfs) updatedSubTree);
- }
- if (updatedSubTree instanceof PreloadVnfs) {
- changed = isChanged(changed, (PreloadVnfs) updatedSubTree);
- }
- //1610
- if (updatedSubTree instanceof PreloadVnfInstances) {
- changed = isChanged(changed, (PreloadVnfInstances) updatedSubTree);
- }
- //1610
- if (updatedSubTree instanceof VnfInstances) {
- changed = isChanged(changed, (VnfInstances) updatedSubTree);
- }
- //1610
- if (updatedSubTree instanceof PreloadVfModules) {
- changed = isChanged(changed, (PreloadVfModules) updatedSubTree);
- }
- //1610
- if (updatedSubTree instanceof VfModules) {
- changed = isChanged(changed, (VfModules) updatedSubTree);
- }
- }
-
- // Do the write transaction only if something changed.
- if (changed) {
- CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = writeTransaction.submit();
- Futures.addCallback(checkedFuture, new FutureCallback<Void>() {
-
- @Override
- public void onSuccess(Void arg0) {
- log.debug("Successfully updated Service Status");
- }
-
- @Override
- public void onFailure(Throwable e) {
- log.debug("Failed updating Service Status", e);
- }
- }, executor);
- }
- }
+ @Override
+ public void onDataTreeChanged(Collection changes) {
+
+ log.info(" IN ON DATA CHANGE: ");
+
+ for (Object changeObj : changes) {
+
+ if (changeObj instanceof DataTreeModification) {
+
+ DataTreeModification change = (DataTreeModification) changeObj;
+
+
+ boolean changed = false;
+ WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction();
+ DataObject updatedSubTree = change.getRootNode().getDataAfter();
+
+ if (updatedSubTree != null) {
+ if (log.isDebugEnabled()) {
+ log.debug("updatedSubTree was non-null:" + updatedSubTree);
+ }
+ if (updatedSubTree instanceof Vnfs) {
+ changed = isChanged(changed, (Vnfs) updatedSubTree);
+ }
+ if (updatedSubTree instanceof PreloadVnfs) {
+ changed = isChanged(changed, (PreloadVnfs) updatedSubTree);
+ }
+ // 1610
+ if (updatedSubTree instanceof PreloadVnfInstances) {
+ changed = isChanged(changed, (PreloadVnfInstances) updatedSubTree);
+ }
+ // 1610
+ if (updatedSubTree instanceof VnfInstances) {
+ changed = isChanged(changed, (VnfInstances) updatedSubTree);
+ }
+ // 1610
+ if (updatedSubTree instanceof PreloadVfModules) {
+ changed = isChanged(changed, (PreloadVfModules) updatedSubTree);
+ }
+ // 1610
+ if (updatedSubTree instanceof VfModules) {
+ changed = isChanged(changed, (VfModules) updatedSubTree);
+ }
+ }
+
+ // Do the write transaction only if something changed.
+ if (changed) {
+ CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = writeTransaction.submit();
+ Futures.addCallback(checkedFuture, new FutureCallback<Void>() {
+
+ @Override
+ public void onSuccess(Void arg0) {
+ log.debug("Successfully updated Service Status");
+ }
+
+ @Override
+ public void onFailure(Throwable e) {
+ log.debug("Failed updating Service Status", e);
+ }
+ }, executor);
+ }
+ }
+ }
+ }
private boolean isChanged(boolean changed, VfModules updatedSubTree) {
ArrayList<VfModuleList> vfModuleList =
@@ -813,7 +824,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
// Each entry will be identifiable by a unique key, we have to create that identifier
InstanceIdentifier<VnfList> path = InstanceIdentifier
.builder(Vnfs.class)
- .child(VnfList.class, entry.getKey())
+ .child(VnfList.class, entry.key())
.build();
int optimisticLockTries = 2;
@@ -834,13 +845,22 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
tryAgain = true;
} catch (final TransactionCommitFailedException e) {
-
- if (e.getCause() instanceof ModifiedNodeDoesNotExistException) {
- log.debug("Ignoring MpdifiedNodeDoesNotExistException");
+ Throwable eCause = e.getCause();
+
+
+ if (eCause instanceof org.opendaylight.mdsal.common.api.TransactionCommitFailedException) {
+ log.debug("Nested TransactionCommitFailed exception - getting next cause");
+ eCause = eCause.getCause();
+ } else {
+ log.debug("Got TransactionCommitFailedException, caused by {}", eCause.getClass().getName());
+ }
+
+ if (eCause instanceof ModifiedNodeDoesNotExistException) {
+ log.debug("Ignoring ModifiedNodeDoesNotExistException");
break;
}
- log.debug("Delete DataStore failed");
+ log.debug("Delete DataStore failed due to exception", eCause);
throw new IllegalStateException(e);
}
}
@@ -850,7 +870,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
// Each entry will be identifiable by a unique key, we have to create that identifier
InstanceIdentifier<VnfList> path = InstanceIdentifier
.builder(Vnfs.class)
- .child(VnfList.class, entry.getKey())
+ .child(VnfList.class, entry.key())
.build();
tryUpdateDataStore(entry, merge, storeType, path);
@@ -861,7 +881,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
// Each entry will be identifiable by a unique key, we have to create that identifier
InstanceIdentifier<VnfInstanceList> path = InstanceIdentifier
.builder(VnfInstances.class)
- .child(VnfInstanceList.class, entry.getKey())
+ .child(VnfInstanceList.class, entry.key())
.build();
tryUpdateDataStore(entry, merge, storeType, path);
@@ -872,7 +892,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
// Each entry will be identifiable by a unique key, we have to create that identifier
InstanceIdentifier<VfModuleList> path = InstanceIdentifier
.builder(VfModules.class)
- .child(VfModuleList.class, entry.getKey())
+ .child(VfModuleList.class, entry.key())
.build();
tryUpdateDataStore(entry, merge, storeType, path);
@@ -883,7 +903,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
// Each entry will be identifiable by a unique key, we have to create that identifier
InstanceIdentifier<VnfPreloadList> path = InstanceIdentifier
.builder(PreloadVnfs.class)
- .child(VnfPreloadList.class, entry.getKey())
+ .child(VnfPreloadList.class, entry.key())
.build();
tryUpdateDataStore(entry, merge, storeType, path);
@@ -896,7 +916,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
// Each entry will be identifiable by a unique key, we have to create that identifier
InstanceIdentifier<VnfInstancePreloadList> path = InstanceIdentifier
.builder(PreloadVnfInstances.class)
- .child(VnfInstancePreloadList.class, entry.getKey())
+ .child(VnfInstancePreloadList.class, entry.key())
.build();
tryUpdateDataStore(entry, merge, storeType, path);
@@ -909,7 +929,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
// Each entry will be identifiable by a unique key, we have to create that identifier
InstanceIdentifier<VfModulePreloadList> path = InstanceIdentifier
.builder(PreloadVfModules.class)
- .child(VfModulePreloadList.class, entry.getKey())
+ .child(VfModulePreloadList.class, entry.key())
.build();
tryUpdateDataStore(entry, merge, storeType, path);
@@ -957,7 +977,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
&& input.getVnfInstanceRequestInformation().getVnfInstanceId().length() != 0;
}
- private Future<RpcResult<VnfInstanceTopologyOperationOutput>> buildVnfInstanceTopologyOperationOutputWithtError(
+ private ListenableFuture<RpcResult<VnfInstanceTopologyOperationOutput>> buildVnfInstanceTopologyOperationOutputWithtError(
String responseCode, String responseMessage, String ackFinalIndicator) {
VnfInstanceTopologyOperationOutputBuilder responseBuilder = new VnfInstanceTopologyOperationOutputBuilder();
responseBuilder.setResponseCode(responseCode);
@@ -970,7 +990,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
}
@Override
- public Future<RpcResult<VnfInstanceTopologyOperationOutput>> vnfInstanceTopologyOperation(
+ public ListenableFuture<RpcResult<VnfInstanceTopologyOperationOutput>> vnfInstanceTopologyOperation(
VnfInstanceTopologyOperationInput input) {
final String svcOperation = "vnf-instance-topology-operation";
@@ -1156,7 +1176,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
//1610 vf-module-topology-operation
@Override
- public Future<RpcResult<VfModuleTopologyOperationOutput>> vfModuleTopologyOperation(
+ public ListenableFuture<RpcResult<VfModuleTopologyOperationOutput>> vfModuleTopologyOperation(
VfModuleTopologyOperationInput input) {
final String svcOperation = "vf-module-topology-operation";
@@ -1388,7 +1408,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
}
@Override
- public Future<RpcResult<VnfTopologyOperationOutput>> vnfTopologyOperation(VnfTopologyOperationInput input) {
+ public ListenableFuture<RpcResult<VnfTopologyOperationOutput>> vnfTopologyOperation(VnfTopologyOperationInput input) {
final String svcOperation = "vnf-topology-operation";
ServiceData serviceData;
ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
@@ -1580,7 +1600,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
}
@Override
- public Future<RpcResult<NetworkTopologyOperationOutput>> networkTopologyOperation(
+ public ListenableFuture<RpcResult<NetworkTopologyOperationOutput>> networkTopologyOperation(
NetworkTopologyOperationInput input) {
final String svcOperation = "network-topology-operation";
@@ -1722,7 +1742,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
}
@Override
- public Future<RpcResult<PreloadVnfTopologyOperationOutput>> preloadVnfTopologyOperation(
+ public ListenableFuture<RpcResult<PreloadVnfTopologyOperationOutput>> preloadVnfTopologyOperation(
PreloadVnfTopologyOperationInput input) {
final String svcOperation = "preload-vnf-topology-operation";
@@ -1909,7 +1929,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
//1610 preload-vnf-instance-topology-operation
@Override
- public Future<RpcResult<PreloadVnfInstanceTopologyOperationOutput>> preloadVnfInstanceTopologyOperation(
+ public ListenableFuture<RpcResult<PreloadVnfInstanceTopologyOperationOutput>> preloadVnfInstanceTopologyOperation(
PreloadVnfInstanceTopologyOperationInput input) {
final String svcOperation = "preload-vnf-instance-topology-operation";
@@ -2098,7 +2118,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
//1610 preload-vf-module-topology-operation
@Override
- public Future<RpcResult<PreloadVfModuleTopologyOperationOutput>> preloadVfModuleTopologyOperation(
+ public ListenableFuture<RpcResult<PreloadVfModuleTopologyOperationOutput>> preloadVfModuleTopologyOperation(
PreloadVfModuleTopologyOperationInput input) {
final String svcOperation = "preload-vf-module-topology-operation";
@@ -2288,7 +2308,7 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
@Override
- public Future<RpcResult<PreloadNetworkTopologyOperationOutput>> preloadNetworkTopologyOperation(
+ public ListenableFuture<RpcResult<PreloadNetworkTopologyOperationOutput>> preloadNetworkTopologyOperation(
PreloadNetworkTopologyOperationInput input) {
final String svcOperation = "preload-network-topology-operation";
@@ -2477,4 +2497,6 @@ public class VnfApiProvider implements AutoCloseable, VNFAPIService, DataChangeL
.build();
return Futures.immediateFuture(rpcResult);
}
+
+
}