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=c698ccf8d22e158fc5b74c1b2b2fd9958560912a;hp=7e27f86f456f4d72c171c36b5c70731fbdb1efad;hb=3402cfce32b05957219e54754dd7ca5b0a54cd0e;hpb=26b290518d362a85311c5b5591e3ef72e0772cf2 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 7e27f86f45..c698ccf8d2 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 @@ -10,33 +10,28 @@ package org.opendaylight.controller.cluster.datastore.persisted; import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects; -import com.google.common.base.Verify; -import com.google.common.collect.ImmutableMap; -import com.google.common.primitives.UnsignedLong; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; 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 ImmutableMap closedTransactions; + private final @NonNull UnsignedLongBitmap closedTransactions; private final long historyId; private final long cookie; private final boolean closed; public FrontendHistoryMetadata(final long historyId, final long cookie, final boolean closed, - final Map closedTransactions, final ImmutableUnsignedLongSet purgedTransactions) { + final UnsignedLongBitmap closedTransactions, final ImmutableUnsignedLongSet purgedTransactions) { this.historyId = historyId; this.cookie = cookie; this.closed = closed; - this.closedTransactions = ImmutableMap.copyOf(closedTransactions); + this.closedTransactions = requireNonNull(closedTransactions); this.purgedTransactions = requireNonNull(purgedTransactions); } @@ -52,7 +47,7 @@ public final class FrontendHistoryMetadata implements WritableObject { return closed; } - public ImmutableMap getClosedTransactions() { + public UnsignedLongBitmap getClosedTransactions() { return closedTransactions; } @@ -65,45 +60,43 @@ public final class FrontendHistoryMetadata implements WritableObject { WritableObjects.writeLongs(out, historyId, cookie); out.writeBoolean(closed); + final int closedSize = closedTransactions.size(); final int purgedSize = purgedTransactions.size(); - WritableObjects.writeLongs(out, closedTransactions.size(), purgedSize); - for (Entry e : closedTransactions.entrySet()) { - WritableObjects.writeLong(out, e.getKey().longValue()); - out.writeBoolean(e.getValue()); - } + WritableObjects.writeLongs(out, closedSize, purgedSize); + closedTransactions.writeEntriesTo(out, closedSize); purgedTransactions.writeRangesTo(out, purgedSize); } public static FrontendHistoryMetadata readFrom(final DataInput in) throws IOException { - byte header = WritableObjects.readLongHeader(in); - final long historyId = WritableObjects.readFirstLong(in, header); - final long cookie = WritableObjects.readSecondLong(in, header); + 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(); - header = WritableObjects.readLongHeader(in); - long ls = WritableObjects.readFirstLong(in, header); - Verify.verify(ls >= 0 && ls <= Integer.MAX_VALUE); - final int csize = (int) ls; - - ls = WritableObjects.readSecondLong(in, header); - Verify.verify(ls >= 0 && ls <= Integer.MAX_VALUE); - final int psize = (int) ls; - - final Map closedTransactions = new HashMap<>(csize); - for (int i = 0; i < csize; ++i) { - final UnsignedLong key = UnsignedLong.fromLongBits(WritableObjects.readLong(in)); - final Boolean value = in.readBoolean(); - closedTransactions.put(key, value); - } - final var purgedTransactions = ImmutableUnsignedLongSet.readFrom(in, psize); + 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, closedTransactions, purgedTransactions); + return new FrontendHistoryMetadata(historyId, cookie, closed, + UnsignedLongBitmap.readFrom(in, csize), + ImmutableUnsignedLongSet.readFrom(in, psize)); } @Override public String toString() { - return MoreObjects.toStringHelper(FrontendHistoryMetadata.class).add("historyId", historyId) - .add("cookie", cookie).add("closed", closed).add("closedTransactions", closedTransactions) - .add("purgedTransactions", purgedTransactions).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; } }