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]