X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FDataTreeCandidatePayload.java;h=bc3d7b02f8dda76d57f91a57ad7d30b3e98bc671;hb=2eddbcc5db186af5b5feacfe5d7056e2f3dccd38;hp=54167b2011d0585645f2633e6169ab1ebde8cbc1;hpb=cac7138ddd81d1cc801d4b6cd9bc4372e0a8ddd3;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCandidatePayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCandidatePayload.java index 54167b2011..bc3d7b02f8 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCandidatePayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DataTreeCandidatePayload.java @@ -32,6 +32,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNode; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidateNodes; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidates; +import org.opendaylight.yangtools.yang.data.api.schema.tree.ModificationType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,6 +43,8 @@ final class DataTreeCandidatePayload extends Payload implements Externalizable { private static final byte SUBTREE_MODIFIED = 1; private static final byte UNMODIFIED = 2; private static final byte WRITE = 3; + private static final byte APPEARED = 4; + private static final byte DISAPPEARED = 5; private transient byte[] serialized; @@ -64,10 +67,20 @@ final class DataTreeCandidatePayload extends Payload implements Externalizable { private static void writeNode(final NormalizedNodeOutputStreamWriter writer, final DataOutput out, final DataTreeCandidateNode node) throws IOException { switch (node.getModificationType()) { + case APPEARED: + out.writeByte(APPEARED); + writer.writePathArgument(node.getIdentifier()); + writeChildren(writer, out, node.getChildNodes()); + break; case DELETE: out.writeByte(DELETE); writer.writePathArgument(node.getIdentifier()); break; + case DISAPPEARED: + out.writeByte(DISAPPEARED); + writer.writePathArgument(node.getIdentifier()); + writeChildren(writer, out, node.getChildNodes()); + break; case SUBTREE_MODIFIED: out.writeByte(SUBTREE_MODIFIED); writer.writePathArgument(node.getIdentifier()); @@ -78,7 +91,8 @@ final class DataTreeCandidatePayload extends Payload implements Externalizable { writer.writeNormalizedNode(node.getDataAfter().get()); break; case UNMODIFIED: - throw new IllegalArgumentException("Unmodified candidate should never be in the payload"); + out.writeByte(UNMODIFIED); + break; default: throw new IllegalArgumentException("Unhandled node type " + node.getModificationType()); } @@ -91,9 +105,17 @@ final class DataTreeCandidatePayload extends Payload implements Externalizable { final DataTreeCandidateNode node = candidate.getRootNode(); switch (node.getModificationType()) { + case APPEARED: + out.writeByte(APPEARED); + writeChildren(writer, out, node.getChildNodes()); + break; case DELETE: out.writeByte(DELETE); break; + case DISAPPEARED: + out.writeByte(DISAPPEARED); + writeChildren(writer, out, node.getChildNodes()); + break; case SUBTREE_MODIFIED: out.writeByte(SUBTREE_MODIFIED); writeChildren(writer, out, node.getChildNodes()); @@ -134,21 +156,31 @@ final class DataTreeCandidatePayload extends Payload implements Externalizable { } } + private static DataTreeCandidateNode readModifiedNode(final ModificationType type, + final NormalizedNodeInputStreamReader reader, final DataInput in) throws IOException { + + final PathArgument identifier = reader.readPathArgument(); + final Collection children = readChildren(reader, in); + if (children.isEmpty()) { + LOG.debug("Modified node {} does not have any children, not instantiating it", identifier); + return null; + } else { + return ModifiedDataTreeCandidateNode.create(identifier, type, children); + } + } + private static DataTreeCandidateNode readNode(final NormalizedNodeInputStreamReader reader, final DataInput in) throws IOException { final byte type = in.readByte(); switch (type) { + case APPEARED: + return readModifiedNode(ModificationType.APPEARED, reader, in); case DELETE: return DeletedDataTreeCandidateNode.create(reader.readPathArgument()); + case DISAPPEARED: + return readModifiedNode(ModificationType.DISAPPEARED, reader, in); case SUBTREE_MODIFIED: - final PathArgument identifier = reader.readPathArgument(); - final Collection children = readChildren(reader, in); - if (children.isEmpty()) { - LOG.debug("Modified node {} does not have any children, not instantiating it", identifier); - return null; - } else { - return ModifiedDataTreeCandidateNode.create(identifier, children); - } + return readModifiedNode(ModificationType.SUBTREE_MODIFIED, reader, in); case UNMODIFIED: return null; case WRITE: