-/**
+/*
* Copyright (c) 2016 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.openflowplugin.applications.frsync.impl;
-import com.google.common.base.Optional;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.Collection;
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import java.util.Optional;
+import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataTreeModification;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.openflowplugin.applications.frsync.SyncReactor;
import org.opendaylight.openflowplugin.applications.frsync.dao.FlowCapableNodeDao;
import org.opendaylight.openflowplugin.applications.frsync.dao.FlowCapableNodeSnapshotDao;
/**
* Update cache. If operational data are present, choose appropriate data and start syncup.
* Otherwise skip incoming change.
- * @throws InterruptedException from syncup
*/
+ @Override
protected Optional<ListenableFuture<Boolean>> processNodeModification(
- final DataTreeModification<FlowCapableNode> modification) throws InterruptedException {
+ final DataTreeModification<FlowCapableNode> modification) {
final InstanceIdentifier<FlowCapableNode> nodePath = modification.getRootPath().getRootIdentifier();
final NodeId nodeId = PathUtil.digNodeId(nodePath);
- configSnapshot.updateCache(nodeId, Optional.fromNullable(modification.getRootNode().getDataAfter()));
+ configSnapshot.updateCache(nodeId, Optional.ofNullable(modification.getRootNode().getDataAfter()));
final Optional<FlowCapableNode> operationalNode = operationalDao.loadByNodeId(nodeId);
- if (!operationalNode.isPresent()) {
+ if (operationalNode.isEmpty()) {
LOG.debug("Skip syncup, {} operational is not present", nodeId.getValue());
- return Optional.absent();
+ return Optional.empty();
}
final DataObjectModification<FlowCapableNode> configModification = modification.getRootNode();
final FlowCapableNode dataAfter = configModification.getDataAfter();
final ListenableFuture<Boolean> endResult;
if (dataBefore == null && dataAfter != null) {
- endResult = onNodeAdded(nodePath, dataAfter, operationalNode.get());
+ endResult = onNodeAdded(nodePath, dataAfter, operationalNode.orElseThrow());
} else if (dataBefore != null && dataAfter == null) {
endResult = onNodeDeleted(nodePath, dataBefore);
} else {
}
/**
- * Add only what is missing on device. If node was added to config DS and it is already present
- * in operational DS (connected) diff between current new configuration and actual configuration
- * (seen in operational) should be calculated and sent to device.
+ * If node was added to config DS and it is already present in operational DS (connected) diff between current
+ * new configuration and actual configuration (seen in operational) should be calculated and sent to device.
*/
private ListenableFuture<Boolean> onNodeAdded(final InstanceIdentifier<FlowCapableNode> nodePath,
final FlowCapableNode dataAfter,
- final FlowCapableNode operationalNode) throws InterruptedException {
+ final FlowCapableNode operationalNode) {
LOG.debug("Reconciliation {}: {}", dsType(), PathUtil.digNodeId(nodePath).getValue());
- final SyncupEntry syncupEntry = new SyncupEntry(dataAfter, dsType(), operationalNode, LogicalDatastoreType.OPERATIONAL);
+ final SyncupEntry syncupEntry = new SyncupEntry(dataAfter, dsType(), operationalNode,
+ LogicalDatastoreType.OPERATIONAL);
return reactor.syncup(nodePath, syncupEntry);
}
*/
private ListenableFuture<Boolean> onNodeUpdated(final InstanceIdentifier<FlowCapableNode> nodePath,
final FlowCapableNode dataBefore,
- final FlowCapableNode dataAfter) throws InterruptedException {
+ final FlowCapableNode dataAfter) {
final SyncupEntry syncupEntry = new SyncupEntry(dataAfter, dsType(), dataBefore, dsType());
return reactor.syncup(nodePath, syncupEntry);
}
* Note, this could be probably optimized using dedicated wipe-out RPC.
*/
private ListenableFuture<Boolean> onNodeDeleted(final InstanceIdentifier<FlowCapableNode> nodePath,
- final FlowCapableNode dataBefore) throws InterruptedException {
+ final FlowCapableNode dataBefore) {
final SyncupEntry syncupEntry = new SyncupEntry(null, dsType(), dataBefore, dsType());
return reactor.syncup(nodePath, syncupEntry);
}