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

paulo pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git

commit 099f37663598449f7b824ed89c0bb086afcb84af
Merge: 7fe688b000 45afd18a13
Author: Paulo Motta <[email protected]>
AuthorDate: Thu Jan 22 14:19:02 2026 -0500

    Merge branch 'cassandra-5.0' into trunk

 CHANGES.txt                                        |   1 +
 .../db/streaming/CassandraOutgoingFile.java        |   7 +-
 .../io/sstable/SSTableLoaderLegacyTest.java        | 211 +++++++++++++++++++++
 3 files changed, 217 insertions(+), 2 deletions(-)

diff --cc CHANGES.txt
index c2df8be752,e70fc6e23b..56e6b8dada
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,290 -1,5 +1,291 @@@
 -5.0.7
 +5.1
 + * Add configuration to disk usage guardrails to stop writes across all 
replicas of a keyspace when any node replicating that keyspace exceeds the disk 
usage failure threshold. (CASSANDRA-21024)
 + * BETWEEN where token(Y) > token(Z) returns wrong answer (CASSANDRA-20154)
 + * Optimize memtable flush logic (CASSANDRA-21083)
 + * No need to evict already prepared statements, as it creates a race 
condition between multiple threads (CASSANDRA-17401)
 + * Include Level information for UnifiedCompactionStrategy in nodetool 
tablestats output (CASSANDRA-20820)
 + * Support low-overhead async profiling (CASSANDRA-20854)
 + * Minor perf optimizations around memtable put logic (CASSANDRA-21088)
 + * When level compaction validates its table properties, it used the wrong 
default value for sstable_size_in_mb which allowed properties that would later 
be rejected at runtime (CASSANDRA-20570)
 + * Fix off-by-one bug in exponential backoff for repair retry config 
(CASSANDRA-21102)
 + * Move training parameters for Zstd dictionary compression to CQL 
(CASSANDRA-21078)
 + * Add configuration for sorted imports in source files (CASSANDRA-17925)
 + * Change the eager reference counting of compression dictionaries to lazy 
(CASSANDRA-21074)
 + * Add cursor based optimized compaction path (CASSANDRA-20918)
 + * Ensure peers with LEFT status are expired from gossip state 
(CASSANDRA-21035)
 + * Optimize UTF8Validator.validate for ASCII prefixed Strings 
(CASSANDRA-21075)
 + * Switch LatencyMetrics to use ThreadLocalTimer/ThreadLocalCounter 
(CASSANDRA-21080)
 + * Accord: write rejections would be returned to users as server errors 
rather than INVALID and TxnReferenceOperation didn't handle all collections 
prperly (CASSANDRA-21061)
 + * Use byte[] directly in QueryOptions instead of ByteBuffer and convert them 
to ArrayCell instead of BufferCell to reduce allocations (CASSANDRA-20166)
 + * Log queries scanning too many SSTables per read (CASSANDRA-21048)
 + * Extend nodetool verify to (optionally) validate SAI files (CASSANDRA-20949)
 + * Fix CompressionDictionary being closed while still in use (CASSANDRA-21047)
 + * When updating a multi cell collection element, if the update is rejected 
then the shared Row.Builder is not freed causing all future mutations to be 
rejected (CASSANDRA-21055)
 + * Schema annotations escape validation on CREATE and ALTER DDL statements 
(CASSANDRA-21046)
 + * Calculate once and cache the result of ModificationStatement#requiresRead 
as a perf optimization (CASSANDRA-21040)
 + * Update system schema tables with new distributed keyspace on upgrade 
(CASSANDRA-20872)
 + * Fix issue when running cms reconfiguration with paxos repair disabled 
(CASSANDRA-20869)
 + * Added additional parameter to JVM shutdown to allow for logs to be 
properly shutdown (CASSANDRA-20978)
 + * Improve isGossipOnlyMember and location lookup performance 
(CASSANDRA-21039)
 + * Refactor the way we check if a transformation is allowed to be committed 
during upgrades (CASSANDRA-21043)
 + * Improve debug around paused and disabled compaction 
(CASSANDRA-20131,CASSANDRA-19728)
 + * DiskUsageBroadcaster does not update usageInfo on node replacement 
(CASSANDRA-21033)
 + * Reject PrepareJoin if tokens are already assigned (CASSANDRA-21006)
 + * Don't update registration status if node state for decommissioned peer is 
found with the same address (CASSANDRA-21005)
 + * Avoid NPE when meta keyspace placements are empty before CMS is 
initialized (CASSANDRA-21004)
 + * Gossip entries for hibernating non-members don't block truncate 
(CASSANDRA-21003)
 + * Retry without time limit calculates wait time incorrectly (CASSANDRA-21002)
 + * Don't submit AlterSchemaStatements which produce no effect locally to the 
