Skip to content

Commit 967aaa0

Browse files
committed
add table_id to system_distributed.compression_dictionaries table
1 parent 940739a commit 967aaa0

10 files changed

Lines changed: 110 additions & 57 deletions

src/java/org/apache/cassandra/db/compression/CompressionDictionary.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,13 @@ static LightweightCompressionDictionary createFromRowLightweight(UntypedResultSe
261261
int size = row.getInt("dict_length");
262262
String keyspaceName = row.getString("keyspace_name");
263263
String tableName = row.getString("table_name");
264+
String tableId = row.getString("table_id");
264265

265266
try
266267
{
267268
return new LightweightCompressionDictionary(keyspaceName,
268269
tableName,
270+
tableId,
269271
new DictId(CompressionDictionary.Kind.valueOf(kindStr), dictId),
270272
checksum,
271273
size);
@@ -430,18 +432,21 @@ class LightweightCompressionDictionary
430432
{
431433
public final String keyspaceName;
432434
public final String tableName;
435+
public final String tableId;
433436
public final DictId dictId;
434437
public final int checksum;
435438
public final int size;
436439

437440
public LightweightCompressionDictionary(String keyspaceName,
438441
String tableName,
442+
String tableId,
439443
DictId dictId,
440444
int checksum,
441445
int size)
442446
{
443447
this.keyspaceName = keyspaceName;
444448
this.tableName = tableName;
449+
this.tableId = tableId;
445450
this.dictId = dictId;
446451
this.checksum = checksum;
447452
this.size = size;

src/java/org/apache/cassandra/db/compression/CompressionDictionaryDetailsTabularData.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,11 @@ public class CompressionDictionaryDetailsTabularData
4545
* We do not need to process this entry as listing does not contain any raw dictionary,
4646
* only exporting does.
4747
*/
48-
public static final int TABULAR_DATA_TYPE_RAW_DICTIONARY_INDEX = 3;
48+
public static final int TABULAR_DATA_TYPE_RAW_DICTIONARY_INDEX = 4;
4949

5050
public static final String KEYSPACE_NAME = "Keyspace";
5151
public static final String TABLE_NAME = "Table";
52+
public static final String TABLE_ID_NAME = "TableId";
5253
public static final String DICT_ID_NAME = "DictId";
5354
public static final String DICT_NAME = "Dict";
5455
public static final String KIND_NAME = "Kind";
@@ -58,6 +59,7 @@ public class CompressionDictionaryDetailsTabularData
5859

5960
private static final String[] ITEM_NAMES = new String[]{ KEYSPACE_NAME,
6061
TABLE_NAME,
62+
TABLE_ID_NAME,
6163
DICT_ID_NAME,
6264
DICT_NAME,
6365
KIND_NAME,
@@ -66,6 +68,7 @@ public class CompressionDictionaryDetailsTabularData
6668

6769
private static final String[] ITEM_DESCS = new String[]{ "keyspace",
6870
"table",
71+
"table_id",
6972
"dictionary_id",
7073
"dictionary_bytes",
7174
"kind",
@@ -84,6 +87,7 @@ public class CompressionDictionaryDetailsTabularData
8487
{
8588
ITEM_TYPES = new OpenType[]{ SimpleType.STRING, // keyspace
8689
SimpleType.STRING, // table
90+
SimpleType.STRING, // tableId
8791
SimpleType.LONG, // dict id
8892
new ArrayType<String[]>(SimpleType.BYTE, true), // dict bytes
8993
SimpleType.STRING, // kind
@@ -115,6 +119,7 @@ public static CompositeData fromLightweightCompressionDictionary(LightweightComp
115119
{
116120
dictionary.keyspaceName,
117121
dictionary.tableName,
122+
dictionary.tableId,
118123
dictionary.dictId.id,
119124
null, // on purpose not returning actual dictionary
120125
dictionary.dictId.kind.name(),
@@ -133,10 +138,11 @@ public static CompositeData fromLightweightCompressionDictionary(LightweightComp
133138
*
134139
* @param keyspace keyspace of a dictionary
135140
* @param table table of a dictionary
141+
* @param tableId id of a table dictionary is for
136142
* @param dictionary dictionary itself
137143
* @return composite data representing dictionary
138144
*/
139-
public static CompositeData fromCompressionDictionary(String keyspace, String table, CompressionDictionary dictionary)
145+
public static CompositeData fromCompressionDictionary(String keyspace, String table, String tableId, CompressionDictionary dictionary)
140146
{
141147
try
142148
{
@@ -146,6 +152,7 @@ public static CompositeData fromCompressionDictionary(String keyspace, String ta
146152
{
147153
keyspace,
148154
table,
155+
tableId,
149156
dictionary.dictId().id,
150157
dictionary.rawDictionary(),
151158
dictionary.kind().name(),
@@ -176,6 +183,7 @@ public static CompositeData fromCompressionDictionaryDataObject(CompressionDicti
176183
{
177184
dataObject.keyspace,
178185
dataObject.table,
186+
dataObject.tableId,
179187
dataObject.dictId,
180188
dataObject.dict,
181189
dataObject.kind,
@@ -200,6 +208,7 @@ public static CompressionDictionaryDataObject fromCompositeData(CompositeData co
200208
{
201209
return new CompressionDictionaryDataObject((String) compositeData.get(CompressionDictionaryDetailsTabularData.KEYSPACE_NAME),
202210
(String) compositeData.get(CompressionDictionaryDetailsTabularData.TABLE_NAME),
211+
(String) compositeData.get(CompressionDictionaryDetailsTabularData.TABLE_ID_NAME),
203212
(Long) compositeData.get(CompressionDictionaryDetailsTabularData.DICT_ID_NAME),
204213
(byte[]) compositeData.get(CompressionDictionaryDetailsTabularData.DICT_NAME),
205214
(String) compositeData.get(CompressionDictionaryDetailsTabularData.KIND_NAME),
@@ -211,6 +220,7 @@ public static class CompressionDictionaryDataObject
211220
{
212221
public final String keyspace;
213222
public final String table;
223+
public final String tableId;
214224
public final long dictId;
215225
public final byte[] dict;
216226
public final String kind;
@@ -220,6 +230,7 @@ public static class CompressionDictionaryDataObject
220230
@JsonCreator
221231
public CompressionDictionaryDataObject(@JsonProperty("keyspace") String keyspace,
222232
@JsonProperty("table") String table,
233+
@JsonProperty("tableId") String tableId,
223234
@JsonProperty("dictId") long dictId,
224235
@JsonProperty("dict") byte[] dict,
225236
@JsonProperty("kind") String kind,
@@ -228,6 +239,7 @@ public CompressionDictionaryDataObject(@JsonProperty("keyspace") String keyspace
228239
{
229240
this.keyspace = keyspace;
230241
this.table = table;
242+
this.tableId = tableId;
231243
this.dictId = dictId;
232244
this.dict = dict;
233245
this.kind = kind;
@@ -241,7 +253,7 @@ public CompressionDictionaryDataObject(@JsonProperty("keyspace") String keyspace
241253
* An object of this class is considered to be valid if:
242254
*
243255
* <ul>
244-
* <li>keyspace and table are not null</li>
256+
* <li>keyspace, table and table id are not null</li>
245257
* <li>dict id is lower than 0</li>
246258
* <li>dict is not null nor empty</li>
247259
* <li>dict length is less than or equal to 1MiB</li>
@@ -257,6 +269,8 @@ private void validate()
257269
throw new IllegalArgumentException("Keyspace not specified.");
258270
if (table == null)
259271
throw new IllegalArgumentException("Table not specified.");
272+
if (tableId == null)
273+
throw new IllegalArgumentException("Table id not specified");
260274
if (dictId <= 0)
261275
throw new IllegalArgumentException("Provided dictionary id must be positive but it is '" + dictId + "'.");
262276
if (dict == null || dict.length == 0)

src/java/org/apache/cassandra/db/compression/CompressionDictionaryEventHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public void onNewDictionaryAvailable(CompressionDictionary.DictId dictionaryId)
8787
return;
8888
}
8989

90-
CompressionDictionary dictionary = SystemDistributedKeyspace.retrieveCompressionDictionary(keyspaceName, tableName, dictionaryId.id);
90+
CompressionDictionary dictionary = SystemDistributedKeyspace.retrieveCompressionDictionary(keyspaceName, tableName, cfs.metadata().id.toLongString(), dictionaryId.id);
9191
cache.add(dictionary);
9292
}
9393
catch (Exception e)

src/java/org/apache/cassandra/db/compression/CompressionDictionaryManager.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public class CompressionDictionaryManager implements CompressionDictionaryManage
5959

6060
private final String keyspaceName;
6161
private final String tableName;
62+
private final String tableId;
6263
private final ColumnFamilyStore columnFamilyStore;
6364
private volatile boolean mbeanRegistered;
6465
private volatile boolean isEnabled;
@@ -73,12 +74,13 @@ public CompressionDictionaryManager(ColumnFamilyStore columnFamilyStore, boolean
7374
{
7475
this.keyspaceName = columnFamilyStore.keyspace.getName();
7576
this.tableName = columnFamilyStore.getTableName();
77+
this.tableId = columnFamilyStore.metadata().id.toLongString();
7678
this.columnFamilyStore = columnFamilyStore;
7779

7880
this.isEnabled = columnFamilyStore.metadata().params.compression.isDictionaryCompressionEnabled();
7981
this.cache = new CompressionDictionaryCache();
8082
this.eventHandler = new CompressionDictionaryEventHandler(columnFamilyStore, cache);
81-
this.scheduler = new CompressionDictionaryScheduler(keyspaceName, tableName, cache, isEnabled);
83+
this.scheduler = new CompressionDictionaryScheduler(keyspaceName, tableName, tableId, cache, isEnabled);
8284
if (isEnabled)
8385
{
8486
// Initialize components
@@ -270,7 +272,7 @@ public CompositeData getTrainingState()
270272
@Override
271273
public TabularData listCompressionDictionaries()
272274
{
273-
List<LightweightCompressionDictionary> dictionaries = SystemDistributedKeyspace.retrieveLightweightCompressionDictionaries(keyspaceName, tableName);
275+
List<LightweightCompressionDictionary> dictionaries = SystemDistributedKeyspace.retrieveLightweightCompressionDictionaries(keyspaceName, tableName, tableId);
274276
TabularDataSupport tableData = new TabularDataSupport(CompressionDictionaryDetailsTabularData.TABULAR_TYPE);
275277

276278
if (dictionaries == null)
@@ -289,21 +291,21 @@ public TabularData listCompressionDictionaries()
289291
@Override
290292
public CompositeData getCompressionDictionary()
291293
{
292-
CompressionDictionary compressionDictionary = SystemDistributedKeyspace.retrieveLatestCompressionDictionary(keyspaceName, tableName);
294+
CompressionDictionary compressionDictionary = SystemDistributedKeyspace.retrieveLatestCompressionDictionary(keyspaceName, tableName, tableId);
293295
if (compressionDictionary == null)
294296
return null;
295297

296-
return CompressionDictionaryDetailsTabularData.fromCompressionDictionary(keyspaceName, tableName, compressionDictionary);
298+
return CompressionDictionaryDetailsTabularData.fromCompressionDictionary(keyspaceName, tableName, tableId, compressionDictionary);
297299
}
298300

299301
@Override
300302
public CompositeData getCompressionDictionary(long dictId)
301303
{
302-
CompressionDictionary compressionDictionary = SystemDistributedKeyspace.retrieveCompressionDictionary(keyspaceName, tableName, dictId);
304+
CompressionDictionary compressionDictionary = SystemDistributedKeyspace.retrieveCompressionDictionary(keyspaceName, tableName, tableId, dictId);
303305
if (compressionDictionary == null)
304306
return null;
305307

306-
return CompressionDictionaryDetailsTabularData.fromCompressionDictionary(keyspaceName, tableName, compressionDictionary);
308+
return CompressionDictionaryDetailsTabularData.fromCompressionDictionary(keyspaceName, tableName, tableId, compressionDictionary);
307309
}
308310

309311
@Override
@@ -333,7 +335,7 @@ public synchronized void importCompressionDictionary(CompositeData compositeData
333335

334336
CompressionDictionary.DictId dictId = new CompressionDictionary.DictId(kind, dataObject.dictId);
335337

336-
LightweightCompressionDictionary latestCompressionDictionary = SystemDistributedKeyspace.retrieveLightweightLatestCompressionDictionary(keyspaceName, tableName);
338+
LightweightCompressionDictionary latestCompressionDictionary = SystemDistributedKeyspace.retrieveLightweightLatestCompressionDictionary(keyspaceName, tableName, tableId);
337339
if (latestCompressionDictionary != null && latestCompressionDictionary.dictId.id > dictId.id)
338340
{
339341
throw new IllegalArgumentException(format("Dictionary to import has older dictionary id (%s) than the latest compression dictionary (%s) for table %s.%s",
@@ -438,7 +440,7 @@ private void storeDictionary(CompressionDictionary dictionary)
438440
return;
439441
}
440442

441-
SystemDistributedKeyspace.storeCompressionDictionary(keyspaceName, tableName, dictionary);
443+
SystemDistributedKeyspace.storeCompressionDictionary(keyspaceName, tableName, tableId, dictionary);
442444
cache.add(dictionary);
443445
}
444446

src/java/org/apache/cassandra/db/compression/CompressionDictionaryScheduler.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public class CompressionDictionaryScheduler implements ICompressionDictionarySch
5151

5252
private final String keyspaceName;
5353
private final String tableName;
54+
private final String tableId;
5455
private final ICompressionDictionaryCache cache;
5556
private final AtomicBoolean manualTrainingInProgress = new AtomicBoolean(false);
5657

@@ -59,11 +60,13 @@ public class CompressionDictionaryScheduler implements ICompressionDictionarySch
5960

6061
public CompressionDictionaryScheduler(String keyspaceName,
6162
String tableName,
63+
String tableId,
6264
ICompressionDictionaryCache cache,
6365
boolean isEnabled)
6466
{
6567
this.keyspaceName = keyspaceName;
6668
this.tableName = tableName;
69+
this.tableId = tableId;
6770
this.cache = cache;
6871
this.isEnabled = isEnabled;
6972
}
@@ -135,7 +138,7 @@ private void refreshDictionaryFromSystemTable()
135138
return;
136139
}
137140

138-
CompressionDictionary dictionary = SystemDistributedKeyspace.retrieveLatestCompressionDictionary(keyspaceName, tableName);
141+
CompressionDictionary dictionary = SystemDistributedKeyspace.retrieveLatestCompressionDictionary(keyspaceName, tableName, tableId);
139142
cache.add(dictionary);
140143
}
141144
catch (Exception e)

0 commit comments

Comments
 (0)