From 967aaa07e2ac38d2a07063ca78f8397ff0b78175 Mon Sep 17 00:00:00 2001 From: Stefan Miklosovic Date: Wed, 4 Feb 2026 18:49:01 +1100 Subject: [PATCH 1/2] add table_id to system_distributed.compression_dictionaries table --- .../db/compression/CompressionDictionary.java | 5 +++ ...mpressionDictionaryDetailsTabularData.java | 20 +++++++-- .../CompressionDictionaryEventHandler.java | 2 +- .../CompressionDictionaryManager.java | 18 ++++---- .../CompressionDictionaryScheduler.java | 5 ++- .../schema/SystemDistributedKeyspace.java | 42 ++++++++++++------- .../CompressionDictionaryDataObjectTest.java | 18 +++++++- .../CompressionDictionarySchedulerTest.java | 7 ++-- ...utedKeyspaceCompressionDictionaryTest.java | 42 ++++++++++--------- ...rtImportListCompressionDictionaryTest.java | 8 ++-- 10 files changed, 110 insertions(+), 57 deletions(-) diff --git a/src/java/org/apache/cassandra/db/compression/CompressionDictionary.java b/src/java/org/apache/cassandra/db/compression/CompressionDictionary.java index bbacacd85ca2..feda5644050c 100644 --- a/src/java/org/apache/cassandra/db/compression/CompressionDictionary.java +++ b/src/java/org/apache/cassandra/db/compression/CompressionDictionary.java @@ -261,11 +261,13 @@ static LightweightCompressionDictionary createFromRowLightweight(UntypedResultSe int size = row.getInt("dict_length"); String keyspaceName = row.getString("keyspace_name"); String tableName = row.getString("table_name"); + String tableId = row.getString("table_id"); try { return new LightweightCompressionDictionary(keyspaceName, tableName, + tableId, new DictId(CompressionDictionary.Kind.valueOf(kindStr), dictId), checksum, size); @@ -430,18 +432,21 @@ class LightweightCompressionDictionary { public final String keyspaceName; public final String tableName; + public final String tableId; public final DictId dictId; public final int checksum; public final int size; public LightweightCompressionDictionary(String keyspaceName, String tableName, + String tableId, DictId dictId, int checksum, int size) { this.keyspaceName = keyspaceName; this.tableName = tableName; + this.tableId = tableId; this.dictId = dictId; this.checksum = checksum; this.size = size; diff --git a/src/java/org/apache/cassandra/db/compression/CompressionDictionaryDetailsTabularData.java b/src/java/org/apache/cassandra/db/compression/CompressionDictionaryDetailsTabularData.java index 3802c10abac6..8f0620a6ed65 100644 --- a/src/java/org/apache/cassandra/db/compression/CompressionDictionaryDetailsTabularData.java +++ b/src/java/org/apache/cassandra/db/compression/CompressionDictionaryDetailsTabularData.java @@ -45,10 +45,11 @@ public class CompressionDictionaryDetailsTabularData * We do not need to process this entry as listing does not contain any raw dictionary, * only exporting does. */ - public static final int TABULAR_DATA_TYPE_RAW_DICTIONARY_INDEX = 3; + public static final int TABULAR_DATA_TYPE_RAW_DICTIONARY_INDEX = 4; public static final String KEYSPACE_NAME = "Keyspace"; public static final String TABLE_NAME = "Table"; + public static final String TABLE_ID_NAME = "TableId"; public static final String DICT_ID_NAME = "DictId"; public static final String DICT_NAME = "Dict"; public static final String KIND_NAME = "Kind"; @@ -58,6 +59,7 @@ public class CompressionDictionaryDetailsTabularData private static final String[] ITEM_NAMES = new String[]{ KEYSPACE_NAME, TABLE_NAME, + TABLE_ID_NAME, DICT_ID_NAME, DICT_NAME, KIND_NAME, @@ -66,6 +68,7 @@ public class CompressionDictionaryDetailsTabularData private static final String[] ITEM_DESCS = new String[]{ "keyspace", "table", + "table_id", "dictionary_id", "dictionary_bytes", "kind", @@ -84,6 +87,7 @@ public class CompressionDictionaryDetailsTabularData { ITEM_TYPES = new OpenType[]{ SimpleType.STRING, // keyspace SimpleType.STRING, // table + SimpleType.STRING, // tableId SimpleType.LONG, // dict id new ArrayType(SimpleType.BYTE, true), // dict bytes SimpleType.STRING, // kind @@ -115,6 +119,7 @@ public static CompositeData fromLightweightCompressionDictionary(LightweightComp { dictionary.keyspaceName, dictionary.tableName, + dictionary.tableId, dictionary.dictId.id, null, // on purpose not returning actual dictionary dictionary.dictId.kind.name(), @@ -133,10 +138,11 @@ public static CompositeData fromLightweightCompressionDictionary(LightweightComp * * @param keyspace keyspace of a dictionary * @param table table of a dictionary + * @param tableId id of a table dictionary is for * @param dictionary dictionary itself * @return composite data representing dictionary */ - public static CompositeData fromCompressionDictionary(String keyspace, String table, CompressionDictionary dictionary) + public static CompositeData fromCompressionDictionary(String keyspace, String table, String tableId, CompressionDictionary dictionary) { try { @@ -146,6 +152,7 @@ public static CompositeData fromCompressionDictionary(String keyspace, String ta { keyspace, table, + tableId, dictionary.dictId().id, dictionary.rawDictionary(), dictionary.kind().name(), @@ -176,6 +183,7 @@ public static CompositeData fromCompressionDictionaryDataObject(CompressionDicti { dataObject.keyspace, dataObject.table, + dataObject.tableId, dataObject.dictId, dataObject.dict, dataObject.kind, @@ -200,6 +208,7 @@ public static CompressionDictionaryDataObject fromCompositeData(CompositeData co { return new CompressionDictionaryDataObject((String) compositeData.get(CompressionDictionaryDetailsTabularData.KEYSPACE_NAME), (String) compositeData.get(CompressionDictionaryDetailsTabularData.TABLE_NAME), + (String) compositeData.get(CompressionDictionaryDetailsTabularData.TABLE_ID_NAME), (Long) compositeData.get(CompressionDictionaryDetailsTabularData.DICT_ID_NAME), (byte[]) compositeData.get(CompressionDictionaryDetailsTabularData.DICT_NAME), (String) compositeData.get(CompressionDictionaryDetailsTabularData.KIND_NAME), @@ -211,6 +220,7 @@ public static class CompressionDictionaryDataObject { public final String keyspace; public final String table; + public final String tableId; public final long dictId; public final byte[] dict; public final String kind; @@ -220,6 +230,7 @@ public static class CompressionDictionaryDataObject @JsonCreator public CompressionDictionaryDataObject(@JsonProperty("keyspace") String keyspace, @JsonProperty("table") String table, + @JsonProperty("tableId") String tableId, @JsonProperty("dictId") long dictId, @JsonProperty("dict") byte[] dict, @JsonProperty("kind") String kind, @@ -228,6 +239,7 @@ public CompressionDictionaryDataObject(@JsonProperty("keyspace") String keyspace { this.keyspace = keyspace; this.table = table; + this.tableId = tableId; this.dictId = dictId; this.dict = dict; this.kind = kind; @@ -241,7 +253,7 @@ public CompressionDictionaryDataObject(@JsonProperty("keyspace") String keyspace * An object of this class is considered to be valid if: * *