CMS (CASSANDRA-21001)
 + * Avoid iterating all prepared statements when getting 
PreparedStatementsCacheSize metric (CASSANDRA-21038)
 + * Reduce performance impact of TableMetadataRef.get and 
KeyspaceMetadataRef.get (CASSANDRA-20465)
 + * Improve CMS initialization (CASSANDRA-21036)
 + * Introducing comments and security labels for schema elements 
(CASSANDRA-20943)
 + * Extend nodetool tablestats for dictionary memory usage (CASSANDRA-20940)
 + * Introduce separate GCInspector thresholds for concurrent GC events 
(CASSANDRA-20980)
 + * Reduce contention in MemtableAllocator.allocate (CASSANDRA-20226)
 + * Add export, list, import sub-commands for nodetool compressiondictionary 
(CASSANDRA-20941)
 + * Add support in the binary protocol to allow transactions to have multiple 
conditions (CASSANDRA-20883)
 + * Enable CQLSSTableWriter to create SSTables compressed with a dictionary 
(CASSANDRA-20938)
 + * Support ZSTD dictionary compression (CASSANDRA-17021)
 + * Fix ExceptionsTable when stacktrace has zero elements (CASSANDRA-20992)
 + * Replace blocking wait with non-blocking delay in paxos repair 
(CASSANDRA-20983)
 + * Implementation of CEP-55 - Generation of role names (CASSANDRA-20897)
 + * Add cqlsh autocompletion for the identity mapping feature (CASSANDRA-20021)
 + * Add DDL Guardrail enabling administrators to disallow 
creation/modification of keyspaces with durable_writes = false (CASSANDRA-20913)
 + * Optimize Counter, Meter and Histogram metrics using thread local counters 
(CASSANDRA-20250)
 + * Update snakeyaml to 2.4 (CASSANDRA-20928)
 + * Update Netty to 4.1.125.Final (CASSANDRA-20925)
 + * Expose uncaught exceptions in system_views.uncaught_exceptions table 
(CASSANDRA-20858)
 + * Improved observability in AutoRepair to report both expected vs. actual 
repair bytes and expected vs. actual keyspaces (CASSANDRA-20581)
 + * Execution of CreateTriggerStatement should not rely on external state 
(CASSANDRA-20287)
 + * Support LIKE expressions in filtering queries (CASSANDRA-17198)
 + * Make legacy index rebuilds safe on Gossip -> TCM upgrades (CASSANDRA-20887)
 + * Minor improvements and hardening for IndexHints (CASSANDRA-20888)
 + * Stop repair scheduler if two major versions are detected (CASSANDRA-20048)
 + * Optimize audit logic for batch operations especially when audit is not 
enabled for DML (CASSANDRA-20885)
 + * Implement nodetool history (CASSANDRA-20851)
 + * Expose StorageService.dropPreparedStatements via JMX (CASSANDRA-20870)
 + * Expose Metric for Prepared Statement Cache Size (in bytes) 
(CASSANDRA-20864)
 + * Add support for BEGIN TRANSACTION to allow mutations that touch multiple 
partitions (CASSANDRA-20857)
 + * AutoRepair: Safeguard Full repair against disk protection(CASSANDRA-20045)
 + * BEGIN TRANSACTION crashes if a mutation touches multiple rows 
(CASSANDRA-20844)
 + * Fix version range check in MessagingService.getVersionOrdinal 
(CASSANDRA-20842)
 + * Allow custom constraints to be loaded via SPI (CASSANDRA-20824)
 + * Optimize DataPlacement lookup by ReplicationParams (CASSANDRA-20804)
 + * Fix ShortPaxosSimulationTest and AccordSimulationRunner do not execute 
from the cli (CASSANDRA-20805)
 + * Allow overriding arbitrary settings via environment variables 
(CASSANDRA-20749)
 + * Optimize MessagingService.getVersionOrdinal (CASSANDRA-20816)
 + * Optimize TrieMemtable#getFlushSet (CASSANDRA-20760)
 + * Support manual secondary index selection at the CQL level (CASSANDRA-18112)
 + * When regulars CQL mutations run on Accord use the txn timestamp rather 
than server timestamp (CASSANDRA-20744)
 + * When using BEGIN TRANSACTION if a complex mutation exists in the same 
statement as one that uses a reference, then the complex delete is dropped 
(CASSANDRA-20788)
 + * Migrate all nodetool commands from airline to picocli (CASSANDRA-17445)
 + * Journal.TopologyUpdate should not store the local topology as it can be 
inferred from the global on (CASSANDRA-20785)
 + * Accord: Topology serializer has a lot of repeated data, can dedup to 
shrink the cost (CASSANDRA-20715)
 + * Stream individual files in their own transactions and hand over ownership 
