X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fmodification%2FMutableCompositeModification.java;h=a9ffe9b1ba877c40718a946df5ecf6bf591d4ca2;hp=d4abc0452e34d845d2c763716e9c29a3b4662d9b;hb=437beb82ffebfa9d11bbed88a2800d226bfbc66f;hpb=a2b838f96589b502578fa4e15cef2769f886a378 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/MutableCompositeModification.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/MutableCompositeModification.java index d4abc0452e..a9ffe9b1ba 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/MutableCompositeModification.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/modification/MutableCompositeModification.java @@ -18,11 +18,11 @@ import java.util.Collections; import java.util.List; import org.opendaylight.controller.cluster.datastore.DataStoreVersions; import org.opendaylight.controller.cluster.datastore.messages.VersionedExternalizableMessage; -import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataInput; -import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeDataOutput; -import org.opendaylight.controller.cluster.datastore.node.utils.stream.NormalizedNodeInputOutput; import org.opendaylight.mdsal.dom.spi.store.DOMStoreWriteTransaction; +import org.opendaylight.yangtools.yang.data.api.schema.stream.ReusableStreamReceiver; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; +import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataInput; +import org.opendaylight.yangtools.yang.data.codec.binfmt.NormalizedNodeDataOutput; import org.opendaylight.yangtools.yang.data.impl.schema.ReusableImmutableNormalizedNodeStreamWriter; /** @@ -88,30 +88,12 @@ public class MutableCompositeModification extends VersionedExternalizableMessage @Override public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { super.readExternal(in); - - int size = in.readInt(); + final int size = in.readInt(); if (size > 0) { - final NormalizedNodeDataInput input = NormalizedNodeInputOutput.newDataInputWithoutValidation(in); - final ReusableImmutableNormalizedNodeStreamWriter writer = - ReusableImmutableNormalizedNodeStreamWriter.create(); - - for (int i = 0; i < size; i++) { - byte type = in.readByte(); - switch (type) { - case Modification.WRITE: - modifications.add(WriteModification.fromStream(input, getVersion(), writer)); - break; - - case Modification.MERGE: - modifications.add(MergeModification.fromStream(input, getVersion(), writer)); - break; - - case Modification.DELETE: - modifications.add(DeleteModification.fromStream(input, getVersion())); - break; - default: - break; - } + if (getVersion() >= DataStoreVersions.PHOSPHORUS_VERSION) { + readExternalModern(NormalizedNodeDataInput.newDataInput(in), size); + } else { + readExternalLegacy(in, size); } } } @@ -119,15 +101,72 @@ public class MutableCompositeModification extends VersionedExternalizableMessage @Override public void writeExternal(final ObjectOutput out) throws IOException { super.writeExternal(out); - final int size = modifications.size(); out.writeInt(size); if (size > 0) { - try (NormalizedNodeDataOutput stream = NormalizedNodeInputOutput.newDataOutput(out, getStreamVersion())) { - for (Modification mod : modifications) { - out.writeByte(mod.getType()); - mod.writeTo(stream); - } + if (getVersion() >= DataStoreVersions.PHOSPHORUS_VERSION) { + writeExternalModern(out); + } else { + writeExternalLegacy(out); + } + } + } + + private void readExternalLegacy(final ObjectInput in, final int size) throws IOException { + final NormalizedNodeDataInput input = NormalizedNodeDataInput.newDataInputWithoutValidation(in); + final ReusableStreamReceiver receiver = ReusableImmutableNormalizedNodeStreamWriter.create(); + for (int i = 0; i < size; i++) { + final byte type = in.readByte(); + switch (type) { + case Modification.WRITE: + modifications.add(WriteModification.fromStream(input, getVersion(), receiver)); + break; + case Modification.MERGE: + modifications.add(MergeModification.fromStream(input, getVersion(), receiver)); + break; + case Modification.DELETE: + modifications.add(DeleteModification.fromStream(input, getVersion())); + break; + default: + break; + } + } + } + + private void writeExternalLegacy(final ObjectOutput out) throws IOException { + try (NormalizedNodeDataOutput stream = getStreamVersion().newDataOutput(out)) { + for (Modification mod : modifications) { + out.writeByte(mod.getType()); + mod.writeTo(stream); + } + } + } + + private void readExternalModern(final NormalizedNodeDataInput in, final int size) throws IOException { + final ReusableStreamReceiver receiver = ReusableImmutableNormalizedNodeStreamWriter.create(); + for (int i = 0; i < size; i++) { + final byte type = in.readByte(); + switch (type) { + case Modification.WRITE: + modifications.add(WriteModification.fromStream(in, getVersion(), receiver)); + break; + case Modification.MERGE: + modifications.add(MergeModification.fromStream(in, getVersion(), receiver)); + break; + case Modification.DELETE: + modifications.add(DeleteModification.fromStream(in, getVersion())); + break; + default: + break; + } + } + } + + private void writeExternalModern(final ObjectOutput out) throws IOException { + try (NormalizedNodeDataOutput stream = getStreamVersion().newDataOutput(out)) { + for (Modification mod : modifications) { + stream.writeByte(mod.getType()); + mod.writeTo(stream); } } }