This is an automated email from the ASF dual-hosted git repository.

marcuse pushed a commit to branch cassandra-3.11
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/cassandra-3.11 by this push:
     new cb37035  Avoid sending CDC column if not enabled
cb37035 is described below

commit cb370350a7520cabf87fc88a2ff37b068fb8e22d
Author: Marcus Eriksson <[email protected]>
AuthorDate: Mon Jun 28 13:12:27 2021 +0200

    Avoid sending CDC column if not enabled
    
    Patch by marcuse; reviewed by Aleksei Zotov, Benjamin Lerer, Michael Semb 
Wever for CASSANDRA-16770
---
 CHANGES.txt                                                       | 1 +
 .../apache/cassandra/db/partitions/AbstractBTreePartition.java    | 6 +++++-
 src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java  | 8 ++++++++
 src/java/org/apache/cassandra/schema/SchemaKeyspace.java          | 8 ++++----
 4 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 89610c0..9ce666b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
 3.11.12
  * Reduce thread contention in CommitLogSegment and HintsBuffer 
(CASSANDRA-16072)
+ * Avoid sending CDC column if not enabled (CASSANDRA-16770)
 Merged from 3.0:
  * Handle properly UnsatisfiedLinkError in NativeLibrary#getProcessID() 
(CASSANDRA-16578)
  * Remove mutation data from error log message (CASSANDRA-16817)
diff --git 
a/src/java/org/apache/cassandra/db/partitions/AbstractBTreePartition.java 
b/src/java/org/apache/cassandra/db/partitions/AbstractBTreePartition.java
index 34d6d46..d9ad3fe 100644
--- a/src/java/org/apache/cassandra/db/partitions/AbstractBTreePartition.java
+++ b/src/java/org/apache/cassandra/db/partitions/AbstractBTreePartition.java
@@ -278,8 +278,12 @@ public abstract class AbstractBTreePartition implements 
Partition, Iterable<Row>
 
     protected static Holder build(UnfilteredRowIterator iterator, int 
initialRowCapacity, boolean ordered, BTree.Builder.QuickResolver<Row> 
quickResolver)
     {
+        return build(iterator, initialRowCapacity, ordered, quickResolver, 
iterator.columns());
+    }
+
+    protected static Holder build(UnfilteredRowIterator iterator, int 
initialRowCapacity, boolean ordered, BTree.Builder.QuickResolver<Row> 
quickResolver, PartitionColumns columns)
+    {
         CFMetaData metadata = iterator.metadata();
-        PartitionColumns columns = iterator.columns();
         boolean reversed = iterator.isReverseOrder();
 
         BTree.Builder<Row> builder = BTree.builder(metadata.comparator, 
initialRowCapacity);
diff --git a/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java 
b/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java
index b52105e..828ee95 100644
--- a/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java
+++ b/src/java/org/apache/cassandra/db/partitions/PartitionUpdate.java
@@ -238,6 +238,14 @@ public class PartitionUpdate extends AbstractBTreePartition
         return fromIterator(iterator, filter, true,  null);
     }
 
+    public static PartitionUpdate 
fromIteratorExplicitColumns(UnfilteredRowIterator iterator, ColumnFilter filter)
+    {
+        iterator = UnfilteredRowIterators.withOnlyQueriedData(iterator, 
filter);
+        Holder holder = build(iterator, 16, true, null, 
filter.fetchedColumns());
+        MutableDeletionInfo deletionInfo = (MutableDeletionInfo) 
holder.deletionInfo;
+        return new PartitionUpdate(iterator.metadata(), 
iterator.partitionKey(), holder, deletionInfo, false, 
FBUtilities.nowInSeconds());
+    }
+
     private static final NoSpamLogger rowMergingLogger = 
NoSpamLogger.getLogger(logger, 1, TimeUnit.MINUTES);
     /**
      * Removes duplicate rows from incoming iterator, to be used when we can't 
trust the underlying iterator (like when reading legacy sstables)
diff --git a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java 
b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
index 8b7ac84..b852072 100644
--- a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
+++ b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
@@ -419,8 +419,8 @@ public final class SchemaKeyspace
 
     /**
      * Creates a PartitionUpdate from a partition containing some schema table 
content.
-     * This is mainly calling {@code PartitionUpdate.fromIterator} except for 
the fact that it deals with
-     * the problem described in #12236.
+     * This is mainly calling {@code PartitionUpdate.fromIterator} except if 
cdc is not enabled to handle the problem
+     * in #12236/#16770.
      */
     private static PartitionUpdate makeUpdateForSchema(UnfilteredRowIterator 
partition, ColumnFilter filter)
     {
@@ -432,14 +432,14 @@ public final class SchemaKeyspace
 
         // We want to skip the 'cdc' column. A simple solution for that is 
based on the fact that
         // 'PartitionUpdate.fromIterator()' will ignore any columns that are 
marked as 'fetched' but not 'queried'.
-        ColumnFilter.Builder builder = 
ColumnFilter.allColumnsBuilder(partition.metadata());
+        ColumnFilter.Builder builder = ColumnFilter.selectionBuilder();
         for (ColumnDefinition column : filter.fetchedColumns())
         {
             if (!column.name.toString().equals("cdc"))
                 builder.add(column);
         }
 
-        return PartitionUpdate.fromIterator(partition, builder.build());
+        return PartitionUpdate.fromIteratorExplicitColumns(partition, 
builder.build());
     }
 
     private static boolean isSystemKeyspaceSchemaPartition(DecoratedKey 
partitionKey)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to