[
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]