[ 
https://issues.apache.org/jira/browse/CASSANDRA-21540?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18102778#comment-18102778
 ] 

Maxim Muzafarov commented on CASSANDRA-21540:
---------------------------------------------

I can reproduce the issue on the 5.x, 6.x and trunk branches. However, the 
issue doesn't exist on 4.1. The bug was probably introduced by CASSANDRA-18464 
when the {{initializeCommitLogDiskAccessMode}} was added to 
{{applySimpleConfig}}, which depends on the encryption context being 
initialized.

There is also definitely a lack of tests for this particular case. We should 
improve this. I used a simple distributed test, e.g.: creating a node with tde, 
creating a table, and performing select and insert operations (adapt in the way 
we need):
{code:java}
public class TransparentDataEncryptionTest extends TestBaseImpl
{
    @Test
    public void startsUpWithTransparentDataEncryptionEnabled() throws Exception
    {
        try (Cluster cluster = init(Cluster.build(1)
                                          .withConfig(c -> 
c.set("transparent_data_encryption_options",
                                                                 
EncryptionContextGenerator.createEncryptionOptions()))
                                          .start()))
        {
            cluster.schemaChange(withKeyspace("CREATE TABLE %s.tbl (k int 
PRIMARY KEY, v int)"));
            cluster.coordinator(1).execute(withKeyspace("INSERT INTO %s.tbl (k, 
v) VALUES (1, 1)"), ConsistencyLevel.ALL);
            assertEquals(1, cluster.coordinator(1).execute(withKeyspace("SELECT 
* FROM %s.tbl"), ConsistencyLevel.ALL).length);
        }
    }
}
{code}

It fails: 5.x, 6.x, trunk. Passes: 4.1

> Startup fails when TDE is enabled
> ---------------------------------
>
>                 Key: CASSANDRA-21540
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-21540
>             Project: Apache Cassandra
>          Issue Type: Bug
>            Reporter: Valery Baranov
>            Assignee: Valery Baranov
>            Priority: Normal
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> With enabled TDE:
> {code:java}
> transparent_data_encryption_options:
>   enabled: true {code}
> Cassandra failed to start:
> {code:java}
> Exception (java.lang.AssertionError) encountered during startup: null
> java.lang.AssertionError
>         at 
> org.apache.cassandra.db.commitlog.AbstractCommitLogSegmentManager.createSegmentBuilder(AbstractCommitLogSegmentManager.java:127)
>         at 
> org.apache.cassandra.db.commitlog.AbstractCommitLogSegmentManager.start(AbstractCommitLogSegmentManager.java:156)
>         at 
> org.apache.cassandra.db.commitlog.CommitLog.start(CommitLog.java:148)
>         at 
> org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:273)
>         at 
> org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:839)
>         at 
> org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:993)
> ERROR [main] 2026-07-29T10:02:55,512 CassandraDaemon.java:1020 - Exception 
> encountered during startup
> java.lang.AssertionError: null
>         at 
> org.apache.cassandra.db.commitlog.AbstractCommitLogSegmentManager.createSegmentBuilder(AbstractCommitLogSegmentManager.java:127)
>         at 
> org.apache.cassandra.db.commitlog.AbstractCommitLogSegmentManager.start(AbstractCommitLogSegmentManager.java:156)
>         at 
> org.apache.cassandra.db.commitlog.CommitLog.start(CommitLog.java:148)
>         at 
> org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:273)
>         at 
> org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:839)
>         at 
> org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:993) 
> {code}
>  
> *commitlog_disk_access_mode* not correct in *createSegmentBuilder* (value is 
> {*}mmap{*}, but should be {*}standard{*}):
> {code:java}
>     private CommitLogSegment.Builder 
> createSegmentBuilder(CommitLog.Configuration config)
>     {
>         if (config.useEncryption())
>         {
>             assert config.diskAccessMode == DiskAccessMode.standard; {code}
> Problem is *applyEncryptionContext()* loaded after resolving 
> *commitlog_disk_access_mode* in applySimpleConfig() -> 
> initializeCommitLogDiskAccessMode() -> resolveCommitLogWriteDiskAccessMode(), 
> when encryptionContext is not loaded (null).
> We need to change methods order: *applyEncryptionContext()* before 
> *applySimpleConfig().*
> WA is also uncomment {*}commitlog_compression{*}:
> {code:java}
> commitlog_compression:
>   - class_name: LZ4Compressor {code}
> but this only hides bug. And compressor is hardcoded in *EncryptionContext* 
> ({+}ignored{+} from config):
> {code:java}
> compressor = LZ4Compressor.create(Collections.<String, String>emptyMap()); 
> {code}
>  
>  
>  



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

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

Reply via email to