to a parent transaction on completion (CASSANDRA-20728)
 + * Limit the number of held heap dumps to not consume disk space excessively 
(CASSANDRA-20457)
 + * Accord: BEGIN TRANSACTIONs IF condition logic does not properly support 
meaningless emptiness and null values (CASSANDRA-20667)
 + * Accord: startup race condition where accord journal tries to access the 2i 
index before its ready (CASSANDRA-20686)
 + * Adopt Unsafe::invokeCleaner for Direct ByteBuffer cleaning 
(CASSANDRA-20677)
 + * Add additional metrics around hints (CASSANDRA-20499)
 + * Support for add and replace in IntervalTree (CASSANDRA-20513)
 + * Enable single_sstable_uplevel by default for LCS (CASSANDRA-18509)
 + * Introduce NativeAccessor to avoid new ByteBuffer allocation on flush for 
each NativeCell (CASSANDRA-20173)
 + * Migrate sstableloader code to its own tools directory and artifact 
(CASSANDRA-20328)
 + * Stop AutoRepair monitoring thread upon Cassandra shutdown (CASSANDRA-20623)
 + * Avoid duplicate hardlink error upon forceful taking of ephemeral snapshots 
during repair (CASSANDRA-20490)
 + * When a custom disk error handler fails to initiate, fail the startup of a 
node instead of using the no-op handler (CASSANDRA-20614)
 + * Rewrite constraint framework to remove column specification from 
constraint definition, introduce SQL-like NOT NULL (CASSANDRA-20563)
 + * Fix a bug in AutoRepair duration metric calculation if schedule finishes 
quickly (CASSANDRA-20622)
 + * Fix AutoRepair flaky InJvm dtest (CASSANDRA-20620)
 + * Increasing default for auto_repair.sstable_upper_threshold considering 
large Cassandra tables & revert three lines removed from CHANGES.txt due to a 
merge mistake (CASSANDRA-20586)
 + * Fix token restrictions with MIN_TOKEN (CASSANDRO-20557)
 + * Upgrade logback version to 1.5.18 and slf4j dependencies to 2.0.17 
(CASSANDRA-20429)
 + * Switch memtable-related off-heap objects to Native Endian and Memory to 
Little Endian (CASSANDRA-20190)
 + * Change SSTableSimpleScanner to use SSTableReader#openDataReaderForScan 
(CASSANDRA-20538)
 + * Automated Repair Inside Cassandra [CEP-37] (CASSANDRA-19918)
 + * Implement appender of slow queries to system_views.slow_queries table 
(CASSANDRA-13001)
 + * Add autocompletion in CQLSH for built-in functions (CASSANDRA-19631)
 + * Grant permission on keyspaces system_views and system_virtual_schema not 
possible (CASSANDRA-20171)
 + * General Purpose Transactions (Accord) [CEP-15] (CASSANDRA-17092)
 + * Improve performance when getting writePlacementsAllSettled from 
ClusterMetadata (CASSANDRA-20526)
 + * Add nodetool command to dump the contents of the 
system_views.{cluster_metadata_log, cluster_metadata_directory} tables 
(CASSANDRA-20525)
 + * Fix TreeMap race in CollectionVirtualTableAdapter causing us to lose rows 
in the virtual table (CASSANDRA-20524)
 + * Improve metadata log catch up with inter-DC mutation forwarding 
(CASSANDRA-20523)
 + * Support topology-safe changes to Datacenter & Rack for live nodes 
(CASSANDRA-20528)
 + * Add SSTableIntervalTree latency metric (CASSANDRA-20502)
 + * Ignore repetitions of semicolon in CQLSH (CASSANDRA-19956)
 + * Avoid NPE during cms initialization abort (CASSANDRA-20527)
 + * Avoid failing queries when epoch changes and replica goes up/down 
(CASSANDRA-20489)
 + * Split out truncation record lock (CASSANDRA-20480)
 + * Throw new IndexBuildInProgressException when queries fail during index 
build, instead of IndexNotAvailableException (CASSANDRA-20402)
 + * Fix Paxos repair interrupts running transactions (CASSANDRA-20469)
 + * Various fixes in constraint framework (CASSANDRA-20481)
 + * Add support in CAS for -= on numeric types, and fixed improper handling of 
empty bytes which lead to NPE (CASSANDRA-20477)
 + * Do not fail to start a node with materialized views after they are turned 
off in config (CASSANDRA-20452)
 + * Fix nodetool gcstats output, support human-readable units and more output 
formats (CASSANDRA-19022)
 + * Various gossip to TCM upgrade fixes (CASSANDRA-20483)
 + * Add nodetool command to abort failed nodetool cms initialize 
(CASSANDRA-20482)
 + * Repair Paxos for the distributed metadata log when CMS membership changes 
