From 09c1e67598d7a0dc7da7bebee358fbc96d84680a Mon Sep 17 00:00:00 2001 From: Jon Meredith Date: Fri, 21 Apr 2023 15:24:58 -0600 Subject: [PATCH] Incremental repairs fail on mixed IPv4/v6 addresses serializing SyncRequest patch by Jon Meredith; reviewed by Caleb Rackliffe for CASSANDRA-18474 --- CHANGES.txt | 1 + .../org/apache/cassandra/repair/messages/SyncRequest.java | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 35a0fc16d6..d4b305e7f8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.0.10 + * Incremental repairs fail on mixed IPv4/v6 addresses serializing SyncRequest (CASSANDRA-18474) * Deadlock updating sstable metadata if disk boundaries need reloading (CASSANDRA-18443) * Fix nested selection of reversed collections (CASSANDRA-17913) diff --git a/src/java/org/apache/cassandra/repair/messages/SyncRequest.java b/src/java/org/apache/cassandra/repair/messages/SyncRequest.java index 9886abc6fe..a5579add83 100644 --- a/src/java/org/apache/cassandra/repair/messages/SyncRequest.java +++ b/src/java/org/apache/cassandra/repair/messages/SyncRequest.java @@ -111,7 +111,7 @@ public class SyncRequest extends RepairMessage public SyncRequest deserialize(DataInputPlus in, int version) throws IOException { RepairJobDesc desc = RepairJobDesc.serializer.deserialize(in, version); - InetAddressAndPort owner = inetAddressAndPortSerializer.deserialize(in, version); + InetAddressAndPort initiator = inetAddressAndPortSerializer.deserialize(in, version); InetAddressAndPort src = inetAddressAndPortSerializer.deserialize(in, version); InetAddressAndPort dst = inetAddressAndPortSerializer.deserialize(in, version); int rangesCount = in.readInt(); @@ -120,13 +120,15 @@ public class SyncRequest extends RepairMessage ranges.add((Range) AbstractBounds.tokenSerializer.deserialize(in, IPartitioner.global(), version)); PreviewKind previewKind = PreviewKind.deserialize(in.readInt()); boolean asymmetric = in.readBoolean(); - return new SyncRequest(desc, owner, src, dst, ranges, previewKind, asymmetric); + return new SyncRequest(desc, initiator, src, dst, ranges, previewKind, asymmetric); } public long serializedSize(SyncRequest message, int version) { long size = RepairJobDesc.serializer.serializedSize(message.desc, version); - size += 3 * inetAddressAndPortSerializer.serializedSize(message.initiator, version); + size += inetAddressAndPortSerializer.serializedSize(message.initiator, version); + size += inetAddressAndPortSerializer.serializedSize(message.src, version); + size += inetAddressAndPortSerializer.serializedSize(message.dst, version); size += TypeSizes.sizeof(message.ranges.size()); for (Range range : message.ranges) size += AbstractBounds.tokenSerializer.serializedSize(range, version);