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%2Fpersisted%2FFrontendHistoryMetadata.java;h=2cdda9f54716b41924e94a59cfb73c18110a1f12;hp=2a52eccb94e84c1035590004b9a051a3b57c15d2;hb=HEAD;hpb=edd61d79da614388134b0e0a618010c91e9c91bd diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/FrontendHistoryMetadata.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/FrontendHistoryMetadata.java index 2a52eccb94..a27b2c0311 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/FrontendHistoryMetadata.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/persisted/FrontendHistoryMetadata.java @@ -7,25 +7,32 @@ */ package org.opendaylight.controller.cluster.datastore.persisted; +import static java.util.Objects.requireNonNull; + import com.google.common.base.MoreObjects; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.controller.cluster.datastore.utils.ImmutableUnsignedLongSet; +import org.opendaylight.controller.cluster.datastore.utils.UnsignedLongBitmap; import org.opendaylight.yangtools.concepts.WritableObject; import org.opendaylight.yangtools.concepts.WritableObjects; public final class FrontendHistoryMetadata implements WritableObject { + private final @NonNull ImmutableUnsignedLongSet purgedTransactions; + private final @NonNull UnsignedLongBitmap closedTransactions; private final long historyId; private final long cookie; - private final long nextTransaction; private final boolean closed; - public FrontendHistoryMetadata(final long historyId, final long cookie, final long nextTransaction, - final boolean closed) { + public FrontendHistoryMetadata(final long historyId, final long cookie, final boolean closed, + final UnsignedLongBitmap closedTransactions, final ImmutableUnsignedLongSet purgedTransactions) { this.historyId = historyId; this.cookie = cookie; - this.nextTransaction = nextTransaction; this.closed = closed; + this.closedTransactions = requireNonNull(closedTransactions); + this.purgedTransactions = requireNonNull(purgedTransactions); } public long getHistoryId() { @@ -36,34 +43,60 @@ public final class FrontendHistoryMetadata implements WritableObject { return cookie; } - public long getNextTransaction() { - return nextTransaction; - } - public boolean isClosed() { return closed; } + public UnsignedLongBitmap getClosedTransactions() { + return closedTransactions; + } + + public ImmutableUnsignedLongSet getPurgedTransactions() { + return purgedTransactions; + } + @Override public void writeTo(final DataOutput out) throws IOException { WritableObjects.writeLongs(out, historyId, cookie); - WritableObjects.writeLong(out, nextTransaction); out.writeBoolean(closed); + + final int closedSize = closedTransactions.size(); + final int purgedSize = purgedTransactions.rangeSize(); + WritableObjects.writeLongs(out, closedSize, purgedSize); + closedTransactions.writeEntriesTo(out, closedSize); + purgedTransactions.writeRangesTo(out, purgedSize); } public static FrontendHistoryMetadata readFrom(final DataInput in) throws IOException { - final byte header = WritableObjects.readLongHeader(in); - final long historyId = WritableObjects.readFirstLong(in, header); - final long cookie = WritableObjects.readSecondLong(in, header); - final long nextTransaction = WritableObjects.readLong(in); + final byte firstHdr = WritableObjects.readLongHeader(in); + final long historyId = WritableObjects.readFirstLong(in, firstHdr); + final long cookie = WritableObjects.readSecondLong(in, firstHdr); final boolean closed = in.readBoolean(); - return new FrontendHistoryMetadata(historyId, cookie, nextTransaction, closed); + final byte secondHdr = WritableObjects.readLongHeader(in); + final int csize = verifySize(WritableObjects.readFirstLong(in, secondHdr)); + final int psize = verifySize(WritableObjects.readSecondLong(in, secondHdr)); + + return new FrontendHistoryMetadata(historyId, cookie, closed, + UnsignedLongBitmap.readFrom(in, csize), + ImmutableUnsignedLongSet.readFrom(in, psize)); } @Override public String toString() { - return MoreObjects.toStringHelper(FrontendHistoryMetadata.class).add("historiId", historyId) - .add("cookie", cookie).add("nextTransaction", nextTransaction).add("closed", closed).toString(); + return MoreObjects.toStringHelper(FrontendHistoryMetadata.class) + .add("historyId", historyId) + .add("cookie", cookie) + .add("closed", closed) + .add("closedTransactions", closedTransactions) + .add("purgedTransactions", purgedTransactions) + .toString(); + } + + private static int verifySize(final long size) throws IOException { + if (size < 0 || size > Integer.MAX_VALUE) { + throw new IOException("Invalid size " + size); + } + return (int) size; } }