You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Andrew D (Jira)" <ji...@apache.org> on 2025/07/08 12:36:00 UTC

[jira] [Updated] (CASSANALYTICS-77) Cassandra uses default compaction strategy in storage_compatibility_mode which can lead to unsupported compaction strategy during upgrades

     [ https://issues.apache.org/jira/browse/CASSANALYTICS-77?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrew D updated CASSANALYTICS-77:
----------------------------------
    Description: 
With Cassandra 5 and the cassandra-latest.yaml, UCS is selected as the default compaction strategy. When upgrading a cluster, via a datacenter switch for example, the compaction for system_auth, system_distributed and system_traces gets updated to use UCS even though there's still Cassandra 4 nodes within the cluster. This leads to a failure mode where a Cassandra 4 node cannot start up due to an unknown compaction strategy:
{code:java}
ERROR [main] 2025-07-02 17:09:39,693 CassandraDaemon.java:898 - Exception encountered during startup
org.apache.cassandra.exceptions.ConfigurationException: Unable to find compaction strategy class 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy' {code}
Even with storage_compatibility_mode, the default compaction strategy is used. To mitigate this, we can update the default compaction strategy however the system_schema still indicates that UCS is used:
{code:java}
 keyspace_name      | table_name                                 | compaction
--------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        system_auth |                                cidr_groups | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                           cidr_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                           identity_to_role | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                        network_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |             resource_role_permissons_index | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                               role_members | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                           role_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                                      roles | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'} {code}
There isn't an easy way to update the compaction strategy for these tables either.

 

 

 

  was:
Hi,

With Cassandra 5 and the cassandra-latest.yaml, UCS is selected as the default compaction strategy. When upgrading a cluster, via a datacenter switch for example, the compaction for system_auth, system_distributed and system_traces gets updated to use UCS even though there's still Cassandra 4 nodes within the cluster. This leads to a failure mode where a Cassandra 4 node cannot start up due to an unknown compaction strategy:
{code:java}
ERROR [main] 2025-07-02 17:09:39,693 CassandraDaemon.java:898 - Exception encountered during startup
org.apache.cassandra.exceptions.ConfigurationException: Unable to find compaction strategy class 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy' {code}
Even with storage_compatibility_mode, the default compaction strategy is used. To mitigate this, we can update the default compaction strategy however the system_schema still indicates that UCS is used:
{code:java}
 keyspace_name      | table_name                                 | compaction
--------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        system_auth |                                cidr_groups | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                           cidr_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                           identity_to_role | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                        network_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |             resource_role_permissons_index | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                               role_members | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                           role_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
        system_auth |                                      roles | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'} {code}
There isn't an easy way to update the compaction strategy for these tables either.

 

 

 


> Cassandra uses default compaction strategy in storage_compatibility_mode which can lead to unsupported compaction strategy during upgrades
> ------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CASSANALYTICS-77
>                 URL: https://issues.apache.org/jira/browse/CASSANALYTICS-77
>             Project: Apache Cassandra Analytics
>          Issue Type: Bug
>            Reporter: Andrew D
>            Priority: Normal
>
> With Cassandra 5 and the cassandra-latest.yaml, UCS is selected as the default compaction strategy. When upgrading a cluster, via a datacenter switch for example, the compaction for system_auth, system_distributed and system_traces gets updated to use UCS even though there's still Cassandra 4 nodes within the cluster. This leads to a failure mode where a Cassandra 4 node cannot start up due to an unknown compaction strategy:
> {code:java}
> ERROR [main] 2025-07-02 17:09:39,693 CassandraDaemon.java:898 - Exception encountered during startup
> org.apache.cassandra.exceptions.ConfigurationException: Unable to find compaction strategy class 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy' {code}
> Even with storage_compatibility_mode, the default compaction strategy is used. To mitigate this, we can update the default compaction strategy however the system_schema still indicates that UCS is used:
> {code:java}
>  keyspace_name      | table_name                                 | compaction
> --------------------+--------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>         system_auth |                                cidr_groups | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
>         system_auth |                           cidr_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
>         system_auth |                           identity_to_role | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
>         system_auth |                        network_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
>         system_auth |             resource_role_permissons_index | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
>         system_auth |                               role_members | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
>         system_auth |                           role_permissions | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'}
>         system_auth |                                      roles | {'class': 'org.apache.cassandra.db.compaction.UnifiedCompactionStrategy', 'max_sstables_to_compact': '64', 'min_sstable_size': '100MiB', 'scaling_parameters': 'T4', 'sstable_growth': '0.3333333333333333', 'target_sstable_size': '1GiB'} {code}
> There isn't an easy way to update the compaction strategy for these tables either.
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org