import org.opendaylight.controller.cluster.datastore.DataTreeCohortActorRegistry.CohortRegistryCommand;
import org.opendaylight.controller.cluster.datastore.ShardDataTreeCohort.State;
import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shard.ShardStats;
+import org.opendaylight.controller.cluster.datastore.node.utils.transformer.ReusableNormalizedNodePruner;
import org.opendaylight.controller.cluster.datastore.persisted.AbortTransactionPayload;
import org.opendaylight.controller.cluster.datastore.persisted.AbstractIdentifiablePayload;
import org.opendaylight.controller.cluster.datastore.persisted.CloseLocalHistoryPayload;
}
}
- final DataTreeModification mod = wrapper.apply(dataTree.takeSnapshot().newModification());
+ final DataTreeModification unwrapped = dataTree.takeSnapshot().newModification();
+ final DataTreeModification mod = wrapper.apply(unwrapped);
// delete everything first
mod.delete(YangInstanceIdentifier.empty());
}
mod.ready();
- final DataTreeModification unwrapped = unwrap(mod);
dataTree.validate(unwrapped);
DataTreeCandidateTip candidate = dataTree.prepare(unwrapped);
dataTree.commit(candidate);
}
private PruningDataTreeModification wrapWithPruning(final DataTreeModification delegate) {
- return new PruningDataTreeModification(delegate, dataTree, dataSchemaContext);
- }
-
- private static DataTreeModification unwrap(final DataTreeModification modification) {
- if (modification instanceof PruningDataTreeModification) {
- return ((PruningDataTreeModification)modification).delegate();
- }
- return modification;
+ return new PruningDataTreeModification(delegate, dataTree,
+ // TODO: we should be able to reuse the pruner, provided we are not reentrant
+ ReusableNormalizedNodePruner.forDataSchemaContext(dataSchemaContext));
}
/**
@SuppressWarnings("checkstyle:IllegalCatch")
private void applyRecoveryCandidate(final CommitTransactionPayload payload) throws IOException {
final Entry<TransactionIdentifier, DataTreeCandidate> entry = payload.getCandidate();
-
- final PruningDataTreeModification mod = wrapWithPruning(dataTree.takeSnapshot().newModification());
+ final DataTreeModification unwrapped = dataTree.takeSnapshot().newModification();
+ final PruningDataTreeModification mod = wrapWithPruning(unwrapped);
DataTreeCandidates.applyToModification(mod, entry.getValue());
mod.ready();
- final DataTreeModification unwrapped = mod.delegate();
LOG.trace("{}: Applying recovery modification {}", logContext, unwrapped);
try {
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModificationCursor;
import org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaValidationFailedException;
-import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private DataTreeModification delegate;
- private PruningDataTreeModification(final DataTreeModification delegate, final DataTree dataTree,
+ public PruningDataTreeModification(final DataTreeModification delegate, final DataTree dataTree,
final ReusableNormalizedNodePruner pruner) {
this.delegate = requireNonNull(delegate);
this.dataTree = requireNonNull(dataTree);
this.pruner = requireNonNull(pruner);
}
- public PruningDataTreeModification(final DataTreeModification delegate, final DataTree dataTree,
- final DataSchemaContextTree dataSchemaContext) {
- this(delegate, dataTree, ReusableNormalizedNodePruner.forDataSchemaContext(dataSchemaContext));
- }
-
@Override
- public DataTreeModification delegate() {
+ protected DataTreeModification delegate() {
return delegate;
}
import org.mockito.junit.MockitoJUnitRunner;
import org.opendaylight.controller.cluster.datastore.Shard;
import org.opendaylight.controller.cluster.datastore.ShardDataTree;
+import org.opendaylight.controller.cluster.datastore.node.utils.transformer.ReusableNormalizedNodePruner;
import org.opendaylight.controller.md.cluster.datastore.model.CarsModel;
import org.opendaylight.controller.md.cluster.datastore.model.PeopleModel;
import org.opendaylight.controller.md.cluster.datastore.model.SchemaContextHelper;
}
});
- pruningDataTreeModification = new PruningDataTreeModification(proxyModification, dataTree, CONTEXT_TREE);
+ pruningDataTreeModification = new PruningDataTreeModification(proxyModification, dataTree,
+ // Cannot reuse with parallel tests
+ ReusableNormalizedNodePruner.forDataSchemaContext(CONTEXT_TREE));
}
@Test