(CASSANDRA-20467)
 + * Reintroduce CASSANDRA-17411 in trunk (CASSANDRA-19346)
 + * Add min/max/mean/percentiles to timer metrics vtable (CASSANDRA-20466)
 + * Add support for time, date, timestamp types in scalar constraint 
(CASSANDRA-20274)
 + * Add regular expression constraint (CASSANDRA-20275)
 + * Improve constraints autocompletion (CASSANDRA-20341)
 + * Add JVM version and Cassandra build date to nodetool version -v 
(CASSANDRA-19721)
 + * Move all disk error logic to DiskErrorsHandler to enable pluggability 
(CASSANDRA-20363)
 + * Fix marking an SSTable as suspected and BufferPool leakage in case of a 
corrupted SSTable read during a compaction (CASSANDRA-20396)
 + * Add missed documentation for CREATE TABLE LIKE (CASSANDRA-20401)
 + * Add OCTET_LENGTH constraint (CASSANDRA-20340)
 + * Reduce memory allocations in miscellaneous places along the hot write path 
(CASSANDRA-20167)
 + * Provide keystore_password_file and truststore_password_file options to 
read credentials from a file (CASSANDRA-13428)
 + * Unregistering a node should also remove it from tokenMap if it is there 
and recalculate the placements (CASSANDRA-20346)
 + * Fix PartitionUpdate.isEmpty deserialization issue to avoid potential 
EOFException (CASSANDRA-20345)
 + * Avoid adding LEFT nodes to tokenMap on upgrade from gossip 
(CASSANDRA-20344)
 + * Allow empty placements when deserializing cluster metadata 
(CASSANDRA-20343)
 + * Reduce heap pressure when initializing CMS (CASSANDRA-20267)
 + * Paxos Repair: NoSuchElementException on 
DistributedSchema.getKeyspaceMetadata (CASSANDRA-20320)
 + * Improve performance of DistributedSchema.validate for large schemas 
(CASSANDRA-20360)
 + * Add JSON constraint (CASSANDRA-20273)
 + * Prevent invalid constraint combinations (CASSANDRA-20330)
 + * Support CREATE TABLE LIKE WITH INDEXES (CASSANDRA-19965)
 + * Invalidate relevant prepared statements on every change to TableMetadata 
(CASSANDRA-20318)
 + * Add per type max size guardrails (CASSANDRA-19677)
 + * Make it possible to abort all kinds of multi step operations 
(CASSANDRA-20217)
 + * Do not leak non-Java exceptions when calling snapshot operations via JMX 
(CASSANDRA-20335)
 + * Implement NOT_NULL constraint (CASSANDRA-20276)
 + * Improve error messages for constraints (CASSANDRA-20266)
 + * Add system_views.partition_key_statistics for querying SSTable metadata 
(CASSANDRA-20161)
 + * CEP-42 - Add Constraints Framework (CASSANDRA-19947)
 + * Add table metric PurgeableTombstoneScannedHistogram and a tracing event 
for scanned purgeable tombstones (CASSANDRA-20132)
 + * Make sure we can parse the expanded CQL before writing it to the log or 
sending it to replicas (CASSANDRA-20218)
 + * Add format_bytes and format_time functions (CASSANDRA-19546)
 + * Fix error when trying to assign a tuple to target type not being a tuple 
(CASSANDRA-20237)
 + * Fail CREATE TABLE LIKE statement if UDTs in target keyspace do not exist 
or they have different structure from ones in source keyspace (CASSANDRA-19966)
 + * Support octet_length and length functions (CASSANDRA-20102)
 + * Make JsonUtils serialize Instant always with the same format 
(CASSANDRA-20209)
 + * Port Harry v2 to trunk (CASSANDRA-20200)
 + * Enable filtering of snapshots on keyspace, table and snapshot name in 
nodetool listsnapshots (CASSANDRA-20151)
 + * Create manifest upon loading where it does not exist or enrich it 
(CASSANDRA-20150)
 + * Propagate true size of snapshot in SnapshotDetailsTabularData to not call 
JMX twice in nodetool listsnapshots (CASSANDRA-20149)
 + * Implementation of CEP-43 - copying a table via CQL by CREATE TABLE LIKE 
(CASSANDRA-19964)
 + * Periodically disconnect roles that are revoked or have LOGIN=FALSE set 
(CASSANDRA-19385)
 + * AST library for CQL-based fuzz tests (CASSANDRA-20198)
 + * Support audit logging for JMX operations (CASSANDRA-20128)
 + * Enable sorting of nodetool status output (CASSANDRA-20104)
 + * Support downgrading after CMS is initialized (CASSANDRA-20145)
 + * Deprecate IEndpointSnitch (CASSANDRA-19488)
 + * Check presence of a snapshot in a case-insensitive manner on macOS 
