[
https://issues.apache.org/jira/browse/CASSANDRA-21092?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paulo Motta updated CASSANDRA-21092:
------------------------------------
Description:
When attempting to load legacy Cassandra 3.11 sstables into a Cassandra 5.0+
cluster using sstableloader, the operation fails with a StreamException when
zero-copy streaming is enabled (which is the default behavior). The root cause
is an assertion error {{java.lang.AssertionError: Filter should not be
serialized in old format at
org.apache.cassandra.utils.BloomFilter.serialize(BloomFilter.java:67)}} that
was introduced by CASSANDRA-17056 when it landed in the 5.0 branch.
This is a regression from Cassandra 4.0 and 4.1, where zero-copy streaming
works fine with legacy sstables. The changes in 5.0 introduced stricter
validation that rejects the old bloom filter serialization format used in 3.x
sstables, causing the streaming operation to fail.
This patch automatically detects sstables with the old bloom filter format
(pre-4.0) by checking descriptor.version.hasOldBfFormat() in
CassandraOutgoingFile.computeShouldStreamEntireSSTables() and falls back to
legacy streaming for those sstables. No user intervention required.
was:
When attempting to load legacy Cassandra 3.11 sstables into a Cassandra 5.0+
cluster using sstableloader, the operation fails with a StreamException when
zero-copy streaming is enabled (which is the default behavior). The root cause
is an assertion error {{java.lang.AssertionError: Filter should not be
serialized in old format at
org.apache.cassandra.utils.BloomFilter.serialize(BloomFilter.java:67)}} that
was introduced by CASSANDRA-17056 when it landed in the 5.0 branch.
This is a regression from Cassandra 4.0 and 4.1, where zero-copy streaming
works fine with legacy sstables. The changes in 5.0 introduced stricter
validation that rejects the old bloom filter serialization format used in 3.x
sstables, causing the streaming operation to fail.
I'm not comfortable in removing the assertion and making a special case to skip
the assertion for sstableloader would be invasive so I propose adding a new
flag --disable-zero-copy-streaming to overcome this issue.
> Automatically disable zero-copy streaming for legacy sstables
> -------------------------------------------------------------
>
> Key: CASSANDRA-21092
> URL: https://issues.apache.org/jira/browse/CASSANDRA-21092
> Project: Apache Cassandra
> Issue Type: Bug
> Components: Tool/sstable
> Reporter: Paulo Motta
> Assignee: Paulo Motta
> Priority: Normal
> Time Spent: 20m
> Remaining Estimate: 0h
>
> When attempting to load legacy Cassandra 3.11 sstables into a Cassandra 5.0+
> cluster using sstableloader, the operation fails with a StreamException when
> zero-copy streaming is enabled (which is the default behavior). The root
> cause is an assertion error {{java.lang.AssertionError: Filter should not be
> serialized in old format at
> org.apache.cassandra.utils.BloomFilter.serialize(BloomFilter.java:67)}} that
> was introduced by CASSANDRA-17056 when it landed in the 5.0 branch.
> This is a regression from Cassandra 4.0 and 4.1, where zero-copy streaming
> works fine with legacy sstables. The changes in 5.0 introduced stricter
> validation that rejects the old bloom filter serialization format used in 3.x
> sstables, causing the streaming operation to fail.
> This patch automatically detects sstables with the old bloom filter format
> (pre-4.0) by checking descriptor.version.hasOldBfFormat() in
> CassandraOutgoingFile.computeShouldStreamEntireSSTables() and falls back to
> legacy streaming for those sstables. No user intervention required.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]