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;
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
*/
@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;
}
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.info("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<TransactionIdentifier, DataTreeCandidate> getCandidate() throws IOException {