[ https://issues.apache.org/jira/browse/CASSANDRA-17266?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17485164#comment-17485164 ]
Benjamin Lerer commented on CASSANDRA-17266: -------------------------------------------- [~yashLadha] One of the DTest [failed|https://app.circleci.com/pipelines/github/blerer/cassandra/258/workflows/03a953ed-8df6-41ef-8b2f-1816c4d242b1/jobs/2357/tests#failed-test-0] after looking into I discover that it was we were still returning the correct value for DESCRIBE statements. What changed is that we stop accepting {{defaultTimeToLive = 0}} in 4.0 (CASSANDRA-13426). We need to revert that behavior and accept {{defaultTimeToLive = 0}} to allow people to restore old backup but we should keep the new logic and modify the {{cqlsh_tests.test_cqlsh.TestCqlsh}} test. Could you do that? > DESCRIBE KEYSPACE / MATERIALIZED VIEW generates invalid CQL for views > --------------------------------------------------------------------- > > Key: CASSANDRA-17266 > URL: https://issues.apache.org/jira/browse/CASSANDRA-17266 > Project: Cassandra > Issue Type: Bug > Components: CQL/Syntax > Reporter: Oleg Zhovtanyuk > Assignee: Yash Ladha > Priority: Normal > Labels: lhf > Fix For: 4.0.x > > > Materialized views do not allow default_time_to_live option in CQL (see > CASSANDRA-12868). > But, if the MV was created without this option, DESCRIBE KEYSPACE / > MATERIALIZED VIEW command generates CQL that includes it. > E.g. > {code:java} > CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', > 'replication_factor': '1'}; > USE test; > CREATE TABLE test_table( > id text, > date text, > col1 text, > col2 text, > PRIMARY KEY(id,date) > ) WITH default_time_to_live = 60 AND CLUSTERING ORDER BY (date DESC); > CREATE MATERIALIZED VIEW test_view AS > SELECT id, date, col1 > FROM test_table > WHERE id IS NOT NULL AND date IS NOT NULL > PRIMARY KEY(id, date);{code} > It is OK. > {code:java} > DESCRIBE MATERIALIZED VIEW test_view; {code} > returns the same CQL + all default options: > {code:java} > CREATE MATERIALIZED VIEW test.test_view AS > SELECT id, date, col1 > FROM test.test_table > WHERE id IS NOT NULL AND date IS NOT NULL > PRIMARY KEY (id, date) > WITH CLUSTERING ORDER BY (date ASC) > AND additional_write_policy = '99p' > AND bloom_filter_fp_chance = 0.01 > AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} > AND cdc = false > AND comment = '' > AND compaction = {'class': > 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', > 'max_threshold': '32', 'min_threshold': '4'} > AND compression = {'chunk_length_in_kb': '16', 'class': > 'org.apache.cassandra.io.compress.LZ4Compressor'} > AND crc_check_chance = 1.0 > AND default_time_to_live = 0 > AND extensions = {} > AND gc_grace_seconds = 864000 > AND max_index_interval = 2048 > AND memtable_flush_period_in_ms = 0 > AND min_index_interval = 128 > AND read_repair = 'BLOCKING' > AND speculative_retry = '99p'; > {code} > Note the 'default_time_to_live = 0' clause! If this veiw is dropped, > re-creating it using DESCRIBE output would fail with > {noformat} > Cannot set default_time_to_live for a materialized view. Data in a > materialized view always expire at the same time than the corresponding data > in the parent table.{noformat} > +Additional Information for newcomers:+ > The code writting the table parameters is in {{TableParams.appendCqlTo}} and > is called through {{TableMetadata.appendTableOptions}}. Those method will > need to have a new parameter specifying if the call is for a table or a > materialized view. > Some unit test need to be adapted in {{DescribeStatementTest}} -- This message was sent by Atlassian Jira (v8.20.1#820001) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org