From 43f9589c1138bd3e39f0791916a2d611cd084a7b Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 21 Jun 2023 20:57:38 +0200 Subject: [PATCH 1/1] Adjust for DataTreeCandidateNode API change The return types have changed, adjust to that. Change-Id: I5c51659e9c0d30ff90cbfff7772d348af301f4f9 Signed-off-by: Robert Varga --- .../RootDataTreeChangeListenerActor.java | 2 +- .../datastore/actors/JsonExportActor.java | 4 +-- .../AbstractDataTreeCandidateNode.java | 9 +++-- .../DataTreeCandidateInputOutput.java | 4 +-- .../DataTreeCohortIntegrationTest.java | 33 ++++++------------- .../cluster/datastore/ShardDataTreeTest.java | 2 +- .../CarEntryDataTreeCommitCohort.java | 13 ++++---- .../it/provider/impl/IdIntsListener.java | 13 ++++---- 8 files changed, 32 insertions(+), 48 deletions(-) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RootDataTreeChangeListenerActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RootDataTreeChangeListenerActor.java index 42a2bdb196..857c2844ff 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RootDataTreeChangeListenerActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/RootDataTreeChangeListenerActor.java @@ -116,7 +116,7 @@ final class RootDataTreeChangeListenerActor extends DataTreeChangeListenerActor initial = Iterables.get(changes, 0); } - final NormalizedNode root = initial.getRootNode().findDataAfter().orElseThrow(); + final NormalizedNode root = initial.getRootNode().getDataAfter(); verify(root instanceof ContainerNode, "Unexpected root node %s", root); ((ContainerNode) root).body().forEach(rootBuilder::withChild); } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/actors/JsonExportActor.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/actors/JsonExportActor.java index df7b84b7ca..fafa7d94a3 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/actors/JsonExportActor.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/actors/JsonExportActor.java @@ -98,7 +98,7 @@ public final class JsonExportActor extends AbstractUntypedActor { final Path filePath = snapshotDir.resolve(exportSnapshot.id + "-snapshot.json"); LOG.debug("Creating JSON file : {}", filePath); - final NormalizedNode root = exportSnapshot.dataTreeCandidate.getRootNode().findDataAfter().orElseThrow(); + final NormalizedNode root = exportSnapshot.dataTreeCandidate.getRootNode().getDataAfter(); checkState(root instanceof NormalizedNodeContainer, "Unexpected root %s", root); writeSnapshot(filePath, (NormalizedNodeContainer) root); @@ -199,7 +199,7 @@ public final class JsonExportActor extends AbstractUntypedActor { writer.beginObject().name("Path").value(path.toString()).endObject(); writer.beginObject().name("ModificationType").value(modificationType.toString()).endObject(); if (modificationType == ModificationType.WRITE) { - writer.beginObject().name("Data").value(node.findDataAfter().orElseThrow().body().toString()).endObject(); + writer.beginObject().name("Data").value(node.getDataAfter().body().toString()).endObject(); } writer.endArray(); writer.endObject(); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractDataTreeCandidateNode.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractDataTreeCandidateNode.java index a5c9963b68..9d1bb9a346 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractDataTreeCandidateNode.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/AbstractDataTreeCandidateNode.java @@ -17,11 +17,10 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode; import org.opendaylight.yangtools.yang.data.tree.api.ModificationType; /** - * Abstract base class for our internal implementation of {@link DataTreeCandidateNode}, - * which we instantiate from a serialized stream. We do not retain the before-image and - * do not implement {@link #getModifiedChild(PathArgument)}, as that method is only - * useful for end users. Instances based on this class should never be leaked outside of - * this component. + * Abstract base class for our internal implementation of {@link DataTreeCandidateNode}, which we instantiate from a + * serialized stream. We do not retain the before-image and do not implement {@link #modifiedChild(PathArgument)}, as + * that method is only useful for end users. Instances based on this class should never be leaked outside of this + * component. */ abstract class AbstractDataTreeCandidateNode implements DataTreeCandidateNode { private final @NonNull ModificationType type; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DataTreeCandidateInputOutput.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DataTreeCandidateInputOutput.java index 3737b08b42..e48263400f 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DataTreeCandidateInputOutput.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/DataTreeCandidateInputOutput.java @@ -170,7 +170,7 @@ public final class DataTreeCandidateInputOutput { break; case WRITE: out.writeByte(WRITE); - out.writeNormalizedNode(node.findDataAfter().orElseThrow()); + out.writeNormalizedNode(node.getDataAfter()); break; case UNMODIFIED: out.writeByte(UNMODIFIED); @@ -208,7 +208,7 @@ public final class DataTreeCandidateInputOutput { break; case WRITE: writer.writeByte(WRITE); - writer.writeNormalizedNode(node.findDataAfter().orElseThrow()); + writer.writeNormalizedNode(node.getDataAfter()); break; default: throwUnhandledNodeType(node); diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortIntegrationTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortIntegrationTest.java index 9a447677f6..5079fd811e 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortIntegrationTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/DataTreeCohortIntegrationTest.java @@ -28,7 +28,6 @@ import com.google.common.base.Throwables; import com.google.common.util.concurrent.FluentFuture; import com.typesafe.config.ConfigFactory; import java.util.Collection; -import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.junit.AfterClass; @@ -113,7 +112,7 @@ public class DataTreeCohortIntegrationTest { kit.testWriteTransaction(dataStore, TestModel.TEST_PATH, node); verify(cohort).canCommit(any(Object.class), any(EffectiveModelContext.class), candidateCapt.capture()); assertDataTreeCandidate((DOMDataTreeCandidate) candidateCapt.getValue().iterator().next(), TEST_ID, - ModificationType.WRITE, Optional.of(node), Optional.empty()); + ModificationType.WRITE, node, null); reset(cohort); doReturn(PostCanCommitStep.NOOP_SUCCESSFUL_FUTURE).when(cohort).canCommit(any(Object.class), @@ -200,7 +199,7 @@ public class DataTreeCohortIntegrationTest { verify(cohort).canCommit(any(Object.class), any(EffectiveModelContext.class), candidateCapture.capture()); assertDataTreeCandidate((DOMDataTreeCandidate) candidateCapture.getValue().iterator().next(), new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, optimaPath), ModificationType.WRITE, - Optional.of(optimaNode), Optional.empty()); + optimaNode, null); // Write replace the cars container with 2 new car entries. The cohort should get invoked with 3 // DOMDataTreeCandidates: once for each of the 2 new car entries (WRITE mod) and once for the deleted prior @@ -223,15 +222,15 @@ public class DataTreeCohortIntegrationTest { assertDataTreeCandidate(findCandidate(candidateCapture, sportagePath), new DOMDataTreeIdentifier( LogicalDatastoreType.CONFIGURATION, sportagePath), ModificationType.WRITE, - Optional.of(sportageNode), Optional.empty()); + sportageNode, null); assertDataTreeCandidate(findCandidate(candidateCapture, soulPath), new DOMDataTreeIdentifier( LogicalDatastoreType.CONFIGURATION, soulPath), ModificationType.WRITE, - Optional.of(soulNode), Optional.empty()); + soulNode, null); assertDataTreeCandidate(findCandidate(candidateCapture, optimaPath), new DOMDataTreeIdentifier( LogicalDatastoreType.CONFIGURATION, optimaPath), ModificationType.DELETE, - Optional.empty(), Optional.of(optimaNode)); + null, optimaNode); // Delete the cars container - cohort should be invoked for the 2 deleted car entries. @@ -248,11 +247,11 @@ public class DataTreeCohortIntegrationTest { assertDataTreeCandidate(findCandidate(candidateCapture, sportagePath), new DOMDataTreeIdentifier( LogicalDatastoreType.CONFIGURATION, sportagePath), ModificationType.DELETE, - Optional.empty(), Optional.of(sportageNode)); + null, sportageNode); assertDataTreeCandidate(findCandidate(candidateCapture, soulPath), new DOMDataTreeIdentifier( LogicalDatastoreType.CONFIGURATION, soulPath), ModificationType.DELETE, - Optional.empty(), Optional.of(soulNode)); + null, soulNode); } } @@ -307,23 +306,11 @@ public class DataTreeCohortIntegrationTest { private static void assertDataTreeCandidate(final DOMDataTreeCandidate candidate, final DOMDataTreeIdentifier expTreeId, final ModificationType expType, - final Optional expDataAfter, final Optional expDataBefore) { + final NormalizedNode expDataAfter, final NormalizedNode expDataBefore) { assertNotNull("Expected candidate for path " + expTreeId.getRootIdentifier(), candidate); assertEquals("rootPath", expTreeId, candidate.getRootPath()); assertEquals("modificationType", expType, candidate.getRootNode().modificationType()); - - assertEquals("dataAfter present", expDataAfter.isPresent(), - candidate.getRootNode().findDataAfter().isPresent()); - if (expDataAfter.isPresent()) { - assertEquals("dataAfter", expDataAfter.orElseThrow(), - candidate.getRootNode().findDataAfter().orElseThrow()); - } - - assertEquals("dataBefore present", expDataBefore.isPresent(), - candidate.getRootNode().findDataBefore().isPresent()); - if (expDataBefore.isPresent()) { - assertEquals("dataBefore", expDataBefore.orElseThrow(), - candidate.getRootNode().findDataBefore().orElseThrow()); - } + assertEquals("dataAfter", expDataAfter, candidate.getRootNode().dataAfter()); + assertEquals("dataBefore", expDataBefore, candidate.getRootNode().dataBefore()); } } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTest.java index f7ffeecab8..f900ec7c05 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardDataTreeTest.java @@ -538,7 +538,7 @@ public class ShardDataTreeTest extends AbstractTest { // Apply first candidate as a snapshot shardDataTree.applyRecoverySnapshot(new ShardSnapshotState( - new MetadataShardDataTreeSnapshot(first.getRootNode().findDataAfter().orElseThrow()), true)); + new MetadataShardDataTreeSnapshot(first.getRootNode().getDataAfter()), true)); // Apply the other two snapshots as transactions shardDataTree.applyRecoveryPayload(CommitTransactionPayload.create(nextTransactionId(), second, PayloadVersion.POTASSIUM)); diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java index 8683b8c825..8c2e0b5f29 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/CarEntryDataTreeCommitCohort.java @@ -47,19 +47,18 @@ public final class CarEntryDataTreeCommitCohort implements DOMDataTreeCommitCoho // Simple data validation - verify the year, if present, is >= 1990 final DataTreeCandidateNode rootNode = candidate.getRootNode(); - final Optional dataAfter = rootNode.getDataAfter(); + final NormalizedNode dataAfter = rootNode.dataAfter(); LOG.info("In canCommit: modificationType: {}, dataBefore: {}, dataAfter: {}", - rootNode.getModificationType(), rootNode.getDataBefore(), dataAfter); + rootNode.modificationType(), rootNode.dataBefore(), dataAfter); // Note: we don't want to process DELETE modifications but we don't need to explicitly check the // ModificationType because dataAfter will not be present. Also dataAfter *should* always contain a // MapEntryNode but we verify anyway. - if (dataAfter.isPresent()) { - final NormalizedNode normalizedNode = dataAfter.orElseThrow(); - Verify.verify(normalizedNode instanceof DataContainerNode, - "Expected type DataContainerNode, actual was %s", normalizedNode.getClass()); - DataContainerNode entryNode = (DataContainerNode) normalizedNode; + if (dataAfter != null) { + Verify.verify(dataAfter instanceof DataContainerNode, + "Expected type DataContainerNode, actual was %s", dataAfter.getClass()); + DataContainerNode entryNode = (DataContainerNode) dataAfter; final Optional possibleYear = entryNode.findChildByArg(YEAR_NODE_ID); if (possibleYear.isPresent()) { final Number year = (Number) possibleYear.orElseThrow().body(); diff --git a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java index b9cb831e75..5a1c90317e 100644 --- a/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java +++ b/opendaylight/md-sal/samples/clustering-test-app/provider/src/main/java/org/opendaylight/controller/clustering/it/provider/impl/IdIntsListener.java @@ -57,13 +57,12 @@ public final class IdIntsListener implements ClusteredDOMDataTreeChangeListener LOG.debug("Received data tree changed"); changes.forEach(change -> { - if (change.getRootNode().getDataAfter().isPresent()) { - LOG.trace("Received change, data before: {}, data after: {}", - change.getRootNode().getDataBefore().isPresent() - ? change.getRootNode().getDataBefore().orElseThrow() : "", - change.getRootNode().getDataAfter().orElseThrow()); - - localCopy = change.getRootNode().getDataAfter().orElseThrow(); + final var root = change.getRootNode(); + final var after = root.dataAfter(); + if (after != null) { + final var before = root.dataBefore(); + LOG.trace("Received change, data before: {}, data after: {}", before != null ? before : "", after); + localCopy = after; } else { LOG.warn("getDataAfter() is missing from notification. change: {}", change); } -- 2.36.6