Estou tentando atualizar meu cluster Cassandra de 3 nós da versão 3.11.13 para 4.1.5.
Depois de iniciar o nó de atualização, recebo este erro:
ERROR [main] 2024-06-20 08:48:23,708 CassandraDaemon.java:915 - Exception encountered during startup
java.lang.AssertionError: null
at org.apache.cassandra.schema.TableMetadata$CompactTableMetadata.getCompactValueColumn(TableMetadata.java:1515)
at org.apache.cassandra.schema.TableMetadata$CompactTableMetadata.<init>(TableMetadata.java:1350)
at org.apache.cassandra.schema.TableMetadata$Builder.build(TableMetadata.java:747)
at org.apache.cassandra.schema.SchemaKeyspace.fetchTable(SchemaKeyspace.java:943)
at org.apache.cassandra.schema.SchemaKeyspace.fetchTables(SchemaKeyspace.java:898)
at org.apache.cassandra.schema.SchemaKeyspace.fetchKeyspace(SchemaKeyspace.java:857)
at org.apache.cassandra.schema.SchemaKeyspace.fetchKeyspacesWithout(SchemaKeyspace.java:848)
at org.apache.cassandra.schema.SchemaKeyspace.fetchNonSystemKeyspaces(SchemaKeyspace.java:836)
at org.apache.cassandra.schema.Schema.loadFromDisk(Schema.java:132)
at org.apache.cassandra.schema.Schema.loadFromDisk(Schema.java:121)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:285)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:759)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893)
Encontrei este problema. A atualização do Cassandra 3.11.8 para 4.1.0 retorna "AssertionError: null" na inicialização ao carregar o esquema e o conselho era remover o COMPACT STORAGE.
Existe apenas um ARMAZENAMENTO COMPACTO no keyspace do sistema:
DESCRIBE TABLE system.hints
CREATE TABLE system.hints (
target_id uuid,
hint_id timeuuid,
message_version int,
mutation blob,
PRIMARY KEY (target_id, hint_id, message_version)
) WITH COMPACT STORAGE
AND CLUSTERING ORDER BY (hint_id ASC, message_version ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = '*DEPRECATED* hints awaiting delivery'
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'enabled': 'false', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.0
AND default_time_to_live = 0
AND gc_grace_seconds = 0
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 3600000
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
Infelizmente não posso abandoná-lo:
cqlsh> ALTER TABLE system.hints DROP COMPACT STORAGE;
Unauthorized: Error from server: code=2100 [Unauthorized] message="system keyspace is not user-modifiable."
Não consigo nem fazer o downgrade do nó para 3.11.13:
ERROR [main] 2024-06-20 08:38:07,157 CassandraDaemon.java:803 - Detected unreadable sstables /var/lib/cassandra/data/system/local/nb-244-big-Statistics.db,/var/lib/cassandra/data/system/local/nb-244-big-Data.db,/var/lib/cassandra/data/system/local/nb-244-big-Summary.db,/var/
lib/cassandra/data/system/local/nb-244-big-CompressionInfo.db,/var/lib/cassandra/data/system/local/nb-244-big-Index.db,/var/lib/cassandra/data/system/local/nb-244-big-Filter.db, please check NEWS.txt and ensure that you have upgraded through all required intermediate version
s, running upgradesstables
A tabela system.hints não está presente em meus outros clusters cassandra, onde a atualização ocorreu sem problemas.
Alguém tem alguma idéia de como sair dessa situação?
Depois de revisar o rastreamento de pilha, não acredito que o problema esteja relacionado à
system.hints
tabela.A exceção é lançada
TableMetadata$CompactTableMetadata.getCompactValueColumn()
quando tenta recuperar a coluna a em uma tabela que possuiCOMPACT STORAGE
. Suspeito que o erro se deva a outra tabela compacta que foi atualizada para ter uma coluna CQL regular (em vez de uma coluna compacta/Thrift) que é inválida.Uma tabela compacta (Thrift) não pode ter uma coluna CQL adicionada a ela, portanto ela não é mais permitida em uma
ALTER TABLE
instrução ( CASSANDRA-14564 ).Você precisará revisar o esquema do cluster novamente para tabelas compactas diferentes de
system.hints
. Infelizmente, não conheço outra solução para isso além de descartar e recriar a tabela ainda no C* 3.11.Além disso, você não pode fazer downgrade dos binários em um nó depois que ele estiver em execução com uma versão mais recente do Cassandra, pois isso gerará SSTables no novo formato que não pode ser lido pela versão mais antiga. Saúde!