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=dd27b4e629d2b593bc37e717ad52446e6b769eb2;hpb=ba87ed620f13823ee798fda4241a2c1db37e2f33;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 dd27b4e629..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; @@ -19,10 +20,11 @@ import java.io.ObjectOutput; import java.io.Serializable; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.Map.Entry; -import java.util.Optional; 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,11 +33,16 @@ import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; * @author Robert Varga */ @Beta -public final class CommitTransactionPayload extends Payload implements DataTreeCandidateSupplier, Serializable { +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 } @@ -51,7 +58,7 @@ public final class CommitTransactionPayload extends Payload implements DataTreeC } @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); @@ -71,17 +78,27 @@ public final class CommitTransactionPayload extends Payload implements DataTreeC } 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); } - @Override - public Entry, DataTreeCandidate> getCandidate() throws IOException { + @VisibleForTesting + public static CommitTransactionPayload create(final TransactionIdentifier transactionId, + final DataTreeCandidate candidate) throws IOException { + return create(transactionId, candidate, 512); + } + + public Entry getCandidate() throws IOException { final DataInput in = ByteStreams.newDataInput(serialized); - return new SimpleImmutableEntry<>(Optional.of(TransactionIdentifier.readFrom(in)), + return new SimpleImmutableEntry<>(TransactionIdentifier.readFrom(in), DataTreeCandidateInputOutput.readDataTreeCandidate(in)); }