From 266986b5a2cc7672bc5be57084b483c9fb4af625 Mon Sep 17 00:00:00 2001 From: Benedict Elliott Smith Date: Wed, 7 Feb 2024 15:57:54 +0000 Subject: [PATCH] Fix (de)serialization of WaitingOn into cache --- .../cassandra/service/accord/AccordKeyspace.java | 4 +--- .../accord/serializers/WaitingOnSerializer.java | 16 +++++++++++----- 2 files changed, 12 insertions(+), 8 deletions(-) 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); } }