Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id B0E05200C06 for ; Fri, 27 Jan 2017 23:19:07 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id AF670160B60; Fri, 27 Jan 2017 22:19:07 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 667E5160B5B for ; Fri, 27 Jan 2017 23:19:05 +0100 (CET) Received: (qmail 93856 invoked by uid 500); 27 Jan 2017 22:18:08 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 93198 invoked by uid 99); 27 Jan 2017 22:18:07 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 27 Jan 2017 22:18:07 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 95367DFE46; Fri, 27 Jan 2017 22:18:07 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: aleksey@apache.org To: commits@cassandra.apache.org Date: Fri, 27 Jan 2017 22:18:19 -0000 Message-Id: <9e1300084d6b4d69b63e2b04e89eb0cb@git.apache.org> In-Reply-To: <3e1af5b607aa46959376b1244e21659a@git.apache.org> References: <3e1af5b607aa46959376b1244e21659a@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [13/37] cassandra git commit: Make TableMetadata immutable, optimize Schema archived-at: Fri, 27 Jan 2017 22:19:07 -0000 http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/test/unit/org/apache/cassandra/SchemaLoader.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/SchemaLoader.java b/test/unit/org/apache/cassandra/SchemaLoader.java index 2bf4805..c2efb6a 100644 --- a/test/unit/org/apache/cassandra/SchemaLoader.java +++ b/test/unit/org/apache/cassandra/SchemaLoader.java @@ -21,6 +21,7 @@ import java.io.File; import java.io.IOException; import java.util.*; +import org.apache.cassandra.cql3.statements.CreateTableStatement; import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.index.sasi.SASIIndex; import org.apache.cassandra.index.sasi.disk.OnDiskIndexBuilder; @@ -39,7 +40,7 @@ import org.apache.cassandra.gms.Gossiper; import org.apache.cassandra.index.StubIndex; import org.apache.cassandra.io.util.FileUtils; import org.apache.cassandra.schema.*; -import org.apache.cassandra.service.MigrationManager; +import org.apache.cassandra.schema.MigrationManager; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; @@ -119,44 +120,31 @@ public class SchemaLoader KeyspaceParams.simple(1), Tables.of( // Column Families - standardCFMD(ks1, "Standard1").compaction(CompactionParams.scts(compactionOptions)), - standardCFMD(ks1, "Standard2"), - standardCFMD(ks1, "Standard3"), - standardCFMD(ks1, "Standard4"), - standardCFMD(ks1, "StandardGCGS0").gcGraceSeconds(0), - standardCFMD(ks1, "StandardLong1"), - standardCFMD(ks1, "StandardLong2"), - //CFMetaData.Builder.create(ks1, "ValuesWithQuotes").build(), - superCFMD(ks1, "Super1", LongType.instance), - superCFMD(ks1, "Super2", LongType.instance), - superCFMD(ks1, "Super3", LongType.instance), - superCFMD(ks1, "Super4", UTF8Type.instance), - superCFMD(ks1, "Super5", bytes), - superCFMD(ks1, "Super6", LexicalUUIDType.instance, UTF8Type.instance), - keysIndexCFMD(ks1, "Indexed1", true), - keysIndexCFMD(ks1, "Indexed2", false), - //CFMetaData.Builder.create(ks1, "StandardInteger1").withColumnNameComparator(IntegerType.instance).build(), - //CFMetaData.Builder.create(ks1, "StandardLong3").withColumnNameComparator(IntegerType.instance).build(), - //CFMetaData.Builder.create(ks1, "Counter1", false, false, true).build(), - //CFMetaData.Builder.create(ks1, "SuperCounter1", false, false, true, true).build(), - superCFMD(ks1, "SuperDirectGC", BytesType.instance).gcGraceSeconds(0), -// jdbcCFMD(ks1, "JdbcInteger", IntegerType.instance).addColumnDefinition(integerColumn(ks1, "JdbcInteger")), - jdbcCFMD(ks1, "JdbcUtf8", UTF8Type.instance).addColumnDefinition(utf8Column(ks1, "JdbcUtf8")), - jdbcCFMD(ks1, "JdbcLong", LongType.instance), - jdbcCFMD(ks1, "JdbcBytes", bytes), - jdbcCFMD(ks1, "JdbcAscii", AsciiType.instance), - //CFMetaData.Builder.create(ks1, "StandardComposite", false, true, false).withColumnNameComparator(composite).build(), - //CFMetaData.Builder.create(ks1, "StandardComposite2", false, true, false).withColumnNameComparator(compositeMaxMin).build(), - //CFMetaData.Builder.create(ks1, "StandardDynamicComposite", false, true, false).withColumnNameComparator(dynamicComposite).build(), - standardCFMD(ks1, "StandardLeveled").compaction(CompactionParams.lcs(leveledOptions)), - standardCFMD(ks1, "legacyleveled").compaction(CompactionParams.lcs(leveledOptions)), + standardCFMD(ks1, "Standard1").compaction(CompactionParams.scts(compactionOptions)).build(), + standardCFMD(ks1, "Standard2").build(), + standardCFMD(ks1, "Standard3").build(), + standardCFMD(ks1, "Standard4").build(), + standardCFMD(ks1, "StandardGCGS0").gcGraceSeconds(0).build(), + standardCFMD(ks1, "StandardLong1").build(), + standardCFMD(ks1, "StandardLong2").build(), + superCFMD(ks1, "Super1", LongType.instance).build(), + superCFMD(ks1, "Super2", LongType.instance).build(), + superCFMD(ks1, "Super3", LongType.instance).build(), + superCFMD(ks1, "Super4", UTF8Type.instance).build(), + superCFMD(ks1, "Super5", bytes).build(), + superCFMD(ks1, "Super6", LexicalUUIDType.instance, UTF8Type.instance).build(), + keysIndexCFMD(ks1, "Indexed1", true).build(), + keysIndexCFMD(ks1, "Indexed2", false).build(), + superCFMD(ks1, "SuperDirectGC", BytesType.instance).gcGraceSeconds(0).build(), + jdbcCFMD(ks1, "JdbcUtf8", UTF8Type.instance).addColumn(utf8Column(ks1, "JdbcUtf8")).build(), + jdbcCFMD(ks1, "JdbcLong", LongType.instance).build(), + jdbcCFMD(ks1, "JdbcBytes", bytes).build(), + jdbcCFMD(ks1, "JdbcAscii", AsciiType.instance).build(), + standardCFMD(ks1, "StandardLeveled").compaction(CompactionParams.lcs(leveledOptions)).build(), + standardCFMD(ks1, "legacyleveled").compaction(CompactionParams.lcs(leveledOptions)).build(), standardCFMD(ks1, "StandardLowIndexInterval").minIndexInterval(8) .maxIndexInterval(256) - .caching(CachingParams.CACHE_NOTHING) - //CFMetaData.Builder.create(ks1, "UUIDKeys").addPartitionKey("key",UUIDType.instance).build(), - //CFMetaData.Builder.create(ks1, "MixedTypes").withColumnNameComparator(LongType.instance).addPartitionKey("key", UUIDType.instance).build(), - //CFMetaData.Builder.create(ks1, "MixedTypesComposite", false, true, false).withColumnNameComparator(composite).addPartitionKey("key", composite).build(), - //CFMetaData.Builder.create(ks1, "AsciiKeys").addPartitionKey("key", AsciiType.instance).build() + .caching(CachingParams.CACHE_NOTHING).build() ))); // Keyspace 2 @@ -164,118 +152,135 @@ public class SchemaLoader KeyspaceParams.simple(1), Tables.of( // Column Families - standardCFMD(ks2, "Standard1"), - standardCFMD(ks2, "Standard3"), - superCFMD(ks2, "Super3", bytes), - superCFMD(ks2, "Super4", TimeUUIDType.instance), - keysIndexCFMD(ks2, "Indexed1", true), - compositeIndexCFMD(ks2, "Indexed2", true), - compositeIndexCFMD(ks2, "Indexed3", true).gcGraceSeconds(0)))); + standardCFMD(ks2, "Standard1").build(), + standardCFMD(ks2, "Standard3").build(), + superCFMD(ks2, "Super3", bytes).build(), + superCFMD(ks2, "Super4", TimeUUIDType.instance).build(), + keysIndexCFMD(ks2, "Indexed1", true).build(), + compositeIndexCFMD(ks2, "Indexed2", true).build(), + compositeIndexCFMD(ks2, "Indexed3", true).gcGraceSeconds(0).build()))); // Keyspace 3 schema.add(KeyspaceMetadata.create(ks3, KeyspaceParams.simple(5), Tables.of( - standardCFMD(ks3, "Standard1"), - keysIndexCFMD(ks3, "Indexed1", true)))); + standardCFMD(ks3, "Standard1").build(), + keysIndexCFMD(ks3, "Indexed1", true).build()))); // Keyspace 4 schema.add(KeyspaceMetadata.create(ks4, KeyspaceParams.simple(3), Tables.of( - standardCFMD(ks4, "Standard1"), - standardCFMD(ks4, "Standard3"), - superCFMD(ks4, "Super3", bytes), - superCFMD(ks4, "Super4", TimeUUIDType.instance), - superCFMD(ks4, "Super5", TimeUUIDType.instance, BytesType.instance)))); + standardCFMD(ks4, "Standard1").build(), + standardCFMD(ks4, "Standard3").build(), + superCFMD(ks4, "Super3", bytes).build(), + superCFMD(ks4, "Super4", TimeUUIDType.instance).build(), + superCFMD(ks4, "Super5", TimeUUIDType.instance, BytesType.instance).build()))); // Keyspace 5 schema.add(KeyspaceMetadata.create(ks5, KeyspaceParams.simple(2), - Tables.of(standardCFMD(ks5, "Standard1")))); + Tables.of(standardCFMD(ks5, "Standard1").build()))); // Keyspace 6 schema.add(KeyspaceMetadata.create(ks6, KeyspaceParams.simple(1), - Tables.of(keysIndexCFMD(ks6, "Indexed1", true)))); + Tables.of(keysIndexCFMD(ks6, "Indexed1", true).build()))); // Keyspace 7 schema.add(KeyspaceMetadata.create(ks7, KeyspaceParams.simple(1), - Tables.of(customIndexCFMD(ks7, "Indexed1")))); + Tables.of(customIndexCFMD(ks7, "Indexed1").build()))); // KeyCacheSpace schema.add(KeyspaceMetadata.create(ks_kcs, KeyspaceParams.simple(1), Tables.of( - standardCFMD(ks_kcs, "Standard1"), - standardCFMD(ks_kcs, "Standard2"), - standardCFMD(ks_kcs, "Standard3")))); + standardCFMD(ks_kcs, "Standard1").build(), + standardCFMD(ks_kcs, "Standard2").build(), + standardCFMD(ks_kcs, "Standard3").build()))); // RowCacheSpace schema.add(KeyspaceMetadata.create(ks_rcs, KeyspaceParams.simple(1), Tables.of( - standardCFMD(ks_rcs, "CFWithoutCache").caching(CachingParams.CACHE_NOTHING), - standardCFMD(ks_rcs, "CachedCF").caching(CachingParams.CACHE_EVERYTHING), - standardCFMD(ks_rcs, "CachedNoClustering", 1, IntegerType.instance, IntegerType.instance, null).caching(CachingParams.CACHE_EVERYTHING), - standardCFMD(ks_rcs, "CachedIntCF"). - caching(new CachingParams(true, 100))))); - - // CounterCacheSpace - /*schema.add(KeyspaceMetadata.testMetadata(ks_ccs, - simple, - opts_rf1, - CFMetaData.Builder.create(ks_ccs, "Counter1", false, false, true).build(), - CFMetaData.Builder.create(ks_ccs, "Counter1", false, false, true).build()));*/ + standardCFMD(ks_rcs, "CFWithoutCache").caching(CachingParams.CACHE_NOTHING).build(), + standardCFMD(ks_rcs, "CachedCF").caching(CachingParams.CACHE_EVERYTHING).build(), + standardCFMD(ks_rcs, "CachedNoClustering", 1, IntegerType.instance, IntegerType.instance, null).caching(CachingParams.CACHE_EVERYTHING).build(), + standardCFMD(ks_rcs, "CachedIntCF").caching(new CachingParams(true, 100)).build()))); schema.add(KeyspaceMetadata.create(ks_nocommit, KeyspaceParams.simpleTransient(1), Tables.of( - standardCFMD(ks_nocommit, "Standard1")))); + standardCFMD(ks_nocommit, "Standard1").build()))); // CQLKeyspace schema.add(KeyspaceMetadata.create(ks_cql, KeyspaceParams.simple(1), Tables.of( - // Column Families - CFMetaData.compile("CREATE TABLE table1 (" - + "k int PRIMARY KEY," - + "v1 text," - + "v2 int" - + ")", ks_cql), - - CFMetaData.compile("CREATE TABLE table2 (" - + "k text," - + "c text," - + "v text," - + "PRIMARY KEY (k, c))", ks_cql), - CFMetaData.compile("CREATE TABLE foo (" - + "bar text, " - + "baz text, " - + "qux text, " - + "PRIMARY KEY(bar, baz) ) " - + "WITH COMPACT STORAGE", ks_cql), - CFMetaData.compile("CREATE TABLE foofoo (" - + "bar text, " - + "baz text, " - + "qux text, " - + "quz text, " - + "foo text, " - + "PRIMARY KEY((bar, baz), qux, quz) ) " - + "WITH COMPACT STORAGE", ks_cql) + // Column Families + CreateTableStatement.parse("CREATE TABLE table1 (" + + "k int PRIMARY KEY," + + "v1 text," + + "v2 int" + + ")", ks_cql) + .build(), + + CreateTableStatement.parse("CREATE TABLE table2 (" + + "k text," + + "c text," + + "v text," + + "PRIMARY KEY (k, c))", ks_cql) + .build(), + + CreateTableStatement.parse("CREATE TABLE foo (" + + "bar text, " + + "baz text, " + + "qux text, " + + "PRIMARY KEY(bar, baz) ) " + + "WITH COMPACT STORAGE", ks_cql) + .build(), + + CreateTableStatement.parse("CREATE TABLE foofoo (" + + "bar text, " + + "baz text, " + + "qux text, " + + "quz text, " + + "foo text, " + + "PRIMARY KEY((bar, baz), qux, quz) ) " + + "WITH COMPACT STORAGE", ks_cql) + .build() ))); if (DatabaseDescriptor.getPartitioner() instanceof Murmur3Partitioner) - schema.add(KeyspaceMetadata.create("sasi", KeyspaceParams.simpleTransient(1), Tables.of(sasiCFMD("sasi", "test_cf"), clusteringSASICFMD("sasi", "clustering_test_cf")))); - - if (Boolean.parseBoolean(System.getProperty("cassandra.test.compression", "false"))) - useCompression(schema); + { + schema.add(KeyspaceMetadata.create("sasi", + KeyspaceParams.simpleTransient(1), + Tables.of(sasiCFMD("sasi", "test_cf").build(), + clusteringSASICFMD("sasi", "clustering_test_cf").build()))); + } // if you're messing with low-level sstable stuff, it can be useful to inject the schema directly // Schema.instance.load(schemaDefinition()); for (KeyspaceMetadata ksm : schema) MigrationManager.announceNewKeyspace(ksm, false); + + if (Boolean.parseBoolean(System.getProperty("cassandra.test.compression", "false"))) + useCompression(schema); + } + + public static void createKeyspace(String name, KeyspaceParams params) + { + MigrationManager.announceNewKeyspace(KeyspaceMetadata.create(name, params, Tables.of()), true); } - public static void createKeyspace(String name, KeyspaceParams params, CFMetaData... tables) + public static void createKeyspace(String name, KeyspaceParams params, TableMetadata.Builder... builders) + { + Tables.Builder tables = Tables.builder(); + for (TableMetadata.Builder builder : builders) + tables.add(builder.build()); + + MigrationManager.announceNewKeyspace(KeyspaceMetadata.create(name, params, tables.build()), true); + } + + public static void createKeyspace(String name, KeyspaceParams params, TableMetadata... tables) { MigrationManager.announceNewKeyspace(KeyspaceMetadata.create(name, params, Tables.of(tables)), true); } @@ -285,384 +290,374 @@ public class SchemaLoader MigrationManager.announceNewKeyspace(KeyspaceMetadata.create(name, params, tables, Views.none(), types, Functions.none()), true); } - public static ColumnDefinition integerColumn(String ksName, String cfName) + public static ColumnMetadata integerColumn(String ksName, String cfName) { - return new ColumnDefinition(ksName, - cfName, - ColumnIdentifier.getInterned(IntegerType.instance.fromString("42"), IntegerType.instance), - UTF8Type.instance, - ColumnDefinition.NO_POSITION, - ColumnDefinition.Kind.REGULAR); + return new ColumnMetadata(ksName, + cfName, + ColumnIdentifier.getInterned(IntegerType.instance.fromString("42"), IntegerType.instance), + UTF8Type.instance, + ColumnMetadata.NO_POSITION, + ColumnMetadata.Kind.REGULAR); } - public static ColumnDefinition utf8Column(String ksName, String cfName) + public static ColumnMetadata utf8Column(String ksName, String cfName) { - return new ColumnDefinition(ksName, - cfName, - ColumnIdentifier.getInterned("fortytwo", true), - UTF8Type.instance, - ColumnDefinition.NO_POSITION, - ColumnDefinition.Kind.REGULAR); + return new ColumnMetadata(ksName, + cfName, + ColumnIdentifier.getInterned("fortytwo", true), + UTF8Type.instance, + ColumnMetadata.NO_POSITION, + ColumnMetadata.Kind.REGULAR); } - public static CFMetaData perRowIndexedCFMD(String ksName, String cfName) + public static TableMetadata perRowIndexedCFMD(String ksName, String cfName) { - final Map indexOptions = Collections.singletonMap( - IndexTarget.CUSTOM_INDEX_OPTION_NAME, - StubIndex.class.getName()); + ColumnMetadata indexedColumn = ColumnMetadata.regularColumn(ksName, cfName, "indexed", AsciiType.instance); - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("key", AsciiType.instance) - .build(); + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("key", AsciiType.instance) + .addColumn(indexedColumn); - ColumnDefinition indexedColumn = ColumnDefinition.regularDef(ksName, cfName, "indexed", AsciiType.instance); - cfm.addOrReplaceColumnDefinition(indexedColumn); + final Map indexOptions = Collections.singletonMap(IndexTarget.CUSTOM_INDEX_OPTION_NAME, StubIndex.class.getName()); + builder.indexes(Indexes.of(IndexMetadata.fromIndexTargets( + Collections.singletonList(new IndexTarget(indexedColumn.name, + IndexTarget.Type.VALUES)), + "indexe1", + IndexMetadata.Kind.CUSTOM, + indexOptions))); - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList(new IndexTarget(indexedColumn.name, - IndexTarget.Type.VALUES)), - "indexe1", - IndexMetadata.Kind.CUSTOM, - indexOptions))); - return cfm; + return builder.build(); } private static void useCompression(List schema) { for (KeyspaceMetadata ksm : schema) - for (CFMetaData cfm : ksm.tablesAndViews()) - cfm.compression(CompressionParams.snappy()); + for (TableMetadata cfm : ksm.tablesAndViews()) + MigrationManager.announceTableUpdate(cfm.unbuild().compression(CompressionParams.snappy()).build(), true); } - public static CFMetaData counterCFMD(String ksName, String cfName) + public static TableMetadata.Builder counterCFMD(String ksName, String cfName) { - return CFMetaData.Builder.create(ksName, cfName, false, true, true) - .addPartitionKey("key", AsciiType.instance) - .addClusteringColumn("name", AsciiType.instance) - .addRegularColumn("val", CounterColumnType.instance) - .addRegularColumn("val2", CounterColumnType.instance) - .build() - .compression(getCompressionParameters()); + return TableMetadata.builder(ksName, cfName) + .isCounter(true) + .addPartitionKeyColumn("key", AsciiType.instance) + .addClusteringColumn("name", AsciiType.instance) + .addRegularColumn("val", CounterColumnType.instance) + .addRegularColumn("val2", CounterColumnType.instance) + .compression(getCompressionParameters()); } - public static CFMetaData standardCFMD(String ksName, String cfName) + public static TableMetadata.Builder standardCFMD(String ksName, String cfName) { return standardCFMD(ksName, cfName, 1, AsciiType.instance); } - public static CFMetaData standardCFMD(String ksName, String cfName, int columnCount, AbstractType keyType) + public static TableMetadata.Builder standardCFMD(String ksName, String cfName, int columnCount, AbstractType keyType) { return standardCFMD(ksName, cfName, columnCount, keyType, AsciiType.instance); } - public static CFMetaData standardCFMD(String ksName, String cfName, int columnCount, AbstractType keyType, AbstractType valType) + public static TableMetadata.Builder standardCFMD(String ksName, String cfName, int columnCount, AbstractType keyType, AbstractType valType) { return standardCFMD(ksName, cfName, columnCount, keyType, valType, AsciiType.instance); } - public static CFMetaData standardCFMD(String ksName, String cfName, int columnCount, AbstractType keyType, AbstractType valType, AbstractType clusteringType) + public static TableMetadata.Builder standardCFMD(String ksName, String cfName, int columnCount, AbstractType keyType, AbstractType valType, AbstractType clusteringType) { - CFMetaData.Builder builder; - builder = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("key", keyType) - .addRegularColumn("val", valType); + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("key", keyType) + .addRegularColumn("val", valType) + .compression(getCompressionParameters()); - if(clusteringType != null) - builder = builder.addClusteringColumn("name", clusteringType); + if (clusteringType != null) + builder.addClusteringColumn("name", clusteringType); for (int i = 0; i < columnCount; i++) builder.addRegularColumn("val" + i, AsciiType.instance); - return builder.build() - .compression(getCompressionParameters()); + return builder; } - public static CFMetaData denseCFMD(String ksName, String cfName) + public static TableMetadata.Builder denseCFMD(String ksName, String cfName) { return denseCFMD(ksName, cfName, AsciiType.instance); } - public static CFMetaData denseCFMD(String ksName, String cfName, AbstractType cc) + public static TableMetadata.Builder denseCFMD(String ksName, String cfName, AbstractType cc) { return denseCFMD(ksName, cfName, cc, null); } - public static CFMetaData denseCFMD(String ksName, String cfName, AbstractType cc, AbstractType subcc) + public static TableMetadata.Builder denseCFMD(String ksName, String cfName, AbstractType cc, AbstractType subcc) { AbstractType comp = cc; if (subcc != null) comp = CompositeType.getInstance(Arrays.asList(new AbstractType[]{cc, subcc})); - return CFMetaData.Builder.createDense(ksName, cfName, subcc != null, false) - .addPartitionKey("key", AsciiType.instance) - .addClusteringColumn("cols", comp) - .addRegularColumn("val", AsciiType.instance) - .build() - .compression(getCompressionParameters()); + return TableMetadata.builder(ksName, cfName) + .isDense(true) + .isCompound(subcc != null) + .addPartitionKeyColumn("key", AsciiType.instance) + .addClusteringColumn("cols", comp) + .addRegularColumn("val", AsciiType.instance) + .compression(getCompressionParameters()); } // TODO: Fix superCFMD failing on legacy table creation. Seems to be applying composite comparator to partition key - public static CFMetaData superCFMD(String ksName, String cfName, AbstractType subcc) + public static TableMetadata.Builder superCFMD(String ksName, String cfName, AbstractType subcc) { return superCFMD(ksName, cfName, BytesType.instance, subcc); } - public static CFMetaData superCFMD(String ksName, String cfName, AbstractType cc, AbstractType subcc) + public static TableMetadata.Builder superCFMD(String ksName, String cfName, AbstractType cc, AbstractType subcc) { return superCFMD(ksName, cfName, "cols", cc, subcc); } - public static CFMetaData superCFMD(String ksName, String cfName, String ccName, AbstractType cc, AbstractType subcc) + public static TableMetadata.Builder superCFMD(String ksName, String cfName, String ccName, AbstractType cc, AbstractType subcc) { - //This is busted -// return CFMetaData.Builder.createSuper(ksName, cfName, false) -// .addPartitionKey("0", BytesType.instance) -// .addClusteringColumn("1", cc) -// .addClusteringColumn("2", subcc) -// .addRegularColumn("3", AsciiType.instance) -// .build(); return standardCFMD(ksName, cfName); } - public static CFMetaData compositeIndexCFMD(String ksName, String cfName, boolean withRegularIndex) throws ConfigurationException + public static TableMetadata.Builder compositeIndexCFMD(String ksName, String cfName, boolean withRegularIndex) throws ConfigurationException { return compositeIndexCFMD(ksName, cfName, withRegularIndex, false); } - public static CFMetaData compositeIndexCFMD(String ksName, String cfName, boolean withRegularIndex, boolean withStaticIndex) throws ConfigurationException + public static TableMetadata.Builder compositeIndexCFMD(String ksName, String cfName, boolean withRegularIndex, boolean withStaticIndex) throws ConfigurationException { // the withIndex flag exists to allow tests index creation // on existing columns - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("key", AsciiType.instance) - .addClusteringColumn("c1", AsciiType.instance) - .addRegularColumn("birthdate", LongType.instance) - .addRegularColumn("notbirthdate", LongType.instance) - .addStaticColumn("static", LongType.instance) - .build(); + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("key", AsciiType.instance) + .addClusteringColumn("c1", AsciiType.instance) + .addRegularColumn("birthdate", LongType.instance) + .addRegularColumn("notbirthdate", LongType.instance) + .addStaticColumn("static", LongType.instance) + .compression(getCompressionParameters()); + + Indexes.Builder indexes = Indexes.builder(); if (withRegularIndex) { - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("birthdate", true), - IndexTarget.Type.VALUES)), - "birthdate_key_index", - IndexMetadata.Kind.COMPOSITES, - Collections.EMPTY_MAP))); + indexes.add(IndexMetadata.fromIndexTargets( + Collections.singletonList( + new IndexTarget(new ColumnIdentifier("birthdate", true), + IndexTarget.Type.VALUES)), + cfName + "_birthdate_key_index", + IndexMetadata.Kind.COMPOSITES, + Collections.EMPTY_MAP)); } if (withStaticIndex) { - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("static", true), - IndexTarget.Type.VALUES)), - "static_index", - IndexMetadata.Kind.COMPOSITES, - Collections.EMPTY_MAP))); + indexes.add(IndexMetadata.fromIndexTargets( + Collections.singletonList( + new IndexTarget(new ColumnIdentifier("static", true), + IndexTarget.Type.VALUES)), + cfName + "_static_index", + IndexMetadata.Kind.COMPOSITES, + Collections.EMPTY_MAP)); } - return cfm.compression(getCompressionParameters()); + return builder.indexes(indexes.build()); } - public static CFMetaData keysIndexCFMD(String ksName, String cfName, boolean withIndex) throws ConfigurationException + public static TableMetadata.Builder keysIndexCFMD(String ksName, String cfName, boolean withIndex) { - CFMetaData cfm = CFMetaData.Builder.createDense(ksName, cfName, false, false) - .addPartitionKey("key", AsciiType.instance) - .addClusteringColumn("c1", AsciiType.instance) - .addStaticColumn("birthdate", LongType.instance) - .addStaticColumn("notbirthdate", LongType.instance) - .addRegularColumn("value", LongType.instance) - .build(); + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .isCompound(false) + .isDense(true) + .addPartitionKeyColumn("key", AsciiType.instance) + .addClusteringColumn("c1", AsciiType.instance) + .addStaticColumn("birthdate", LongType.instance) + .addStaticColumn("notbirthdate", LongType.instance) + .addRegularColumn("value", LongType.instance) + .compression(getCompressionParameters()); if (withIndex) - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("birthdate", true), - IndexTarget.Type.VALUES)), - "birthdate_composite_index", - IndexMetadata.Kind.KEYS, - Collections.EMPTY_MAP))); - - - return cfm.compression(getCompressionParameters()); - } - - public static CFMetaData customIndexCFMD(String ksName, String cfName) throws ConfigurationException - { - CFMetaData cfm = CFMetaData.Builder.createDense(ksName, cfName, false, false) - .addPartitionKey("key", AsciiType.instance) - .addClusteringColumn("c1", AsciiType.instance) - .addRegularColumn("value", LongType.instance) - .build(); - - cfm.indexes( - cfm.getIndexes() - .with(IndexMetadata.fromIndexTargets(cfm, - Collections.singletonList( - new IndexTarget(new ColumnIdentifier("value", true), - IndexTarget.Type.VALUES)), - "value_index", - IndexMetadata.Kind.CUSTOM, - Collections.singletonMap( - IndexTarget.CUSTOM_INDEX_OPTION_NAME, - StubIndex.class.getName())))); - - - return cfm.compression(getCompressionParameters()); - } - - public static CFMetaData jdbcCFMD(String ksName, String cfName, AbstractType comp) - { - return CFMetaData.Builder.create(ksName, cfName).addPartitionKey("key", BytesType.instance) - .build() - .compression(getCompressionParameters()); - } - - public static CFMetaData sasiCFMD(String ksName, String cfName) - { - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("id", UTF8Type.instance) - .addRegularColumn("first_name", UTF8Type.instance) - .addRegularColumn("last_name", UTF8Type.instance) - .addRegularColumn("age", Int32Type.instance) - .addRegularColumn("height", Int32Type.instance) - .addRegularColumn("timestamp", LongType.instance) - .addRegularColumn("address", UTF8Type.instance) - .addRegularColumn("score", DoubleType.instance) - .addRegularColumn("comment", UTF8Type.instance) - .addRegularColumn("comment_suffix_split", UTF8Type.instance) - .addRegularColumn("/output/full-name/", UTF8Type.instance) - .addRegularColumn("/data/output/id", UTF8Type.instance) - .addRegularColumn("first_name_prefix", UTF8Type.instance) - .build(); - - cfm.indexes(cfm.getIndexes() - .with(IndexMetadata.fromSchemaMetadata("first_name", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "first_name"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - }})) - .with(IndexMetadata.fromSchemaMetadata("last_name", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "last_name"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - }})) - .with(IndexMetadata.fromSchemaMetadata("age", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "age"); - - }})) - .with(IndexMetadata.fromSchemaMetadata("timestamp", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "timestamp"); - put("mode", OnDiskIndexBuilder.Mode.SPARSE.toString()); - - }})) - .with(IndexMetadata.fromSchemaMetadata("address", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put("analyzer_class", "org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer"); - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "address"); - put("mode", OnDiskIndexBuilder.Mode.PREFIX.toString()); - put("case_sensitive", "false"); - }})) - .with(IndexMetadata.fromSchemaMetadata("score", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "score"); - }})) - .with(IndexMetadata.fromSchemaMetadata("comment", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "comment"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - put("analyzed", "true"); - }})) - .with(IndexMetadata.fromSchemaMetadata("comment_suffix_split", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "comment_suffix_split"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - put("analyzed", "false"); - }})) - .with(IndexMetadata.fromSchemaMetadata("output_full_name", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "/output/full-name/"); - put("analyzed", "true"); - put("analyzer_class", "org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer"); - put("case_sensitive", "false"); - }})) - .with(IndexMetadata.fromSchemaMetadata("data_output_id", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "/data/output/id"); - put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); - }})) - .with(IndexMetadata.fromSchemaMetadata("first_name_prefix", IndexMetadata.Kind.CUSTOM, new HashMap() - {{ - put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); - put(IndexTarget.TARGET_OPTION_NAME, "first_name_prefix"); - put("analyzed", "true"); - put("tokenization_normalize_lowercase", "true"); - }}))); - - return cfm; - } - - public static CFMetaData clusteringSASICFMD(String ksName, String cfName) - { - return clusteringSASICFMD(ksName, cfName, "location", "age", "height", "score"); - } - - public static CFMetaData clusteringSASICFMD(String ksName, String cfName, String...indexedColumns) - { - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("name", UTF8Type.instance) - .addClusteringColumn("location", UTF8Type.instance) - .addClusteringColumn("age", Int32Type.instance) - .addRegularColumn("height", Int32Type.instance) - .addRegularColumn("score", DoubleType.instance) - .addStaticColumn("nickname", UTF8Type.instance) - .build(); - - Indexes indexes = cfm.getIndexes(); + { + IndexMetadata index = + IndexMetadata.fromIndexTargets( + Collections.singletonList(new IndexTarget(new ColumnIdentifier("birthdate", true), + IndexTarget.Type.VALUES)), + cfName + "_birthdate_composite_index", + IndexMetadata.Kind.KEYS, + Collections.EMPTY_MAP); + builder.indexes(Indexes.builder().add(index).build()); + } + + return builder; + } + + public static TableMetadata.Builder customIndexCFMD(String ksName, String cfName) + { + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .isCompound(false) + .isDense(true) + .addPartitionKeyColumn("key", AsciiType.instance) + .addClusteringColumn("c1", AsciiType.instance) + .addRegularColumn("value", LongType.instance) + .compression(getCompressionParameters()); + + IndexMetadata index = + IndexMetadata.fromIndexTargets( + Collections.singletonList(new IndexTarget(new ColumnIdentifier("value", true), IndexTarget.Type.VALUES)), + cfName + "_value_index", + IndexMetadata.Kind.CUSTOM, + Collections.singletonMap(IndexTarget.CUSTOM_INDEX_OPTION_NAME, StubIndex.class.getName())); + + builder.indexes(Indexes.of(index)); + + return builder; + } + + public static TableMetadata.Builder jdbcCFMD(String ksName, String cfName, AbstractType comp) + { + return TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("key", BytesType.instance) + .compression(getCompressionParameters()); + } + + public static TableMetadata.Builder sasiCFMD(String ksName, String cfName) + { + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("id", UTF8Type.instance) + .addRegularColumn("first_name", UTF8Type.instance) + .addRegularColumn("last_name", UTF8Type.instance) + .addRegularColumn("age", Int32Type.instance) + .addRegularColumn("height", Int32Type.instance) + .addRegularColumn("timestamp", LongType.instance) + .addRegularColumn("address", UTF8Type.instance) + .addRegularColumn("score", DoubleType.instance) + .addRegularColumn("comment", UTF8Type.instance) + .addRegularColumn("comment_suffix_split", UTF8Type.instance) + .addRegularColumn("/output/full-name/", UTF8Type.instance) + .addRegularColumn("/data/output/id", UTF8Type.instance) + .addRegularColumn("first_name_prefix", UTF8Type.instance); + + Indexes.Builder indexes = Indexes.builder(); + + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_first_name", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "first_name"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_last_name", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "last_name"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_age", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "age"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_timestamp", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "timestamp"); + put("mode", OnDiskIndexBuilder.Mode.SPARSE.toString()); + + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_address", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put("analyzer_class", "org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer"); + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "address"); + put("mode", OnDiskIndexBuilder.Mode.PREFIX.toString()); + put("case_sensitive", "false"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_score", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "score"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_comment", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "comment"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + put("analyzed", "true"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_comment_suffix_split", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "comment_suffix_split"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + put("analyzed", "false"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_output_full_name", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "/output/full-name/"); + put("analyzed", "true"); + put("analyzer_class", "org.apache.cassandra.index.sasi.analyzer.NonTokenizingAnalyzer"); + put("case_sensitive", "false"); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_data_output_id", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "/data/output/id"); + put("mode", OnDiskIndexBuilder.Mode.CONTAINS.toString()); + }})) + .add(IndexMetadata.fromSchemaMetadata(cfName + "_first_name_prefix", IndexMetadata.Kind.CUSTOM, new HashMap() + {{ + put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); + put(IndexTarget.TARGET_OPTION_NAME, "first_name_prefix"); + put("analyzed", "true"); + put("tokenization_normalize_lowercase", "true"); + }})); + + return builder.indexes(indexes.build()); +} + +public static TableMetadata.Builder clusteringSASICFMD(String ksName, String cfName) +{ + return clusteringSASICFMD(ksName, cfName, "location", "age", "height", "score"); +} + + public static TableMetadata.Builder clusteringSASICFMD(String ksName, String cfName, String...indexedColumns) + { + Indexes.Builder indexes = Indexes.builder(); for (String indexedColumn : indexedColumns) { - indexes = indexes.with(IndexMetadata.fromSchemaMetadata(indexedColumn, IndexMetadata.Kind.CUSTOM, new HashMap() + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_" + indexedColumn, IndexMetadata.Kind.CUSTOM, new HashMap() {{ put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); put(IndexTarget.TARGET_OPTION_NAME, indexedColumn); put("mode", OnDiskIndexBuilder.Mode.PREFIX.toString()); }})); } - cfm.indexes(indexes); - return cfm; + + return TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("name", UTF8Type.instance) + .addClusteringColumn("location", UTF8Type.instance) + .addClusteringColumn("age", Int32Type.instance) + .addRegularColumn("height", Int32Type.instance) + .addRegularColumn("score", DoubleType.instance) + .addStaticColumn("nickname", UTF8Type.instance) + .indexes(indexes.build()); } - public static CFMetaData staticSASICFMD(String ksName, String cfName) + public static TableMetadata.Builder staticSASICFMD(String ksName, String cfName) { - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("sensor_id", Int32Type.instance) - .addStaticColumn("sensor_type", UTF8Type.instance) - .addClusteringColumn("date", LongType.instance) - .addRegularColumn("value", DoubleType.instance) - .addRegularColumn("variance", Int32Type.instance) - .build(); + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("sensor_id", Int32Type.instance) + .addStaticColumn("sensor_type", UTF8Type.instance) + .addClusteringColumn("date", LongType.instance) + .addRegularColumn("value", DoubleType.instance) + .addRegularColumn("variance", Int32Type.instance); + + Indexes.Builder indexes = Indexes.builder(); - Indexes indexes = cfm.getIndexes(); - indexes = indexes.with(IndexMetadata.fromSchemaMetadata("sensor_type", IndexMetadata.Kind.CUSTOM, new HashMap() + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_sensor_type", IndexMetadata.Kind.CUSTOM, new HashMap() {{ put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); put(IndexTarget.TARGET_OPTION_NAME, "sensor_type"); @@ -671,34 +666,34 @@ public class SchemaLoader put("case_sensitive", "false"); }})); - indexes = indexes.with(IndexMetadata.fromSchemaMetadata("value", IndexMetadata.Kind.CUSTOM, new HashMap() + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_value", IndexMetadata.Kind.CUSTOM, new HashMap() {{ put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); put(IndexTarget.TARGET_OPTION_NAME, "value"); put("mode", OnDiskIndexBuilder.Mode.PREFIX.toString()); }})); - indexes = indexes.with(IndexMetadata.fromSchemaMetadata("variance", IndexMetadata.Kind.CUSTOM, new HashMap() + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_variance", IndexMetadata.Kind.CUSTOM, new HashMap() {{ put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); put(IndexTarget.TARGET_OPTION_NAME, "variance"); put("mode", OnDiskIndexBuilder.Mode.PREFIX.toString()); }})); - cfm.indexes(indexes); - return cfm; + return builder.indexes(indexes.build()); } - public static CFMetaData fullTextSearchSASICFMD(String ksName, String cfName) + public static TableMetadata.Builder fullTextSearchSASICFMD(String ksName, String cfName) { - CFMetaData cfm = CFMetaData.Builder.create(ksName, cfName) - .addPartitionKey("song_id", UUIDType.instance) - .addRegularColumn("title", UTF8Type.instance) - .addRegularColumn("artist", UTF8Type.instance) - .build(); + TableMetadata.Builder builder = + TableMetadata.builder(ksName, cfName) + .addPartitionKeyColumn("song_id", UUIDType.instance) + .addRegularColumn("title", UTF8Type.instance) + .addRegularColumn("artist", UTF8Type.instance); + + Indexes.Builder indexes = Indexes.builder(); - Indexes indexes = cfm.getIndexes(); - indexes = indexes.with(IndexMetadata.fromSchemaMetadata("title", IndexMetadata.Kind.CUSTOM, new HashMap() + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_title", IndexMetadata.Kind.CUSTOM, new HashMap() {{ put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); put(IndexTarget.TARGET_OPTION_NAME, "title"); @@ -710,7 +705,7 @@ public class SchemaLoader put("tokenization_normalize_lowercase", "true"); }})); - indexes = indexes.with(IndexMetadata.fromSchemaMetadata("artist", IndexMetadata.Kind.CUSTOM, new HashMap() + indexes.add(IndexMetadata.fromSchemaMetadata(cfName + "_artist", IndexMetadata.Kind.CUSTOM, new HashMap() {{ put(IndexTarget.CUSTOM_INDEX_OPTION_NAME, SASIIndex.class.getName()); put(IndexTarget.TARGET_OPTION_NAME, "artist"); @@ -720,8 +715,7 @@ public class SchemaLoader }})); - cfm.indexes(indexes); - return cfm; + return builder.indexes(indexes.build()); } public static CompressionParams getCompressionParameters() @@ -784,7 +778,7 @@ public class SchemaLoader public static void insertData(String keyspace, String columnFamily, int offset, int numberOfRows) { - CFMetaData cfm = Schema.instance.getCFMetaData(keyspace, columnFamily); + TableMetadata cfm = Schema.instance.getTableMetadata(keyspace, columnFamily); for (int i = offset; i < offset + numberOfRows; i++) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/test/unit/org/apache/cassandra/UpdateBuilder.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/UpdateBuilder.java b/test/unit/org/apache/cassandra/UpdateBuilder.java index 9fcda15..0f3c918 100644 --- a/test/unit/org/apache/cassandra/UpdateBuilder.java +++ b/test/unit/org/apache/cassandra/UpdateBuilder.java @@ -17,13 +17,10 @@ */ package org.apache.cassandra; -import java.nio.ByteBuffer; - -import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.db.*; import org.apache.cassandra.db.rows.*; import org.apache.cassandra.db.partitions.*; -import org.apache.cassandra.utils.FBUtilities; /** @@ -42,7 +39,7 @@ public class UpdateBuilder this.updateBuilder = updateBuilder; } - public static UpdateBuilder create(CFMetaData metadata, Object... partitionKey) + public static UpdateBuilder create(TableMetadata metadata, Object... partitionKey) { return new UpdateBuilder(PartitionUpdate.simpleBuilder(metadata, partitionKey)); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/test/unit/org/apache/cassandra/Util.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/Util.java b/test/unit/org/apache/cassandra/Util.java index d77ca78..a01aab6 100644 --- a/test/unit/org/apache/cassandra/Util.java +++ b/test/unit/org/apache/cassandra/Util.java @@ -39,8 +39,9 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; +import org.apache.cassandra.schema.TableId; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.ColumnIdentifier; @@ -110,13 +111,6 @@ public class Util return PartitionPosition.ForKey.get(ByteBufferUtil.bytes(key), partitioner); } - public static Cell getRegularCell(CFMetaData metadata, Row row, String name) - { - ColumnDefinition column = metadata.getColumnDefinition(ByteBufferUtil.bytes(name)); - assert column != null; - return row.getCell(column); - } - public static Clustering clustering(ClusteringComparator comparator, Object... o) { return comparator.make(o); @@ -179,12 +173,12 @@ public class Util { IMutation first = mutations.get(0); String keyspaceName = first.getKeyspaceName(); - UUID cfid = first.getColumnFamilyIds().iterator().next(); + TableId tableId = first.getTableIds().iterator().next(); for (Mutation rm : mutations) rm.applyUnsafe(); - ColumnFamilyStore store = Keyspace.open(keyspaceName).getColumnFamilyStore(cfid); + ColumnFamilyStore store = Keyspace.open(keyspaceName).getColumnFamilyStore(tableId); store.forceBlockingFlush(); return store; } @@ -270,7 +264,7 @@ public class Util public static AbstractReadCommandBuilder.SinglePartitionBuilder cmd(ColumnFamilyStore cfs, Object... partitionKey) { - return new AbstractReadCommandBuilder.SinglePartitionBuilder(cfs, makeKey(cfs.metadata, partitionKey)); + return new AbstractReadCommandBuilder.SinglePartitionBuilder(cfs, makeKey(cfs.metadata(), partitionKey)); } public static AbstractReadCommandBuilder.PartitionRangeBuilder cmd(ColumnFamilyStore cfs) @@ -278,13 +272,13 @@ public class Util return new AbstractReadCommandBuilder.PartitionRangeBuilder(cfs); } - static DecoratedKey makeKey(CFMetaData metadata, Object... partitionKey) + static DecoratedKey makeKey(TableMetadata metadata, Object... partitionKey) { if (partitionKey.length == 1 && partitionKey[0] instanceof DecoratedKey) return (DecoratedKey)partitionKey[0]; - ByteBuffer key = CFMetaData.serializePartitionKey(metadata.getKeyValidatorAsClusteringComparator().make(partitionKey)); - return metadata.decorateKey(key); + ByteBuffer key = metadata.partitionKeyAsClusteringComparator().make(partitionKey).serializeAsPartitionKey(); + return metadata.partitioner.decorateKey(key); } public static void assertEmptyUnfiltered(ReadCommand command) @@ -296,7 +290,7 @@ public class Util { try (UnfilteredRowIterator partition = iterator.next()) { - throw new AssertionError("Expected no results for query " + command.toCQLString() + " but got key " + command.metadata().getKeyValidator().getString(partition.partitionKey().getKey())); + throw new AssertionError("Expected no results for query " + command.toCQLString() + " but got key " + command.metadata().partitionKeyType.getString(partition.partitionKey().getKey())); } } } @@ -311,7 +305,7 @@ public class Util { try (RowIterator partition = iterator.next()) { - throw new AssertionError("Expected no results for query " + command.toCQLString() + " but got key " + command.metadata().getKeyValidator().getString(partition.partitionKey().getKey())); + throw new AssertionError("Expected no results for query " + command.toCQLString() + " but got key " + command.metadata().partitionKeyType.getString(partition.partitionKey().getKey())); } } } @@ -423,7 +417,7 @@ public class Util public static Cell cell(ColumnFamilyStore cfs, Row row, String columnName) { - ColumnDefinition def = cfs.metadata.getColumnDefinition(ByteBufferUtil.bytes(columnName)); + ColumnMetadata def = cfs.metadata().getColumn(ByteBufferUtil.bytes(columnName)); assert def != null; return row.getCell(def); } @@ -436,7 +430,7 @@ public class Util public static void assertCellValue(Object value, ColumnFamilyStore cfs, Row row, String columnName) { Cell cell = cell(cfs, row, columnName); - assert cell != null : "Row " + row.toString(cfs.metadata) + " has no cell for " + columnName; + assert cell != null : "Row " + row.toString(cfs.metadata()) + " has no cell for " + columnName; assertEquals(value, cell.column().type.compose(cell.value())); } @@ -460,15 +454,6 @@ public class Util return size; } - public static CBuilder getCBuilderForCFM(CFMetaData cfm) - { - List clusteringColumns = cfm.clusteringColumns(); - List> types = new ArrayList<>(clusteringColumns.size()); - for (ColumnDefinition def : clusteringColumns) - types.add(def.type); - return CBuilder.create(new ClusteringComparator(types)); - } - public static boolean equal(UnfilteredRowIterator a, UnfilteredRowIterator b) { return Objects.equals(a.columns(), b.columns()) @@ -492,12 +477,12 @@ public class Util public static boolean sameContent(Mutation a, Mutation b) { - if (!a.key().equals(b.key()) || !a.getColumnFamilyIds().equals(b.getColumnFamilyIds())) + if (!a.key().equals(b.key()) || !a.getTableIds().equals(b.getTableIds())) return false; - for (UUID cfId : a.getColumnFamilyIds()) + for (PartitionUpdate update : a.getPartitionUpdates()) { - if (!sameContent(a.getPartitionUpdate(cfId).unfilteredIterator(), b.getPartitionUpdate(cfId).unfilteredIterator())) + if (!sameContent(update.unfilteredIterator(), b.getPartitionUpdate(update.metadata()).unfilteredIterator())) return false; } return true; @@ -521,9 +506,9 @@ public class Util StringUtils.join(expectedColumnNames, ",")); } - public static void assertColumn(CFMetaData cfm, Row row, String name, String value, long timestamp) + public static void assertColumn(TableMetadata cfm, Row row, String name, String value, long timestamp) { - Cell cell = row.getCell(cfm.getColumnDefinition(new ColumnIdentifier(name, true))); + Cell cell = row.getCell(cfm.getColumn(new ColumnIdentifier(name, true))); assertColumn(cell, value, timestamp); } @@ -534,7 +519,7 @@ public class Util assertEquals(timestamp, cell.timestamp()); } - public static void assertClustering(CFMetaData cfm, Row row, Object... clusteringValue) + public static void assertClustering(TableMetadata cfm, Row row, Object... clusteringValue) { assertEquals(row.clustering().size(), clusteringValue.length); assertEquals(0, cfm.comparator.compare(row.clustering(), cfm.comparator.make(clusteringValue))); @@ -647,12 +632,12 @@ public class Util { Iterator content; - public UnfilteredSource(CFMetaData cfm, DecoratedKey partitionKey, Row staticRow, Iterator content) + public UnfilteredSource(TableMetadata metadata, DecoratedKey partitionKey, Row staticRow, Iterator content) { - super(cfm, + super(metadata, partitionKey, DeletionTime.LIVE, - cfm.partitionColumns(), + metadata.regularAndStaticColumns(), staticRow != null ? staticRow : Rows.EMPTY_STATIC_ROW, false, EncodingStats.NO_STATS); @@ -715,20 +700,20 @@ public class Util public static PagingState makeSomePagingState(ProtocolVersion protocolVersion) { - CFMetaData metadata = CFMetaData.Builder.create("ks", "tbl") - .addPartitionKey("k", AsciiType.instance) - .addClusteringColumn("c1", AsciiType.instance) - .addClusteringColumn("c1", Int32Type.instance) - .addRegularColumn("myCol", AsciiType.instance) - .build(); + TableMetadata metadata = + TableMetadata.builder("ks", "tbl") + .addPartitionKeyColumn("k", AsciiType.instance) + .addClusteringColumn("c1", AsciiType.instance) + .addClusteringColumn("c2", Int32Type.instance) + .addRegularColumn("myCol", AsciiType.instance) + .build(); ByteBuffer pk = ByteBufferUtil.bytes("someKey"); - ColumnDefinition def = metadata.getColumnDefinition(new ColumnIdentifier("myCol", false)); + ColumnMetadata def = metadata.getColumn(new ColumnIdentifier("myCol", false)); Clustering c = Clustering.make(ByteBufferUtil.bytes("c1"), ByteBufferUtil.bytes(42)); Row row = BTreeRow.singleCellRow(c, BufferCell.live(def, 0, ByteBufferUtil.EMPTY_BYTE_BUFFER)); PagingState.RowMark mark = PagingState.RowMark.create(metadata, row, protocolVersion); return new PagingState(pk, mark, 10, 0); } - } http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/test/unit/org/apache/cassandra/batchlog/BatchTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/batchlog/BatchTest.java b/test/unit/org/apache/cassandra/batchlog/BatchTest.java index d2db9b9..8ed1811 100644 --- a/test/unit/org/apache/cassandra/batchlog/BatchTest.java +++ b/test/unit/org/apache/cassandra/batchlog/BatchTest.java @@ -28,8 +28,7 @@ import org.junit.BeforeClass; import org.junit.Test; import org.apache.cassandra.SchemaLoader; -import org.apache.cassandra.Util; -import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.Mutation; import org.apache.cassandra.db.RowUpdateBuilder; @@ -45,7 +44,6 @@ import org.apache.cassandra.utils.UUIDGen; import static org.apache.cassandra.utils.ByteBufferUtil.bytes; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; public class BatchTest { @@ -64,7 +62,7 @@ public class BatchTest @Test public void testSerialization() throws IOException { - CFMetaData cfm = Keyspace.open(KEYSPACE).getColumnFamilyStore(CF_STANDARD).metadata; + TableMetadata cfm = Keyspace.open(KEYSPACE).getColumnFamilyStore(CF_STANDARD).metadata(); long now = FBUtilities.timestampMicros(); int version = MessagingService.current_version; http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/test/unit/org/apache/cassandra/batchlog/BatchlogManagerTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/batchlog/BatchlogManagerTest.java b/test/unit/org/apache/cassandra/batchlog/BatchlogManagerTest.java index 038255b..34902fe 100644 --- a/test/unit/org/apache/cassandra/batchlog/BatchlogManagerTest.java +++ b/test/unit/org/apache/cassandra/batchlog/BatchlogManagerTest.java @@ -21,7 +21,6 @@ import java.io.IOException; import java.net.InetAddress; import java.util.*; import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; import com.google.common.collect.Lists; @@ -30,10 +29,10 @@ import org.junit.*; import org.apache.cassandra.SchemaLoader; import org.apache.cassandra.Util; import org.apache.cassandra.Util.PartitionerSwitcher; -import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.config.DatabaseDescriptor; -import org.apache.cassandra.config.Schema; -import org.apache.cassandra.config.SchemaConstants; +import org.apache.cassandra.schema.Schema; +import org.apache.cassandra.schema.SchemaConstants; import org.apache.cassandra.cql3.UntypedResultSet; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.DecoratedKey; @@ -49,7 +48,6 @@ import org.apache.cassandra.db.rows.Row; import org.apache.cassandra.dht.Murmur3Partitioner; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.locator.TokenMetadata; -import org.apache.cassandra.net.MessagingService; import org.apache.cassandra.service.StorageService; import org.apache.cassandra.schema.KeyspaceParams; import org.apache.cassandra.utils.ByteBufferUtil; @@ -106,7 +104,7 @@ public class BatchlogManagerTest public void testDelete() { ColumnFamilyStore cfs = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD1); - CFMetaData cfm = cfs.metadata; + TableMetadata cfm = cfs.metadata(); new RowUpdateBuilder(cfm, FBUtilities.timestampMicros(), ByteBufferUtil.bytes("1234")) .clustering("c") .add("val", "val" + 1234) @@ -134,7 +132,7 @@ public class BatchlogManagerTest long initialAllBatches = BatchlogManager.instance.countAllBatches(); long initialReplayedBatches = BatchlogManager.instance.getTotalBatchesReplayed(); - CFMetaData cfm = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD1).metadata; + TableMetadata cfm = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD1).metadata(); // Generate 1000 mutations (100 batches of 10 mutations each) and put them all into the batchlog. // Half batches (50) ready to be replayed, half not. @@ -205,8 +203,8 @@ public class BatchlogManagerTest @Test public void testTruncatedReplay() throws InterruptedException, ExecutionException { - CFMetaData cf2 = Schema.instance.getCFMetaData(KEYSPACE1, CF_STANDARD2); - CFMetaData cf3 = Schema.instance.getCFMetaData(KEYSPACE1, CF_STANDARD3); + TableMetadata cf2 = Schema.instance.getTableMetadata(KEYSPACE1, CF_STANDARD2); + TableMetadata cf3 = Schema.instance.getTableMetadata(KEYSPACE1, CF_STANDARD3); // Generate 2000 mutations (1000 batchlog entries) and put them all into the batchlog. // Each batchlog entry with a mutation for Standard2 and Standard3. // In the middle of the process, 'truncate' Standard2. @@ -277,7 +275,7 @@ public class BatchlogManagerTest public void testAddBatch() throws IOException { long initialAllBatches = BatchlogManager.instance.countAllBatches(); - CFMetaData cfm = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD5).metadata; + TableMetadata cfm = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD5).metadata(); long timestamp = (System.currentTimeMillis() - DatabaseDescriptor.getWriteRpcTimeout() * 2) * 1000; UUID uuid = UUIDGen.getTimeUUID(); @@ -309,7 +307,7 @@ public class BatchlogManagerTest public void testRemoveBatch() { long initialAllBatches = BatchlogManager.instance.countAllBatches(); - CFMetaData cfm = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD5).metadata; + TableMetadata cfm = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD5).metadata(); long timestamp = (System.currentTimeMillis() - DatabaseDescriptor.getWriteRpcTimeout() * 2) * 1000; UUID uuid = UUIDGen.getTimeUUID(); @@ -351,7 +349,7 @@ public class BatchlogManagerTest long initialAllBatches = BatchlogManager.instance.countAllBatches(); long initialReplayedBatches = BatchlogManager.instance.getTotalBatchesReplayed(); - CFMetaData cfm = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD1).metadata; + TableMetadata cfm = Keyspace.open(KEYSPACE1).getColumnFamilyStore(CF_STANDARD1).metadata(); long timestamp = (System.currentTimeMillis() - DatabaseDescriptor.getWriteRpcTimeout() * 2) * 1000; UUID uuid = UUIDGen.getTimeUUID(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/test/unit/org/apache/cassandra/cache/AutoSavingCacheTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cache/AutoSavingCacheTest.java b/test/unit/org/apache/cassandra/cache/AutoSavingCacheTest.java index c952470..bb5129a 100644 --- a/test/unit/org/apache/cassandra/cache/AutoSavingCacheTest.java +++ b/test/unit/org/apache/cassandra/cache/AutoSavingCacheTest.java @@ -17,8 +17,8 @@ */ package org.apache.cassandra.cache; -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.TableMetadata; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.*; import org.apache.cassandra.db.marshal.AsciiType; @@ -45,10 +45,9 @@ public class AutoSavingCacheTest SchemaLoader.prepareServer(); SchemaLoader.createKeyspace(KEYSPACE1, KeyspaceParams.simple(1), - CFMetaData.Builder.create(KEYSPACE1, CF_STANDARD1) - .addPartitionKey("pKey", AsciiType.instance) - .addRegularColumn("col1", AsciiType.instance) - .build()); + TableMetadata.builder(KEYSPACE1, CF_STANDARD1) + .addPartitionKeyColumn("pKey", AsciiType.instance) + .addRegularColumn("col1", AsciiType.instance)); } @Test @@ -71,8 +70,8 @@ public class AutoSavingCacheTest cfs.truncateBlocking(); for (int i = 0; i < 2; i++) { - ColumnDefinition colDef = ColumnDefinition.regularDef(cfs.metadata, ByteBufferUtil.bytes("col1"), AsciiType.instance); - RowUpdateBuilder rowBuilder = new RowUpdateBuilder(cfs.metadata, System.currentTimeMillis(), "key1"); + ColumnMetadata colDef = ColumnMetadata.regularColumn(cfs.metadata(), ByteBufferUtil.bytes("col1"), AsciiType.instance); + RowUpdateBuilder rowBuilder = new RowUpdateBuilder(cfs.metadata(), System.currentTimeMillis(), "key1"); rowBuilder.add(colDef, "val1"); rowBuilder.build().apply(); cfs.forceBlockingFlush(); @@ -95,6 +94,6 @@ public class AutoSavingCacheTest // then load saved keyCache.loadSavedAsync().get(); for (SSTableReader sstable : cfs.getLiveSSTables()) - Assert.assertNotNull(keyCache.get(new KeyCacheKey(cfs.metadata.ksAndCFName, sstable.descriptor, ByteBufferUtil.bytes("key1")))); + Assert.assertNotNull(keyCache.get(new KeyCacheKey(cfs.metadata(), sstable.descriptor, ByteBufferUtil.bytes("key1")))); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/test/unit/org/apache/cassandra/cache/CacheProviderTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cache/CacheProviderTest.java b/test/unit/org/apache/cassandra/cache/CacheProviderTest.java index f6a8acf..1aa536e 100644 --- a/test/unit/org/apache/cassandra/cache/CacheProviderTest.java +++ b/test/unit/org/apache/cassandra/cache/CacheProviderTest.java @@ -18,30 +18,33 @@ */ package org.apache.cassandra.cache; -import com.github.benmanes.caffeine.cache.Weigher; +import java.nio.ByteBuffer; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.junit.BeforeClass; +import org.junit.Test; +import com.github.benmanes.caffeine.cache.Weigher; import org.apache.cassandra.SchemaLoader; import org.apache.cassandra.concurrent.NamedThreadFactory; -import org.apache.cassandra.exceptions.ConfigurationException; -import org.apache.cassandra.utils.Pair; - -import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.db.RowUpdateBuilder; import org.apache.cassandra.db.marshal.AsciiType; +import org.apache.cassandra.db.marshal.UTF8Type; import org.apache.cassandra.db.partitions.CachedBTreePartition; import org.apache.cassandra.db.partitions.PartitionUpdate; import org.apache.cassandra.db.rows.UnfilteredRowIterators; +import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.net.MessagingService; +import org.apache.cassandra.schema.IndexMetadata; +import org.apache.cassandra.schema.Indexes; import org.apache.cassandra.schema.KeyspaceParams; +import org.apache.cassandra.schema.TableId; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.utils.FBUtilities; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.nio.ByteBuffer; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -59,20 +62,20 @@ public class CacheProviderTest private static final String KEYSPACE1 = "CacheProviderTest1"; private static final String CF_STANDARD1 = "Standard1"; - private static CFMetaData cfm; + private static TableMetadata cfm; @BeforeClass public static void defineSchema() throws ConfigurationException { SchemaLoader.prepareServer(); - cfm = CFMetaData.Builder.create(KEYSPACE1, CF_STANDARD1) - .addPartitionKey("pKey", AsciiType.instance) - .addRegularColumn("col1", AsciiType.instance) - .build(); - SchemaLoader.createKeyspace(KEYSPACE1, - KeyspaceParams.simple(1), - cfm); + cfm = + TableMetadata.builder(KEYSPACE1, CF_STANDARD1) + .addPartitionKeyColumn("pKey", AsciiType.instance) + .addRegularColumn("col1", AsciiType.instance) + .build(); + + SchemaLoader.createKeyspace(KEYSPACE1, KeyspaceParams.simple(1), cfm); } private CachedBTreePartition createPartition() @@ -158,16 +161,43 @@ public class CacheProviderTest @Test public void testKeys() { - Pair ksAndCFName = Pair.create(KEYSPACE1, CF_STANDARD1); + TableId id1 = TableId.generate(); byte[] b1 = {1, 2, 3, 4}; - RowCacheKey key1 = new RowCacheKey(ksAndCFName, ByteBuffer.wrap(b1)); + RowCacheKey key1 = new RowCacheKey(id1, null, ByteBuffer.wrap(b1)); + TableId id2 = TableId.fromString(id1.toString()); byte[] b2 = {1, 2, 3, 4}; - RowCacheKey key2 = new RowCacheKey(ksAndCFName, ByteBuffer.wrap(b2)); + RowCacheKey key2 = new RowCacheKey(id2, null, ByteBuffer.wrap(b2)); assertEquals(key1, key2); assertEquals(key1.hashCode(), key2.hashCode()); + TableMetadata tm = TableMetadata.builder("ks", "tab", id1) + .addPartitionKeyColumn("pk", UTF8Type.instance) + .build(); + + assertTrue(key1.sameTable(tm)); + byte[] b3 = {1, 2, 3, 5}; - RowCacheKey key3 = new RowCacheKey(ksAndCFName, ByteBuffer.wrap(b3)); + RowCacheKey key3 = new RowCacheKey(id1, null, ByteBuffer.wrap(b3)); + assertNotSame(key1, key3); + assertNotSame(key1.hashCode(), key3.hashCode()); + + // with index name + + key1 = new RowCacheKey(id1, "indexFoo", ByteBuffer.wrap(b1)); + assertNotSame(key1, key2); + assertNotSame(key1.hashCode(), key2.hashCode()); + + key2 = new RowCacheKey(id2, "indexFoo", ByteBuffer.wrap(b2)); + assertEquals(key1, key2); + assertEquals(key1.hashCode(), key2.hashCode()); + + tm = TableMetadata.builder("ks", "tab.indexFoo", id1) + .addPartitionKeyColumn("pk", UTF8Type.instance) + .indexes(Indexes.of(IndexMetadata.fromSchemaMetadata("indexFoo", IndexMetadata.Kind.KEYS, Collections.emptyMap()))) + .build(); + assertTrue(key1.sameTable(tm)); + + key3 = new RowCacheKey(id1, "indexFoo", ByteBuffer.wrap(b3)); assertNotSame(key1, key3); assertNotSame(key1.hashCode(), key3.hashCode()); }