use of org.opendaylight.controller.cluster.datastore.util.AbstractDataTreeModificationCursor in project controller by opendaylight.
the class LocalReadWriteProxyTransaction method flushState.
@Override
Optional<ModifyTransactionRequest> flushState() {
final ModifyTransactionRequestBuilder b = new ModifyTransactionRequestBuilder(getIdentifier(), localActor());
b.setSequence(0);
sealedModification.applyToCursor(new AbstractDataTreeModificationCursor() {
@Override
public void write(final PathArgument child, final NormalizedNode<?, ?> data) {
b.addModification(new TransactionWrite(current().node(child), data));
}
@Override
public void merge(final PathArgument child, final NormalizedNode<?, ?> data) {
b.addModification(new TransactionMerge(current().node(child), data));
}
@Override
public void delete(final PathArgument child) {
b.addModification(new TransactionDelete(current().node(child)));
}
});
return Optional.of(b.build());
}
use of org.opendaylight.controller.cluster.datastore.util.AbstractDataTreeModificationCursor in project controller by opendaylight.
the class RemoteProxyTransaction method replayLocalCommitRequest.
private void replayLocalCommitRequest(final CommitLocalTransactionRequest request, final Consumer<Response<?, ?>> callback, final long enqueuedTicks) {
final DataTreeModification mod = request.getModification();
final Optional<Long> optTicks = Optional.of(Long.valueOf(enqueuedTicks));
mod.applyToCursor(new AbstractDataTreeModificationCursor() {
@Override
public void write(final PathArgument child, final NormalizedNode<?, ?> data) {
appendModification(new TransactionWrite(current().node(child), data), optTicks);
}
@Override
public void merge(final PathArgument child, final NormalizedNode<?, ?> data) {
appendModification(new TransactionMerge(current().node(child), data), optTicks);
}
@Override
public void delete(final PathArgument child) {
appendModification(new TransactionDelete(current().node(child)), optTicks);
}
});
enqueueRequest(commitRequest(request.isCoordinated()), callback, enqueuedTicks);
}
use of org.opendaylight.controller.cluster.datastore.util.AbstractDataTreeModificationCursor in project controller by opendaylight.
the class LocalProxyTransaction method forwardToRemote.
@Override
final void forwardToRemote(final RemoteProxyTransaction successor, final TransactionRequest<?> request, final Consumer<Response<?, ?>> callback) {
if (request instanceof CommitLocalTransactionRequest) {
final CommitLocalTransactionRequest req = (CommitLocalTransactionRequest) request;
final DataTreeModification mod = req.getModification();
LOG.debug("Applying modification {} to successor {}", mod, successor);
mod.applyToCursor(new AbstractDataTreeModificationCursor() {
@Override
public void write(final PathArgument child, final NormalizedNode<?, ?> data) {
successor.write(current().node(child), data);
}
@Override
public void merge(final PathArgument child, final NormalizedNode<?, ?> data) {
successor.merge(current().node(child), data);
}
@Override
public void delete(final PathArgument child) {
successor.delete(current().node(child));
}
});
successor.sealOnly();
final ModifyTransactionRequest successorReq = successor.commitRequest(req.isCoordinated());
successor.sendRequest(successorReq, callback);
} else if (request instanceof AbortLocalTransactionRequest) {
LOG.debug("Forwarding abort {} to successor {}", request, successor);
successor.abort();
} else if (request instanceof TransactionPurgeRequest) {
LOG.debug("Forwarding purge {} to successor {}", request, successor);
successor.enqueuePurge(callback);
} else if (request instanceof ModifyTransactionRequest) {
successor.handleForwardedRequest(request, callback);
} else {
throwUnhandledRequest(request);
}
}
Aggregations