diff --git a/src/java/org/apache/cassandra/service/accord/AccordKeyspace.java b/src/java/org/apache/cassandra/service/accord/AccordKeyspace.java index ddcaed5a0d..c3d47ce710 100644 --- a/src/java/org/apache/cassandra/service/accord/AccordKeyspace.java +++ b/src/java/org/apache/cassandra/service/accord/AccordKeyspace.java @@ -823,8 +823,6 @@ public class AccordKeyspace addCellIfModified(CommandsColumns.promised_ballot, Command::promised, AccordKeyspace::serializeTimestamp, builder, timestampMicros, nowInSeconds, original, command); addCellIfModified(CommandsColumns.accepted_ballot, Command::acceptedOrCommitted, AccordKeyspace::serializeTimestamp, builder, timestampMicros, nowInSeconds, original, command); - // TODO review this is just to work around Truncated not being committed but having a status after committed - // so status claims it is committed. if (command.isStable() && !command.isTruncated()) { Command.Committed committed = command.asCommitted(); @@ -1292,7 +1290,7 @@ public class AccordKeyspace try { - return WaitingOnSerializer.deserialize(deps, new DataInputBuffer(bytes, false)); + return WaitingOnSerializer.deserialize(deps, bytes); } catch (IOException e) { diff --git a/src/java/org/apache/cassandra/service/accord/serializers/WaitingOnSerializer.java b/src/java/org/apache/cassandra/service/accord/serializers/WaitingOnSerializer.java index 00735ff7e3..930807d7f0 100644 --- a/src/java/org/apache/cassandra/service/accord/serializers/WaitingOnSerializer.java +++ b/src/java/org/apache/cassandra/service/accord/serializers/WaitingOnSerializer.java @@ -102,17 +102,23 @@ public class WaitingOnSerializer public static WaitingOn deserialize(Deps deps, ByteBuffer in) throws IOException { int length = (deps.txnIdCount() + 63) / 64; - ImmutableBitSet waitingOnCommit = deserialize(length, in); - ImmutableBitSet waitingOnApply = deserialize(length, in); - ImmutableBitSet appliedOrInvalidated = deserialize(length, in); + int position = in.position(); + ImmutableBitSet waitingOnCommit = deserialize(position, length, in); + position += length*8; + ImmutableBitSet waitingOnApply = deserialize(position, length, in); + position += length*8; + ImmutableBitSet appliedOrInvalidated = deserialize(position, length, in); return new WaitingOn(deps, waitingOnCommit, waitingOnApply, appliedOrInvalidated); } - private static ImmutableBitSet deserialize(int length, ByteBuffer in) + private static ImmutableBitSet deserialize(int position, int length, ByteBuffer in) { long[] bits = new long[length]; for (int i = 0 ; i < length ; ++i) - bits[i] = in.getLong(); + { + bits[i] = in.getLong(position); + position += 8; + } return ImmutableBitSet.SerializationSupport.construct(bits); } }