platform to prevent hardlinking failures (CASSANDRA-20146)
 + * Enable JMX server configuration to be in cassandra.yaml (CASSANDRA-11695)
 + * Parallelized UCS compactions (CASSANDRA-18802)
 + * Avoid prepared statement invalidation race when committing schema changes 
(CASSANDRA-20116)
 + * Restore optimization in MultiCBuilder around building one clustering 
(CASSANDRA-20129)
 + * Consolidate all snapshot management to SnapshotManager and introduce 
SnapshotManagerMBean (CASSANDRA-18111)
 + * Fix RequestFailureReason constants codes (CASSANDRA-20126)
 + * Introduce SSTableSimpleScanner for compaction (CASSANDRA-20092)
 + * Include column drop timestamp in alter table transformation 
(CASSANDRA-18961)
 + * Make JMX SSL configurable in cassandra.yaml (CASSANDRA-18508)
 + * Fix cqlsh CAPTURE command to save query results without trace details when 
TRACING is ON (CASSANDRA-19105)
 + * Optionally prevent tombstone purging during repair (CASSANDRA-20071)
 + * Add post-filtering support for the IN operator in SAI queries 
(CASSANDRA-20025)
 + * Don’t finish ongoing decommission and move operations during startup 
(CASSANDRA-20040)
 + * Nodetool reconfigure cms has correct return code when streaming fails 
(CASSANDRA-19972)
 + * Reintroduce RestrictionSet#iterator() optimization around multi-column 
restrictions (CASSANDRA-20034)
 + * Explicitly localize strings to Locale.US for internal implementation 
(CASSANDRA-19953)
 + * Add -H option for human-friendly output in nodetool compactionhistory 
(CASSANDRA-20015)
 + * Fix type check for referenced duration type for nested types 
(CASSANDRA-19890)
 + * In simulation tests, correctly set the tokens of replacement nodes 
(CASSANDRA-19997)
 + * During TCM upgrade, retain all properties of existing system tables 
(CASSANDRA-19992)
 + * Properly cancel in-flight futures and reject requests in 
EpochAwareDebounce during shutdown (CASSANDRA-19848)
 + * Provide clearer exception message on failing commitlog_disk_access_mode 
combinations (CASSANDRA-19812)
 + * Add total space used for a keyspace to nodetool tablestats 
(CASSANDRA-19671)
 + * Ensure Relation#toRestriction() handles ReversedType properly 
(CASSANDRA-19950)
 + * Add JSON and YAML output option to nodetool gcstats (CASSANDRA-19771)
 + * Introduce metadata serialization version V4 (CASSANDRA-19970)
 + * Allow CMS reconfiguration to work around DOWN nodes (CASSANDRA-19943)
 + * Make TableParams.Serializer set allowAutoSnapshots and incrementalBackups 
(CASSANDRA-19954)
 + * Make sstabledump possible to show tombstones only (CASSANDRA-19939)
 + * Ensure that RFP queries potentially stale replicas even with only key 
columns in the row filter (CASSANDRA-19938)
 + * Allow nodes to change IP address while upgrading to TCM (CASSANDRA-19921)
 + * Retain existing keyspace params on system tables after upgrade 
(CASSANDRA-19916)
 + * Deprecate use of gossip state for paxos electorate verification 
(CASSANDRA-19904)
 + * Update dtest-api to 0.0.17 to fix jvm17 crash in jvm-dtests 
(CASSANDRA-19239)
 + * Add resource leak test and Update Netty to 4.1.113.Final to fix leak 
(CASSANDRA-19783)
 + * Fix incorrect nodetool suggestion when gossip mode is running 
(CASSANDRA-19905)
 + * SAI support for BETWEEN operator (CASSANDRA-19688)
 + * Fix BETWEEN filtering for reversed clustering columns (CASSANDRA-19878)
 + * Retry if node leaves CMS while committing a transformation 
(CASSANDRA-19872)
 + * Add support for NOT operators in WHERE clauses. Fixed Three Valued Logic 
(CASSANDRA-18584)
 + * Allow getendpoints for system tables and make sure getNaturalReplicas work 
for MetaStrategy (CASSANDRA-19846)
 + * On upgrade, handle pre-existing tables with unexpected table ids 
(CASSANDRA-19845)
 + * Reconfigure CMS before assassinate (CASSANDRA-19768)
 + * Warn about unqualified prepared statement only if it is select or 
modification statement (CASSANDRA-18322)
 + * Update legacy peers tables during node replacement (CASSANDRA-19782)
 + * Refactor ColumnCondition (CASSANDRA-19620)
 + * Allow configuring log format for Audit Logs (CASSANDRA-19792)
 + * Support for noboolean rpm (centos7 compatible) packages removed 
