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%2Fpersisted%2FCommitTransactionPayload.java;h=ea5fb532557517e568abcf41fb28118b6a0f648f;hb=bbc0684829755cb5ec161c7c3b7c6e83c0baf86e;hp=c348727cf89f4136a8e00ec1719621a1154e5d9c;hpb=6276a65120a674b545ea787a5e1d9311bcdbf2af;p=controller.git diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayload.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayload.java index c348727cf8..ea5fb53255 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayload.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/CommitTransactionPayload.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.cluster.datastore.persisted; import com.google.common.annotations.Beta; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; @@ -22,6 +23,8 @@ import java.util.Map.Entry; import org.opendaylight.controller.cluster.access.concepts.TransactionIdentifier; import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload; import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Payload persisted when a transaction commits. It contains the transaction identifier and the @@ -31,10 +34,15 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; */ @Beta public final class CommitTransactionPayload extends Payload implements Serializable { + private static final Logger LOG = LoggerFactory.getLogger(CommitTransactionPayload.class); + private static final class Proxy implements Externalizable { private static final long serialVersionUID = 1L; private byte[] serialized; + // checkstyle flags the public modifier as redundant which really doesn't make sense since it clearly isn't + // redundant. It is explicitly needed for Java serialization to be able to create instances via reflection. + @SuppressWarnings("checkstyle:RedundantModifier") public Proxy() { // For Externalizable } @@ -50,7 +58,7 @@ public final class CommitTransactionPayload extends Payload implements Serializa } @Override - public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { + public void readExternal(final ObjectInput in) throws IOException { final int length = in.readInt(); serialized = new byte[length]; in.readFully(serialized); @@ -70,11 +78,22 @@ public final class CommitTransactionPayload extends Payload implements Serializa } public static CommitTransactionPayload create(final TransactionIdentifier transactionId, - final DataTreeCandidate candidate) throws IOException { - final ByteArrayDataOutput out = ByteStreams.newDataOutput(); + final DataTreeCandidate candidate, final int initialSerializedBufferCapacity) throws IOException { + final ByteArrayDataOutput out = ByteStreams.newDataOutput(initialSerializedBufferCapacity); transactionId.writeTo(out); DataTreeCandidateInputOutput.writeDataTreeCandidate(out, candidate); - return new CommitTransactionPayload(out.toByteArray()); + final byte[] serialized = out.toByteArray(); + + LOG.debug("Initial buffer capacity {}, actual serialized size {}", + initialSerializedBufferCapacity, serialized.length); + + return new CommitTransactionPayload(serialized); + } + + @VisibleForTesting + public static CommitTransactionPayload create(final TransactionIdentifier transactionId, + final DataTreeCandidate candidate) throws IOException { + return create(transactionId, candidate, 512); } public Entry getCandidate() throws IOException {