(CASSANDRA-19787)
 + * Allow threads waiting for the metadata log follower to be interrupted 
(CASSANDRA-19761)
 + * Support dictionary lookup for CassandraPasswordValidator (CASSANDRA-19762)
 + * Disallow denylisting keys in system_cluster_metadata (CASSANDRA-19713)
 + * Fix gossip status after replacement (CASSANDRA-19712)
 + * Ignore repair requests for system_cluster_metadata (CASSANDRA-19711)
 + * Avoid ClassCastException when verifying tables with reversed partitioner 
(CASSANDRA-19710)
 + * Always repair the full range when repairing system_cluster_metadata 
(CASSANDRA-19709)
 + * Use table-specific partitioners during Paxos repair (CASSANDRA-19714)
 + * Expose current compaction throughput in nodetool (CASSANDRA-13890)
 + * CEP-24 Password validation / generation (CASSANDRA-17457)
 + * Reconfigure CMS after replacement, bootstrap and move operations 
(CASSANDRA-19705)
 + * Support querying LocalStrategy tables with any partitioner 
(CASSANDRA-19692)
 + * Relax slow_query_log_timeout for MultiNodeSAITest (CASSANDRA-19693)
 + * Audit Log entries are missing identity for mTLS connections 
(CASSANDRA-19669)
 + * Add support for the BETWEEN operator in WHERE clauses (CASSANDRA-19604)
 + * Replace Stream iteration with for-loop for 
SimpleRestriction::bindAndGetClusteringElements (CASSANDRA-19679)
 + * Consolidate logging on trace level (CASSANDRA-19632)
 + * Expand DDL statements on coordinator before submission to the CMS 
(CASSANDRA-19592)
 + * Fix number of arguments of String.format() in various classes 
(CASSANDRA-19645)
 + * Remove unused fields from config (CASSANDRA-19599)
 + * Refactor Relation and Restriction hierarchies (CASSANDRA-19341)
 + * Raise priority of TCM internode messages during critical operations 
(CASSANDRA-19517)
 + * Add nodetool command to unregister LEFT nodes (CASSANDRA-19581)
 + * Add cluster metadata id to gossip syn messages (CASSANDRA-19613)
 + * Reduce heap usage occupied by the metrics (CASSANDRA-19567)
 + * Improve handling of transient replicas during range movements 
(CASSANDRA-19344)
 + * Enable debounced internode log requests to be cancelled at shutdown 
(CASSANDRA-19514)
 + * Correctly set last modified epoch when combining multistep operations into 
a single step (CASSANDRA-19538)
 + * Add new TriggersPolicy configuration to allow operators to disable 
triggers (CASSANDRA-19532)
 + * Use Transformation.Kind.id in local and distributed log tables 
(CASSANDRA-19516)
 + * Remove period field from ClusterMetadata and metadata log tables 
(CASSANDRA-19482)
 + * Enrich system_views.pending_hints vtable with hints sizes (CASSANDRA-19486)
 + * Expose all dropwizard metrics in virtual tables (CASSANDRA-14572)
 + * Ensured that PropertyFileSnitchTest do not overwrite 
cassandra-toploogy.properties (CASSANDRA-19502)
 + * Add option for MutualTlsAuthenticator to restrict the certificate validity 
period (CASSANDRA-18951)
 + * Fix StorageService::constructRangeToEndpointMap for non-distributed 
keyspaces (CASSANDRA-19255)
 + * Group nodetool cms commands into single command group (CASSANDRA-19393)
 + * Register the measurements of the bootstrap process as Dropwizard metrics 
(CASSANDRA-19447)
 + * Add LIST SUPERUSERS CQL statement (CASSANDRA-19417)
 + * Modernize CQLSH datetime conversions (CASSANDRA-18879)
 + * Harry model and in-JVM tests for partition-restricted 2i queries 
(CASSANDRA-18275)
 + * Refactor cqlshmain global constants (CASSANDRA-19201)
 + * Remove native_transport_port_ssl (CASSANDRA-19397)
 + * Make nodetool reconfigurecms sync by default and add --cancel to be able 
to cancel ongoing reconfigurations (CASSANDRA-19216)
 + * Expose auth mode in system_views.clients, nodetool clientstats, metrics 
(CASSANDRA-19366)
 + * Remove sealed_periods and last_sealed_period tables (CASSANDRA-19189)
 + * Improve setup and initialisation of LocalLog/LogSpec (CASSANDRA-19271)
 + * Refactor structure of caching metrics and expose auth cache metrics via 
JMX (CASSANDRA-17062)
 + * Allow CQL client certificate authentication to work without sending an 
AUTHENTICATE request (CASSANDRA-18857)
 + * Extend nodetool tpstats and system_views.thread_pools with detailed pool 
parameters (CASSANDRA-19289)
 + * Remove dependency on Sigar in favor of OSHI (CASSANDRA-16565)
 + * Simplify the bind marker and Term logic (CASSANDRA-18813)
 + * Limit cassandra startup to supported JDKs, allow higher JDKs by setting 
CASSANDRA_JDK_UNSUPPORTED (CASSANDRA-18688)
 + * Standardize nodetool tablestats formatting of data units (CASSANDRA-19104)
 + * Make nodetool tablestats use number of significant digits for time and 
average values consistently (CASSANDRA-19015)
 + * Upgrade jackson to 2.15.3 and snakeyaml to 2.1 (CASSANDRA-18875)
 + * Transactional Cluster Metadata [CEP-21] (CASSANDRA-18330)
 + * Add ELAPSED command to cqlsh (CASSANDRA-18861)
 + * Add the ability to disable bulk loading of SSTables (CASSANDRA-18781)
 + * Clean up obsolete functions and simplify cql_version handling in cqlsh 
(CASSANDRA-18787)
 +Merged from 5.0:
+  * Automatically disable zero-copy streaming for legacy sstables with old 
bloom filter format (CASSANDRA-21092)
   * Fix CQLSSTableWriter serialization of vector of date and time 
(CASSANDRA-20979)
   * Correctly calculate default for FailureDetector max interval 
(CASSANDRA-21025)
   * Adding missing configs in system_views.settings to be backward compatible 
(CASSANDRA-20863)
diff --cc test/unit/org/apache/cassandra/io/sstable/SSTableLoaderLegacyTest.java
index 0000000000,91d9d45bce..e93e059662
mode 000000,100644..100644
--- a/test/unit/org/apache/cassandra/io/sstable/SSTableLoaderLegacyTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/SSTableLoaderLegacyTest.java
@@@ -1,0 -1,208 +1,211 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  *     http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package org.apache.cassandra.io.sstable;
+ 
+ import java.io.IOException;
+ import java.nio.file.Files;
+ import java.nio.file.StandardCopyOption;
+ import java.util.Collections;
+ import java.util.concurrent.CountDownLatch;
+ 
+ import org.junit.After;
+ import org.junit.Before;
+ import org.junit.BeforeClass;
+ import org.junit.Test;
+ 
+ import org.apache.cassandra.SchemaLoader;
++import org.apache.cassandra.ServerTestUtils;
+ import org.apache.cassandra.Util;
+ import org.apache.cassandra.config.CassandraRelevantProperties;
+ import org.apache.cassandra.config.DatabaseDescriptor;
+ import org.apache.cassandra.cql3.QueryProcessor;
+ import org.apache.cassandra.db.ColumnFamilyStore;
+ import org.apache.cassandra.db.Keyspace;
+ import org.apache.cassandra.io.util.File;
+ import org.apache.cassandra.io.util.FileUtils;
+ import org.apache.cassandra.locator.Replica;
++import org.apache.cassandra.net.MessagingService;
+ import org.apache.cassandra.schema.KeyspaceParams;
+ import org.apache.cassandra.schema.Schema;
+ import org.apache.cassandra.schema.TableMetadataRef;
+ import org.apache.cassandra.service.StorageService;
+ import org.apache.cassandra.streaming.StreamEvent;
+ import org.apache.cassandra.streaming.StreamEventHandler;
+ import org.apache.cassandra.streaming.StreamState;
+ import org.apache.cassandra.utils.FBUtilities;
+ import org.apache.cassandra.utils.OutputHandler;
+ 
+ import static org.junit.Assert.assertTrue;
+ 
+ /**
+  * Tests SSTableLoader with legacy sstables from Cassandra 3.x
+  */
+ public class SSTableLoaderLegacyTest
+ {
+     public static final String KEYSPACE1 = "sstableloaderlegacytest";
+     public static final String LEGACY_VERSION = "me"; // Cassandra 3.11
+     public static final String LEGACY_TABLE = "legacy_me_simple";
+ 
+     private static File LEGACY_SSTABLE_ROOT;
+     private File tmpdir;
+ 
+     @BeforeClass
+     public static void defineSchema()
+     {
+         String scp = 
CassandraRelevantProperties.TEST_LEGACY_SSTABLE_ROOT.getString();
+         if (scp == null || scp.isEmpty())
+         {
+             throw new RuntimeException("System property for legacy sstable 
root is not set.");
+         }
+         LEGACY_SSTABLE_ROOT = new File(scp).toAbsolute();
+ 
 -        SchemaLoader.prepareServer();
++        ServerTestUtils.prepareServerNoRegister();
+         SchemaLoader.createKeyspace(KEYSPACE1, KeyspaceParams.simple(1));
+ 
+         // Create table matching the legacy sstable schema
+         // legacy_me_simple has schema: pk text PRIMARY KEY, val text
+         QueryProcessor.executeInternal(String.format(
+             "CREATE TABLE %s.%s (pk text PRIMARY KEY, val text)",
+             KEYSPACE1, LEGACY_TABLE));
+ 
++        MessagingService.instance().waitUntilListeningUnchecked();
+         StorageService.instance.initServer();
+     }
+ 
+     @Before
+     public void setup() throws IOException
+     {
+         tmpdir = new 
File(Files.createTempDirectory("sstableloaderlegacytest").toFile());
+     }
+ 
+     @After
+     public void cleanup()
+     {
+         FileUtils.deleteRecursive(tmpdir);
+     }
+ 
+     /**
+      * Test that loading legacy 3.11 sstables works automatically.
+      * Zero-copy streaming is automatically disabled for legacy sstables that 
use the old bloom filter format.
+      */
+     @Test
+     public void testLoadLegacy311SSTable() throws Exception
+     {
+         assertTrue("Zero-copy streaming should be enabled by default",
+                    DatabaseDescriptor.streamEntireSSTables());
+ 
+         File dataDir = setupLegacySSTableDirectory();
+         ColumnFamilyStore cfs = 
Keyspace.open(KEYSPACE1).getColumnFamilyStore(LEGACY_TABLE);
+ 
+         final CountDownLatch latch = new CountDownLatch(1);
+         SSTableLoader loader = new SSTableLoader(dataDir, new TestClient(),
+                                                 new 
OutputHandler.SystemOutput(false, false));
+ 
+         loader.stream(Collections.emptySet(), 
completionStreamListener(latch)).get();
+         latch.await();
+ 
+         assertTrue("Data should be loaded from legacy sstable",
+                   !Util.getAll(Util.cmd(cfs).build()).isEmpty());
+     }
+ 
+     private static final class TestClient extends SSTableLoader.Client
+     {
+         private String keyspace;
+ 
+         public void init(String keyspace)
+         {
+             this.keyspace = keyspace;
+             for (Replica replica : 
StorageService.instance.getLocalReplicas(KEYSPACE1))
+                 addRangeForEndpoint(replica.range(), 
FBUtilities.getBroadcastAddressAndPort());
+         }
+ 
+         public TableMetadataRef getTableMetadata(String tableName)
+         {
+             return Schema.instance.getTableMetadataRef(keyspace, tableName);
+         }
+     }
+ 
+     /**
+      * Sets up a directory with legacy 3.11 sstables copied from test data.
+      */
+     private File setupLegacySSTableDirectory() throws IOException
+     {
+         File dataDir = new File(tmpdir, KEYSPACE1 + "/" + LEGACY_TABLE);
+         if (!dataDir.exists())
+             dataDir.createDirectoriesIfNotExists();
+ 
+         File legacyTableDir = new File(LEGACY_SSTABLE_ROOT,
+                                        String.format("%s/legacy_tables/%s", 
LEGACY_VERSION, LEGACY_TABLE));
+ 
+         if (!legacyTableDir.isDirectory())
+         {
+             throw new RuntimeException("Legacy sstable directory not found: " 
+ legacyTableDir);
+         }
+ 
+         // Copy all sstable components to the test directory
+         File[] sourceFiles = legacyTableDir.tryList();
+         if (sourceFiles != null)
+         {
+             for (File sourceFile : sourceFiles)
+             {
+                 copyFile(sourceFile, new File(dataDir, sourceFile.name()));
+             }
+         }
+ 
+         System.out.println("Copied legacy sstables from: " + legacyTableDir);
+         System.out.println("To: " + dataDir);
+         File[] copiedFiles = dataDir.tryList();
+         System.out.println("File count: " + (copiedFiles != null ? 
copiedFiles.length : 0));
+ 
+         return dataDir;
+     }
+ 
+     /**
+      * Copies a file from source to target.
+      */
+     private static void copyFile(File sourceFile, File targetFile) throws 
IOException
+     {
+         if (sourceFile.isFile())
+         {
+             Files.copy(sourceFile.toPath(), targetFile.toPath(), 
StandardCopyOption.REPLACE_EXISTING);
+         }
+     }
+ 
+     /**
+      * Creates a stream completion listener.
+      */
+     private StreamEventHandler completionStreamListener(final CountDownLatch 
latch)
+     {
+         return new StreamEventHandler()
+         {
+             public void onFailure(Throwable arg0)
+             {
+                 latch.countDown();
+             }
+ 
+             public void onSuccess(StreamState arg0)
+             {
+                 latch.countDown();
+             }
+ 
+             public void handleStreamEvent(StreamEvent event)
+             {
+             }
+         };
+     }
+ }


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

Reply via email to