http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/db/view/ViewUpdateGenerator.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/view/ViewUpdateGenerator.java b/src/java/org/apache/cassandra/db/view/ViewUpdateGenerator.java index edbda1c..e276f62 100644 --- a/src/java/org/apache/cassandra/db/view/ViewUpdateGenerator.java +++ b/src/java/org/apache/cassandra/db/view/ViewUpdateGenerator.java @@ -23,8 +23,9 @@ import java.util.*; import com.google.common.collect.Iterators; import com.google.common.collect.PeekingIterator; -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; +import org.apache.cassandra.schema.Schema; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.db.*; import org.apache.cassandra.db.rows.*; import org.apache.cassandra.db.partitions.*; @@ -45,11 +46,11 @@ public class ViewUpdateGenerator private final View view; private final int nowInSec; - private final CFMetaData baseMetadata; + private final TableMetadata baseMetadata; private final DecoratedKey baseDecoratedKey; private final ByteBuffer[] basePartitionKey; - private final CFMetaData viewMetadata; + private final TableMetadata viewMetadata; private final Map<DecoratedKey, PartitionUpdate> updates = new HashMap<>(); @@ -87,9 +88,9 @@ public class ViewUpdateGenerator this.baseMetadata = view.getDefinition().baseTableMetadata(); this.baseDecoratedKey = basePartitionKey; - this.basePartitionKey = extractKeyComponents(basePartitionKey, baseMetadata.getKeyValidator()); + this.basePartitionKey = extractKeyComponents(basePartitionKey, baseMetadata.partitionKeyType); - this.viewMetadata = view.getDefinition().metadata; + this.viewMetadata = Schema.instance.getTableMetadata(view.getDefinition().metadata.id); this.currentViewEntryPartitionKey = new ByteBuffer[viewMetadata.partitionKeyColumns().size()]; this.currentViewEntryBuilder = BTreeRow.sortedBuilder(); @@ -191,7 +192,7 @@ public class ViewUpdateGenerator : (mergedHasLiveData ? UpdateAction.NEW_ENTRY : UpdateAction.NONE); } - ColumnDefinition baseColumn = view.baseNonPKColumnsInViewPK.get(0); + ColumnMetadata baseColumn = view.baseNonPKColumnsInViewPK.get(0); assert !baseColumn.isComplex() : "A complex column couldn't be part of the view PK"; Cell before = existingBaseRow == null ? null : existingBaseRow.getCell(baseColumn); Cell after = mergedBaseRow.getCell(baseColumn); @@ -237,7 +238,7 @@ public class ViewUpdateGenerator for (ColumnData data : baseRow) { - ColumnDefinition viewColumn = view.getViewColumn(data.column()); + ColumnMetadata viewColumn = view.getViewColumn(data.column()); // If that base table column is not denormalized in the view, we had nothing to do. // Alose, if it's part of the view PK it's already been taken into account in the clustering. if (viewColumn == null || viewColumn.isPrimaryKeyColumn()) @@ -293,8 +294,8 @@ public class ViewUpdateGenerator PeekingIterator<ColumnData> existingIter = Iterators.peekingIterator(existingBaseRow.iterator()); for (ColumnData mergedData : mergedBaseRow) { - ColumnDefinition baseColumn = mergedData.column(); - ColumnDefinition viewColumn = view.getViewColumn(baseColumn); + ColumnMetadata baseColumn = mergedData.column(); + ColumnMetadata viewColumn = view.getViewColumn(baseColumn); // If that base table column is not denormalized in the view, we had nothing to do. // Alose, if it's part of the view PK it's already been taken into account in the clustering. if (viewColumn == null || viewColumn.isPrimaryKeyColumn()) @@ -397,9 +398,9 @@ public class ViewUpdateGenerator private void startNewUpdate(Row baseRow) { ByteBuffer[] clusteringValues = new ByteBuffer[viewMetadata.clusteringColumns().size()]; - for (ColumnDefinition viewColumn : viewMetadata.primaryKeyColumns()) + for (ColumnMetadata viewColumn : viewMetadata.primaryKeyColumns()) { - ColumnDefinition baseColumn = view.getBaseColumn(viewColumn); + ColumnMetadata baseColumn = view.getBaseColumn(viewColumn); ByteBuffer value = getValueForPK(baseColumn, baseRow); if (viewColumn.isPartitionKey()) currentViewEntryPartitionKey[viewColumn.position()] = value; @@ -457,7 +458,7 @@ public class ViewUpdateGenerator : LivenessInfo.withExpirationTime(baseLiveness.timestamp(), ttl, expirationTime); } - ColumnDefinition baseColumn = view.baseNonPKColumnsInViewPK.get(0); + ColumnMetadata baseColumn = view.baseNonPKColumnsInViewPK.get(0); Cell cell = baseRow.getCell(baseColumn); assert isLive(cell) : "We shouldn't have got there if the base row had no associated entry"; @@ -486,7 +487,7 @@ public class ViewUpdateGenerator return timestamp; } - private void addColumnData(ColumnDefinition viewColumn, ColumnData baseTableData) + private void addColumnData(ColumnMetadata viewColumn, ColumnData baseTableData) { assert viewColumn.isComplex() == baseTableData.column().isComplex(); if (!viewColumn.isComplex()) @@ -501,7 +502,7 @@ public class ViewUpdateGenerator addCell(viewColumn, cell); } - private void addCell(ColumnDefinition viewColumn, Cell baseTableCell) + private void addCell(ColumnMetadata viewColumn, Cell baseTableCell) { assert !viewColumn.isPrimaryKeyColumn(); currentViewEntryBuilder.addCell(baseTableCell.withUpdatedColumn(viewColumn)); @@ -525,7 +526,7 @@ public class ViewUpdateGenerator { // We can't really know which columns of the view will be updated nor how many row will be updated for this key // so we rely on hopefully sane defaults. - update = new PartitionUpdate(viewMetadata, partitionKey, viewMetadata.partitionColumns(), 4); + update = new PartitionUpdate(viewMetadata, partitionKey, viewMetadata.regularAndStaticColumns(), 4); updates.put(partitionKey, update); } update.add(row); @@ -537,10 +538,10 @@ public class ViewUpdateGenerator ? currentViewEntryPartitionKey[0] : CompositeType.build(currentViewEntryPartitionKey); - return viewMetadata.decorateKey(rawKey); + return viewMetadata.partitioner.decorateKey(rawKey); } - private ByteBuffer getValueForPK(ColumnDefinition column, Row row) + private ByteBuffer getValueForPK(ColumnMetadata column, Row row) { switch (column.kind) {
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/dht/BootStrapper.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/dht/BootStrapper.java b/src/java/org/apache/cassandra/dht/BootStrapper.java index 15e75fe..9235844 100644 --- a/src/java/org/apache/cassandra/dht/BootStrapper.java +++ b/src/java/org/apache/cassandra/dht/BootStrapper.java @@ -27,7 +27,7 @@ import com.google.common.util.concurrent.ListenableFuture; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.config.DatabaseDescriptor; -import org.apache.cassandra.config.Schema; +import org.apache.cassandra.schema.Schema; import org.apache.cassandra.db.Keyspace; import org.apache.cassandra.db.TypeSizes; import org.apache.cassandra.dht.tokenallocator.TokenAllocation; http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java b/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java index 1271a5a..ff7f2f7 100644 --- a/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java +++ b/src/java/org/apache/cassandra/dht/ByteOrderedPartitioner.java @@ -17,8 +17,8 @@ */ package org.apache.cassandra.dht; -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.Schema; +import org.apache.cassandra.schema.TableMetadata; +import org.apache.cassandra.schema.Schema; import org.apache.cassandra.db.BufferDecoratedKey; import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.marshal.AbstractType; @@ -287,12 +287,12 @@ public class ByteOrderedPartitioner implements IPartitioner for (String ks : Schema.instance.getKeyspaces()) { - for (CFMetaData cfmd : Schema.instance.getTablesAndViews(ks)) + for (TableMetadata cfmd : Schema.instance.getTablesAndViews(ks)) { for (Range<Token> r : sortedRanges) { // Looping over every KS:CF:Range, get the splits size and add it to the count - allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.cfName, r, 1).size()); + allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.name, r, 1).size()); } } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java b/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java index 954b0af..16c5db1 100644 --- a/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java +++ b/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java @@ -23,13 +23,14 @@ import java.nio.charset.CharacterCodingException; import java.util.*; import java.util.concurrent.ThreadLocalRandom; -import org.apache.cassandra.config.*; import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.CachedHashDecoratedKey; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.UTF8Type; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.gms.VersionedValue; +import org.apache.cassandra.schema.Schema; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.service.StorageService; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; @@ -226,12 +227,12 @@ public class OrderPreservingPartitioner implements IPartitioner for (String ks : Schema.instance.getKeyspaces()) { - for (CFMetaData cfmd : Schema.instance.getTablesAndViews(ks)) + for (TableMetadata cfmd : Schema.instance.getTablesAndViews(ks)) { for (Range<Token> r : sortedRanges) { // Looping over every KS:CF:Range, get the splits size and add it to the count - allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.cfName, r, cfmd.params.minIndexInterval).size()); + allTokens.put(r.right, allTokens.get(r.right) + StorageService.instance.getSplits(ks, cfmd.name, r, cfmd.params.minIndexInterval).size()); } } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/exceptions/UnknownIndexException.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/exceptions/UnknownIndexException.java b/src/java/org/apache/cassandra/exceptions/UnknownIndexException.java new file mode 100644 index 0000000..fdc6840 --- /dev/null +++ b/src/java/org/apache/cassandra/exceptions/UnknownIndexException.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.cassandra.exceptions; + +import java.io.IOException; +import java.util.UUID; + +import org.apache.cassandra.schema.TableMetadata; + +/** + * Exception thrown when we read an index id from a serialized ReadCommand and no corresponding IndexMetadata + * can be found in the TableMetadata#indexes collection. Note that this is an internal exception and is not meant + * to be user facing, the node reading the ReadCommand should proceed as if no index id were present. + */ +public final class UnknownIndexException extends IOException +{ + public final UUID indexId; + public UnknownIndexException(TableMetadata metadata, UUID id) + { + super(String.format("Unknown index %s for table %s", id.toString(), metadata.toString())); + indexId = id; + } +} http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/exceptions/UnknownTableException.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/exceptions/UnknownTableException.java b/src/java/org/apache/cassandra/exceptions/UnknownTableException.java new file mode 100644 index 0000000..2cd7aab --- /dev/null +++ b/src/java/org/apache/cassandra/exceptions/UnknownTableException.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.cassandra.exceptions; + +import java.io.IOException; + +import org.apache.cassandra.schema.TableId; + +public class UnknownTableException extends IOException +{ + public final TableId id; + + public UnknownTableException(String msg, TableId id) + { + super(msg); + this.id = id; + } +} http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/hadoop/cql3/CqlBulkRecordWriter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlBulkRecordWriter.java b/src/java/org/apache/cassandra/hadoop/cql3/CqlBulkRecordWriter.java index fd9ed00..0f44e0c 100644 --- a/src/java/org/apache/cassandra/hadoop/cql3/CqlBulkRecordWriter.java +++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlBulkRecordWriter.java @@ -28,8 +28,8 @@ import java.util.concurrent.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.Config; + +import org.apache.cassandra.cql3.statements.CreateTableStatement; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.dht.Murmur3Partitioner; @@ -39,6 +39,7 @@ import org.apache.cassandra.hadoop.HadoopCompat; import org.apache.cassandra.io.sstable.CQLSSTableWriter; import org.apache.cassandra.io.sstable.SSTableLoader; import org.apache.cassandra.io.util.FileUtils; +import org.apache.cassandra.schema.TableMetadataRef; import org.apache.cassandra.streaming.StreamState; import org.apache.cassandra.utils.NativeSSTableLoaderClient; import org.apache.cassandra.utils.OutputHandler; @@ -171,7 +172,7 @@ public class CqlBulkRecordWriter extends RecordWriter<Object, List<ByteBuffer>> if (loader == null) { ExternalClient externalClient = new ExternalClient(conf); - externalClient.setTableMetadata(CFMetaData.compile(schema, keyspace)); + externalClient.setTableMetadata(TableMetadataRef.forOfflineTools(CreateTableStatement.parse(schema, keyspace).build())); loader = new SSTableLoader(outputDir, externalClient, new NullOutputHandler()) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/hadoop/cql3/CqlInputFormat.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlInputFormat.java b/src/java/org/apache/cassandra/hadoop/cql3/CqlInputFormat.java index 45a227b..9259042 100644 --- a/src/java/org/apache/cassandra/hadoop/cql3/CqlInputFormat.java +++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlInputFormat.java @@ -29,7 +29,7 @@ import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; import com.datastax.driver.core.TokenRange; -import org.apache.cassandra.config.SchemaConstants; +import org.apache.cassandra.schema.SchemaConstants; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.mapred.InputSplit; import org.apache.hadoop.mapred.JobConf; http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/hints/Hint.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/hints/Hint.java b/src/java/org/apache/cassandra/hints/Hint.java index 17fbf5d..4e8f139 100644 --- a/src/java/org/apache/cassandra/hints/Hint.java +++ b/src/java/org/apache/cassandra/hints/Hint.java @@ -18,9 +18,7 @@ package org.apache.cassandra.hints; import java.io.IOException; -import java.util.*; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import com.google.common.base.Throwables; @@ -29,6 +27,7 @@ import org.apache.cassandra.db.*; import org.apache.cassandra.io.IVersionedSerializer; import org.apache.cassandra.io.util.DataInputPlus; import org.apache.cassandra.io.util.DataOutputPlus; +import org.apache.cassandra.schema.TableId; import static org.apache.cassandra.db.TypeSizes.sizeof; import static org.apache.cassandra.db.TypeSizes.sizeofUnsignedVInt; @@ -89,9 +88,9 @@ public final class Hint { if (isLive()) { - // filter out partition update for table that have been truncated since hint's creation + // filter out partition update for tables that have been truncated since hint's creation Mutation filtered = mutation; - for (UUID id : mutation.getColumnFamilyIds()) + for (TableId id : mutation.getTableIds()) if (creationTime <= SystemKeyspace.getTruncatedAt(id)) filtered = filtered.without(id); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/hints/HintMessage.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/hints/HintMessage.java b/src/java/org/apache/cassandra/hints/HintMessage.java index 723ab6d..683b894 100644 --- a/src/java/org/apache/cassandra/hints/HintMessage.java +++ b/src/java/org/apache/cassandra/hints/HintMessage.java @@ -27,13 +27,14 @@ import javax.annotation.Nullable; import com.google.common.primitives.Ints; import org.apache.cassandra.db.TypeSizes; -import org.apache.cassandra.db.UnknownColumnFamilyException; +import org.apache.cassandra.exceptions.UnknownTableException; import org.apache.cassandra.io.IVersionedSerializer; import org.apache.cassandra.io.util.DataInputPlus; import org.apache.cassandra.io.util.DataOutputPlus; import org.apache.cassandra.net.MessageOut; import org.apache.cassandra.net.MessagingService; import org.apache.cassandra.io.util.TrackedDataInputPlus; +import org.apache.cassandra.schema.TableId; import org.apache.cassandra.utils.UUIDSerializer; /** @@ -58,7 +59,7 @@ public final class HintMessage final Hint hint; @Nullable // will usually be null, unless a hint deserialization fails due to an unknown table id - final UUID unknownTableID; + final TableId unknownTableID; HintMessage(UUID hostId, Hint hint) { @@ -67,7 +68,7 @@ public final class HintMessage this.unknownTableID = null; } - HintMessage(UUID hostId, UUID unknownTableID) + HintMessage(UUID hostId, TableId unknownTableID) { this.hostId = hostId; this.hint = null; @@ -122,10 +123,10 @@ public final class HintMessage { return new HintMessage(hostId, Hint.serializer.deserialize(countingIn, version)); } - catch (UnknownColumnFamilyException e) + catch (UnknownTableException e) { in.skipBytes(Ints.checkedCast(hintSize - countingIn.getBytesRead())); - return new HintMessage(hostId, e.cfId); + return new HintMessage(hostId, e.id); } } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/hints/HintsReader.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/hints/HintsReader.java b/src/java/org/apache/cassandra/hints/HintsReader.java index e0a73c1..6ede205 100644 --- a/src/java/org/apache/cassandra/hints/HintsReader.java +++ b/src/java/org/apache/cassandra/hints/HintsReader.java @@ -30,11 +30,10 @@ import com.google.common.util.concurrent.RateLimiter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.cassandra.db.UnknownColumnFamilyException; +import org.apache.cassandra.exceptions.UnknownTableException; import org.apache.cassandra.io.FSReadError; import org.apache.cassandra.utils.AbstractIterator; import org.apache.cassandra.utils.ByteBufferUtil; -import org.apache.cassandra.utils.CLibrary; /** * A paged non-compressed hints reader that provides two iterators: @@ -225,11 +224,11 @@ class HintsReader implements AutoCloseable, Iterable<HintsReader.Page> hint = Hint.serializer.deserialize(input, descriptor.messagingVersion()); input.checkLimit(0); } - catch (UnknownColumnFamilyException e) + catch (UnknownTableException e) { logger.warn("Failed to read a hint for {} - table with id {} is unknown in file {}", descriptor.hostId, - e.cfId, + e.id, descriptor.fileName()); input.skipBytes(Ints.checkedCast(size - input.bytesPastLimit())); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/Index.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/Index.java b/src/java/org/apache/cassandra/index/Index.java index e254555..1b4573d 100644 --- a/src/java/org/apache/cassandra/index/Index.java +++ b/src/java/org/apache/cassandra/index/Index.java @@ -26,7 +26,7 @@ import java.util.Set; import java.util.concurrent.Callable; import java.util.function.BiFunction; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.cql3.Operator; import org.apache.cassandra.db.*; import org.apache.cassandra.db.compaction.OperationType; @@ -123,7 +123,7 @@ import org.apache.cassandra.utils.concurrent.OpOrder; * * The input is the map of index options supplied in the WITH clause of a CREATE INDEX statement. * - * <pre>{@code public static Map<String, String> validateOptions(Map<String, String> options, CFMetaData cfm);}</pre> + * <pre>{@code public static Map<String, String> validateOptions(Map<String, String> options, TableMetadata metadata);}</pre> * * In this version, the base table's metadata is also supplied as an argument. * If both overloaded methods are provided, only the one including the base table's metadata will be invoked. @@ -303,7 +303,7 @@ public interface Index * @return true if the index depends on the supplied column being present; false if the column may be * safely dropped or modified without adversely affecting the index */ - public boolean dependsOn(ColumnDefinition column); + public boolean dependsOn(ColumnMetadata column); /** * Called to determine whether this index can provide a searcher to execute a query on the @@ -313,7 +313,7 @@ public interface Index * @param operator the operator of a search query predicate * @return true if this index is capable of supporting such expressions, false otherwise */ - public boolean supportsExpression(ColumnDefinition column, Operator operator); + public boolean supportsExpression(ColumnMetadata column, Operator operator); /** * If the index supports custom search expressions using the @@ -385,7 +385,7 @@ public interface Index * that type of transaction, ...). */ public Indexer indexerFor(DecoratedKey key, - PartitionColumns columns, + RegularAndStaticColumns columns, int nowInSec, OpOrder.Group opGroup, IndexTransaction.Type transactionType); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/SecondaryIndexManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/SecondaryIndexManager.java b/src/java/org/apache/cassandra/index/SecondaryIndexManager.java index 08b4f8b..f7b7d13 100644 --- a/src/java/org/apache/cassandra/index/SecondaryIndexManager.java +++ b/src/java/org/apache/cassandra/index/SecondaryIndexManager.java @@ -40,7 +40,6 @@ import org.slf4j.LoggerFactory; import org.apache.cassandra.concurrent.JMXEnabledThreadPoolExecutor; import org.apache.cassandra.concurrent.NamedThreadFactory; import org.apache.cassandra.concurrent.StageManager; -import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.statements.IndexTarget; import org.apache.cassandra.db.*; @@ -54,12 +53,12 @@ import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.index.internal.CassandraIndex; import org.apache.cassandra.index.transactions.*; import org.apache.cassandra.io.sstable.format.SSTableReader; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.schema.IndexMetadata; import org.apache.cassandra.schema.Indexes; import org.apache.cassandra.service.pager.SinglePartitionPager; import org.apache.cassandra.tracing.Tracing; import org.apache.cassandra.transport.ProtocolVersion; -import org.apache.cassandra.transport.Server; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.concurrent.OpOrder; import org.apache.cassandra.utils.concurrent.Refs; @@ -140,7 +139,7 @@ public class SecondaryIndexManager implements IndexRegistry public void reload() { // figure out what needs to be added and dropped. - Indexes tableIndexes = baseCfs.metadata.getIndexes(); + Indexes tableIndexes = baseCfs.metadata().indexes; indexes.keySet() .stream() .filter(indexName -> !tableIndexes.has(indexName)) @@ -214,7 +213,7 @@ public class SecondaryIndexManager implements IndexRegistry } - public Set<IndexMetadata> getDependentIndexes(ColumnDefinition column) + public Set<IndexMetadata> getDependentIndexes(ColumnMetadata column) { if (indexes.isEmpty()) return Collections.emptySet(); @@ -547,11 +546,11 @@ public class SecondaryIndexManager implements IndexRegistry public void indexPartition(DecoratedKey key, Set<Index> indexes, int pageSize) { if (logger.isTraceEnabled()) - logger.trace("Indexing partition {}", baseCfs.metadata.getKeyValidator().getString(key.getKey())); + logger.trace("Indexing partition {}", baseCfs.metadata().partitionKeyType.getString(key.getKey())); if (!indexes.isEmpty()) { - SinglePartitionReadCommand cmd = SinglePartitionReadCommand.fullPartitionRead(baseCfs.metadata, + SinglePartitionReadCommand cmd = SinglePartitionReadCommand.fullPartitionRead(baseCfs.metadata(), FBUtilities.nowInSeconds(), key); int nowInSec = cmd.nowInSec(); @@ -562,7 +561,7 @@ public class SecondaryIndexManager implements IndexRegistry { try (ReadExecutionController controller = cmd.executionController(); OpOrder.Group writeGroup = Keyspace.writeOrder.start(); - UnfilteredPartitionIterator page = pager.fetchPageUnfiltered(baseCfs.metadata, pageSize, controller)) + UnfilteredPartitionIterator page = pager.fetchPageUnfiltered(baseCfs.metadata(), pageSize, controller)) { if (!page.hasNext()) break; @@ -642,7 +641,7 @@ public class SecondaryIndexManager implements IndexRegistry if (meanCellsPerPartition <= 0) return DEFAULT_PAGE_SIZE; - int columnsPerRow = baseCfs.metadata.partitionColumns().regulars.size(); + int columnsPerRow = baseCfs.metadata().regularColumns().size(); if (columnsPerRow <= 0) return DEFAULT_PAGE_SIZE; @@ -653,8 +652,8 @@ public class SecondaryIndexManager implements IndexRegistry logger.trace("Calculated page size {} for indexing {}.{} ({}/{}/{}/{})", pageSize, - baseCfs.metadata.ksName, - baseCfs.metadata.cfName, + baseCfs.metadata.keyspace, + baseCfs.metadata.name, meanPartitionSize, meanCellsPerPartition, meanRowsPerPartition, @@ -855,25 +854,25 @@ public class SecondaryIndexManager implements IndexRegistry * Transaction for use when merging rows during compaction */ public CompactionTransaction newCompactionTransaction(DecoratedKey key, - PartitionColumns partitionColumns, + RegularAndStaticColumns regularAndStaticColumns, int versions, int nowInSec) { // the check for whether there are any registered indexes is already done in CompactionIterator - return new IndexGCTransaction(key, partitionColumns, versions, nowInSec, listIndexes()); + return new IndexGCTransaction(key, regularAndStaticColumns, versions, nowInSec, listIndexes()); } /** * Transaction for use when removing partitions during cleanup */ public CleanupTransaction newCleanupTransaction(DecoratedKey key, - PartitionColumns partitionColumns, + RegularAndStaticColumns regularAndStaticColumns, int nowInSec) { if (!hasIndexes()) return CleanupTransaction.NO_OP; - return new CleanupGCTransaction(key, partitionColumns, nowInSec, listIndexes()); + return new CleanupGCTransaction(key, regularAndStaticColumns, nowInSec, listIndexes()); } /** @@ -935,7 +934,7 @@ public class SecondaryIndexManager implements IndexRegistry { } - public void onComplexDeletion(int i, Clustering clustering, ColumnDefinition column, DeletionTime merged, DeletionTime original) + public void onComplexDeletion(int i, Clustering clustering, ColumnMetadata column, DeletionTime merged, DeletionTime original) { } @@ -986,7 +985,7 @@ public class SecondaryIndexManager implements IndexRegistry private static final class IndexGCTransaction implements CompactionTransaction { private final DecoratedKey key; - private final PartitionColumns columns; + private final RegularAndStaticColumns columns; private final int versions; private final int nowInSec; private final Collection<Index> indexes; @@ -994,7 +993,7 @@ public class SecondaryIndexManager implements IndexRegistry private Row[] rows; private IndexGCTransaction(DecoratedKey key, - PartitionColumns columns, + RegularAndStaticColumns columns, int versions, int nowInSec, Collection<Index> indexes) @@ -1029,7 +1028,7 @@ public class SecondaryIndexManager implements IndexRegistry { } - public void onComplexDeletion(int i, Clustering clustering, ColumnDefinition column, DeletionTime merged, DeletionTime original) + public void onComplexDeletion(int i, Clustering clustering, ColumnMetadata column, DeletionTime merged, DeletionTime original) { } @@ -1089,7 +1088,7 @@ public class SecondaryIndexManager implements IndexRegistry private static final class CleanupGCTransaction implements CleanupTransaction { private final DecoratedKey key; - private final PartitionColumns columns; + private final RegularAndStaticColumns columns; private final int nowInSec; private final Collection<Index> indexes; @@ -1097,7 +1096,7 @@ public class SecondaryIndexManager implements IndexRegistry private DeletionTime partitionDelete; private CleanupGCTransaction(DecoratedKey key, - PartitionColumns columns, + RegularAndStaticColumns columns, int nowInSec, Collection<Index> indexes) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/TargetParser.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/TargetParser.java b/src/java/org/apache/cassandra/index/TargetParser.java index 849ad16..ec25259 100644 --- a/src/java/org/apache/cassandra/index/TargetParser.java +++ b/src/java/org/apache/cassandra/index/TargetParser.java @@ -22,8 +22,8 @@ import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.cql3.statements.IndexTarget; import org.apache.cassandra.exceptions.ConfigurationException; @@ -36,17 +36,17 @@ public class TargetParser private static final Pattern TWO_QUOTES = Pattern.compile("\"\""); private static final String QUOTE = "\""; - public static Pair<ColumnDefinition, IndexTarget.Type> parse(CFMetaData cfm, IndexMetadata indexDef) + public static Pair<ColumnMetadata, IndexTarget.Type> parse(TableMetadata metadata, IndexMetadata indexDef) { String target = indexDef.options.get("target"); assert target != null : String.format("No target definition found for index %s", indexDef.name); - Pair<ColumnDefinition, IndexTarget.Type> result = parse(cfm, target); + Pair<ColumnMetadata, IndexTarget.Type> result = parse(metadata, target); if (result == null) throw new ConfigurationException(String.format("Unable to parse targets for index %s (%s)", indexDef.name, target)); return result; } - public static Pair<ColumnDefinition, IndexTarget.Type> parse(CFMetaData cfm, String target) + public static Pair<ColumnMetadata, IndexTarget.Type> parse(TableMetadata metadata, String target) { // if the regex matches then the target is in the form "keys(foo)", "entries(bar)" etc // if not, then it must be a simple column name and implictly its type is VALUES @@ -77,11 +77,11 @@ public class TargetParser } // if it's not a CQL table, we can't assume that the column name is utf8, so - // in that case we have to do a linear scan of the cfm's columns to get the matching one - if (cfm.isCQLTable()) - return Pair.create(cfm.getColumnDefinition(new ColumnIdentifier(columnName, true)), targetType); + // in that case we have to do a linear scan of the table's columns to get the matching one + if (metadata.isCQLTable()) + return Pair.create(metadata.getColumn(new ColumnIdentifier(columnName, true)), targetType); else - for (ColumnDefinition column : cfm.allColumns()) + for (ColumnMetadata column : metadata.columns()) if (column.name.toString().equals(columnName)) return Pair.create(column, targetType); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/CassandraIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/CassandraIndex.java b/src/java/org/apache/cassandra/index/internal/CassandraIndex.java index 70aaf0d..af75906 100644 --- a/src/java/org/apache/cassandra/index/internal/CassandraIndex.java +++ b/src/java/org/apache/cassandra/index/internal/CassandraIndex.java @@ -33,8 +33,9 @@ import com.google.common.collect.ImmutableSet; 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.TableMetadata; +import org.apache.cassandra.schema.TableMetadataRef; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.cql3.Operator; import org.apache.cassandra.cql3.statements.IndexTarget; import org.apache.cassandra.db.*; @@ -76,7 +77,7 @@ public abstract class CassandraIndex implements Index public final ColumnFamilyStore baseCfs; protected IndexMetadata metadata; protected ColumnFamilyStore indexCfs; - protected ColumnDefinition indexedColumn; + protected ColumnMetadata indexedColumn; protected CassandraIndexFunctions functions; protected CassandraIndex(ColumnFamilyStore baseCfs, IndexMetadata indexDef) @@ -91,7 +92,7 @@ public abstract class CassandraIndex implements Index * @param operator * @return */ - protected boolean supportsOperator(ColumnDefinition indexedColumn, Operator operator) + protected boolean supportsOperator(ColumnMetadata indexedColumn, Operator operator) { return operator == Operator.EQ; } @@ -145,14 +146,14 @@ public abstract class CassandraIndex implements Index CellPath path, ByteBuffer cellValue); - public ColumnDefinition getIndexedColumn() + public ColumnMetadata getIndexedColumn() { return indexedColumn; } public ClusteringComparator getIndexComparator() { - return indexCfs.metadata.comparator; + return indexCfs.metadata().comparator; } public ColumnFamilyStore getIndexCfs() @@ -201,7 +202,6 @@ public abstract class CassandraIndex implements Index public Callable<?> getMetadataReloadTask(IndexMetadata indexDef) { return () -> { - indexCfs.metadata.reloadIndexMetadataProperties(baseCfs.metadata); indexCfs.reload(); return null; }; @@ -223,12 +223,12 @@ public abstract class CassandraIndex implements Index private void setMetadata(IndexMetadata indexDef) { metadata = indexDef; - Pair<ColumnDefinition, IndexTarget.Type> target = TargetParser.parse(baseCfs.metadata, indexDef); + Pair<ColumnMetadata, IndexTarget.Type> target = TargetParser.parse(baseCfs.metadata(), indexDef); functions = getFunctions(indexDef, target); - CFMetaData cfm = indexCfsMetadata(baseCfs.metadata, indexDef); + TableMetadataRef tableRef = TableMetadataRef.forOfflineTools(indexCfsMetadata(baseCfs.metadata(), indexDef)); indexCfs = ColumnFamilyStore.createColumnFamilyStore(baseCfs.keyspace, - cfm.cfName, - cfm, + tableRef.name, + tableRef, baseCfs.getTracker().loadsstables); indexedColumn = target.left; } @@ -247,12 +247,12 @@ public abstract class CassandraIndex implements Index return true; } - public boolean dependsOn(ColumnDefinition column) + public boolean dependsOn(ColumnMetadata column) { return indexedColumn.name.equals(column.name); } - public boolean supportsExpression(ColumnDefinition column, Operator operator) + public boolean supportsExpression(ColumnMetadata column, Operator operator) { return indexedColumn.name.equals(column.name) && supportsOperator(indexedColumn, operator); @@ -338,7 +338,7 @@ public abstract class CassandraIndex implements Index } public Indexer indexerFor(final DecoratedKey key, - final PartitionColumns columns, + final RegularAndStaticColumns columns, final int nowInSec, final OpOrder.Group opGroup, final IndexTransaction.Type transactionType) @@ -618,11 +618,10 @@ public abstract class CassandraIndex implements Index { if (value != null && value.remaining() >= FBUtilities.MAX_UNSIGNED_SHORT) throw new InvalidRequestException(String.format( - "Cannot index value of size %d for index %s on %s.%s(%s) (maximum allowed size=%d)", + "Cannot index value of size %d for index %s on %s(%s) (maximum allowed size=%d)", value.remaining(), metadata.name, - baseCfs.metadata.ksName, - baseCfs.metadata.cfName, + baseCfs.metadata, indexedColumn.name.toString(), FBUtilities.MAX_UNSIGNED_SHORT)); } @@ -654,7 +653,7 @@ public abstract class CassandraIndex implements Index private PartitionUpdate partitionUpdate(DecoratedKey valueKey, Row row) { - return PartitionUpdate.singleRowUpdate(indexCfs.metadata, valueKey, row); + return PartitionUpdate.singleRowUpdate(indexCfs.metadata(), valueKey, row); } private void invalidate() @@ -697,8 +696,8 @@ public abstract class CassandraIndex implements Index if (sstables.isEmpty()) { logger.info("No SSTable data for {}.{} to build index {} from, marking empty index as built", - baseCfs.metadata.ksName, - baseCfs.metadata.cfName, + baseCfs.metadata.keyspace, + baseCfs.metadata.name, metadata.name); baseCfs.indexManager.markIndexBuilt(metadata.name); return; @@ -727,31 +726,27 @@ public abstract class CassandraIndex implements Index } /** - * Construct the CFMetadata for an index table, the clustering columns in the index table + * Construct the TableMetadata for an index table, the clustering columns in the index table * vary dependent on the kind of the indexed value. * @param baseCfsMetadata * @param indexMetadata * @return */ - public static final CFMetaData indexCfsMetadata(CFMetaData baseCfsMetadata, IndexMetadata indexMetadata) + public static TableMetadata indexCfsMetadata(TableMetadata baseCfsMetadata, IndexMetadata indexMetadata) { - Pair<ColumnDefinition, IndexTarget.Type> target = TargetParser.parse(baseCfsMetadata, indexMetadata); + Pair<ColumnMetadata, IndexTarget.Type> target = TargetParser.parse(baseCfsMetadata, indexMetadata); CassandraIndexFunctions utils = getFunctions(indexMetadata, target); - ColumnDefinition indexedColumn = target.left; + ColumnMetadata indexedColumn = target.left; AbstractType<?> indexedValueType = utils.getIndexedValueType(indexedColumn); - // Tables for legacy KEYS indexes are non-compound and dense - CFMetaData.Builder builder = indexMetadata.isKeys() - ? CFMetaData.Builder.create(baseCfsMetadata.ksName, - baseCfsMetadata.indexColumnFamilyName(indexMetadata), - true, false, false) - : CFMetaData.Builder.create(baseCfsMetadata.ksName, - baseCfsMetadata.indexColumnFamilyName(indexMetadata)); - - builder = builder.withId(baseCfsMetadata.cfId) - .withPartitioner(new LocalPartitioner(indexedValueType)) - .addPartitionKey(indexedColumn.name, indexedColumn.type) - .addClusteringColumn("partition_key", baseCfsMetadata.partitioner.partitionOrdering()); + TableMetadata.Builder builder = + TableMetadata.builder(baseCfsMetadata.keyspace, baseCfsMetadata.indexTableName(indexMetadata), baseCfsMetadata.id) + // tables for legacy KEYS indexes are non-compound and dense + .isDense(indexMetadata.isKeys()) + .isCompound(!indexMetadata.isKeys()) + .partitioner(new LocalPartitioner(indexedValueType)) + .addPartitionKeyColumn(indexedColumn.name, indexedColumn.type) + .addClusteringColumn("partition_key", baseCfsMetadata.partitioner.partitionOrdering()); if (indexMetadata.isKeys()) { @@ -759,16 +754,16 @@ public abstract class CassandraIndex implements Index // value column defined, even though it is never used CompactTables.DefaultNames names = CompactTables.defaultNameGenerator(ImmutableSet.of(indexedColumn.name.toString(), "partition_key")); - builder = builder.addRegularColumn(names.defaultCompactValueName(), EmptyType.instance); + builder.addRegularColumn(names.defaultCompactValueName(), EmptyType.instance); } else { // The clustering columns for a table backing a COMPOSITES index are dependent // on the specific type of index (there are specializations for indexes on collections) - builder = utils.addIndexClusteringColumns(builder, baseCfsMetadata, indexedColumn); + utils.addIndexClusteringColumns(builder, baseCfsMetadata, indexedColumn); } - return builder.build().reloadIndexMetadataProperties(baseCfsMetadata); + return builder.build().updateIndexTableMetadata(baseCfsMetadata.params); } /** @@ -779,16 +774,16 @@ public abstract class CassandraIndex implements Index */ public static CassandraIndex newIndex(ColumnFamilyStore baseCfs, IndexMetadata indexMetadata) { - return getFunctions(indexMetadata, TargetParser.parse(baseCfs.metadata, indexMetadata)).newIndexInstance(baseCfs, indexMetadata); + return getFunctions(indexMetadata, TargetParser.parse(baseCfs.metadata(), indexMetadata)).newIndexInstance(baseCfs, indexMetadata); } static CassandraIndexFunctions getFunctions(IndexMetadata indexDef, - Pair<ColumnDefinition, IndexTarget.Type> target) + Pair<ColumnMetadata, IndexTarget.Type> target) { if (indexDef.isKeys()) return CassandraIndexFunctions.KEYS_INDEX_FUNCTIONS; - ColumnDefinition indexedColumn = target.left; + ColumnMetadata indexedColumn = target.left; if (indexedColumn.type.isCollection() && indexedColumn.type.isMultiCell()) { switch (((CollectionType)indexedColumn.type).kind) http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/CassandraIndexFunctions.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/CassandraIndexFunctions.java b/src/java/org/apache/cassandra/index/internal/CassandraIndexFunctions.java index 8047e1d..3d500a1 100644 --- a/src/java/org/apache/cassandra/index/internal/CassandraIndexFunctions.java +++ b/src/java/org/apache/cassandra/index/internal/CassandraIndexFunctions.java @@ -20,8 +20,8 @@ package org.apache.cassandra.index.internal; import java.util.List; -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.CollectionType; @@ -46,14 +46,14 @@ public interface CassandraIndexFunctions * @param indexedColumn * @return */ - default AbstractType<?> getIndexedValueType(ColumnDefinition indexedColumn) + default AbstractType<?> getIndexedValueType(ColumnMetadata indexedColumn) { return indexedColumn.type; } /** - * Add the clustering columns for a specific type of index table to the a CFMetaData.Builder (which is being - * used to construct the index table's CFMetadata. In the default implementation, the clustering columns of the + * Add the clustering columns for a specific type of index table to the a TableMetadata.Builder (which is being + * used to construct the index table's TableMetadata. In the default implementation, the clustering columns of the * index table hold the partition key and clustering columns of the base table. This is overridden in several cases: * * When the indexed value is itself a clustering column, in which case, we only need store the base table's * *other* clustering values in the index - the indexed value being the index table's partition key @@ -68,11 +68,11 @@ public interface CassandraIndexFunctions * @param cfDef * @return */ - default CFMetaData.Builder addIndexClusteringColumns(CFMetaData.Builder builder, - CFMetaData baseMetadata, - ColumnDefinition cfDef) + default TableMetadata.Builder addIndexClusteringColumns(TableMetadata.Builder builder, + TableMetadata baseMetadata, + ColumnMetadata cfDef) { - for (ColumnDefinition def : baseMetadata.clusteringColumns()) + for (ColumnMetadata def : baseMetadata.clusteringColumns()) builder.addClusteringColumn(def.name, def.type); return builder; } @@ -104,21 +104,22 @@ public interface CassandraIndexFunctions return new ClusteringColumnIndex(baseCfs, indexMetadata); } - public CFMetaData.Builder addIndexClusteringColumns(CFMetaData.Builder builder, - CFMetaData baseMetadata, - ColumnDefinition columnDef) + public TableMetadata.Builder addIndexClusteringColumns(TableMetadata.Builder builder, + TableMetadata baseMetadata, + ColumnMetadata columnDef) { - List<ColumnDefinition> cks = baseMetadata.clusteringColumns(); + List<ColumnMetadata> cks = baseMetadata.clusteringColumns(); for (int i = 0; i < columnDef.position(); i++) { - ColumnDefinition def = cks.get(i); + ColumnMetadata def = cks.get(i); builder.addClusteringColumn(def.name, def.type); } for (int i = columnDef.position() + 1; i < cks.size(); i++) { - ColumnDefinition def = cks.get(i); + ColumnMetadata def = cks.get(i); builder.addClusteringColumn(def.name, def.type); } + return builder; } }; @@ -138,7 +139,7 @@ public interface CassandraIndexFunctions return new CollectionKeyIndex(baseCfs, indexMetadata); } - public AbstractType<?> getIndexedValueType(ColumnDefinition indexedColumn) + public AbstractType<?> getIndexedValueType(ColumnMetadata indexedColumn) { return ((CollectionType) indexedColumn.type).nameComparator(); } @@ -152,16 +153,16 @@ public interface CassandraIndexFunctions return new CollectionValueIndex(baseCfs, indexMetadata); } - public AbstractType<?> getIndexedValueType(ColumnDefinition indexedColumn) + public AbstractType<?> getIndexedValueType(ColumnMetadata indexedColumn) { return ((CollectionType)indexedColumn.type).valueComparator(); } - public CFMetaData.Builder addIndexClusteringColumns(CFMetaData.Builder builder, - CFMetaData baseMetadata, - ColumnDefinition columnDef) + public TableMetadata.Builder addIndexClusteringColumns(TableMetadata.Builder builder, + TableMetadata baseMetadata, + ColumnMetadata columnDef) { - for (ColumnDefinition def : baseMetadata.clusteringColumns()) + for (ColumnMetadata def : baseMetadata.clusteringColumns()) builder.addClusteringColumn(def.name, def.type); // collection key @@ -177,7 +178,7 @@ public interface CassandraIndexFunctions return new CollectionEntryIndex(baseCfs, indexMetadata); } - public AbstractType<?> getIndexedValueType(ColumnDefinition indexedColumn) + public AbstractType<?> getIndexedValueType(ColumnMetadata indexedColumn) { CollectionType colType = (CollectionType)indexedColumn.type; return CompositeType.getInstance(colType.nameComparator(), colType.valueComparator()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/CassandraIndexSearcher.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/CassandraIndexSearcher.java b/src/java/org/apache/cassandra/index/internal/CassandraIndexSearcher.java index 7b622e3..005e5b9 100644 --- a/src/java/org/apache/cassandra/index/internal/CassandraIndexSearcher.java +++ b/src/java/org/apache/cassandra/index/internal/CassandraIndexSearcher.java @@ -26,7 +26,8 @@ import java.util.NavigableSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.schema.TableMetadata; +import org.apache.cassandra.schema.TableMetadataRef; import org.apache.cassandra.db.*; import org.apache.cassandra.db.filter.*; import org.apache.cassandra.db.partitions.UnfilteredPartitionIterator; @@ -76,8 +77,8 @@ public abstract class CassandraIndexSearcher implements Index.Searcher { ClusteringIndexFilter filter = makeIndexFilter(command); ColumnFamilyStore indexCfs = index.getBackingTable().get(); - CFMetaData indexCfm = indexCfs.metadata; - return SinglePartitionReadCommand.create(indexCfm, command.nowInSec(), indexKey, ColumnFilter.all(indexCfm), filter) + TableMetadata indexMetadata = indexCfs.metadata(); + return SinglePartitionReadCommand.create(indexMetadata, command.nowInSec(), indexKey, ColumnFilter.all(indexMetadata), filter) .queryMemtableAndDisk(indexCfs, executionController.indexReadController()); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/CollatedViewIndexBuilder.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/CollatedViewIndexBuilder.java b/src/java/org/apache/cassandra/index/internal/CollatedViewIndexBuilder.java index 811d857..103a1ee 100644 --- a/src/java/org/apache/cassandra/index/internal/CollatedViewIndexBuilder.java +++ b/src/java/org/apache/cassandra/index/internal/CollatedViewIndexBuilder.java @@ -51,7 +51,7 @@ public class CollatedViewIndexBuilder extends SecondaryIndexBuilder public CompactionInfo getCompactionInfo() { - return new CompactionInfo(cfs.metadata, + return new CompactionInfo(cfs.metadata(), OperationType.INDEX_BUILD, iter.getBytesRead(), iter.getTotalBytes(), http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/composites/ClusteringColumnIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/composites/ClusteringColumnIndex.java b/src/java/org/apache/cassandra/index/internal/composites/ClusteringColumnIndex.java index f207e9b..ab05a4e 100644 --- a/src/java/org/apache/cassandra/index/internal/composites/ClusteringColumnIndex.java +++ b/src/java/org/apache/cassandra/index/internal/composites/ClusteringColumnIndex.java @@ -76,7 +76,7 @@ public class ClusteringColumnIndex extends CassandraIndex public IndexEntry decodeEntry(DecoratedKey indexedValue, Row indexEntry) { - int ckCount = baseCfs.metadata.clusteringColumns().size(); + int ckCount = baseCfs.metadata().clusteringColumns().size(); Clustering clustering = indexEntry.clustering(); CBuilder builder = CBuilder.create(baseCfs.getComparator()); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/composites/CollectionEntryIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/composites/CollectionEntryIndex.java b/src/java/org/apache/cassandra/index/internal/composites/CollectionEntryIndex.java index 1113600..efe84b6 100644 --- a/src/java/org/apache/cassandra/index/internal/composites/CollectionEntryIndex.java +++ b/src/java/org/apache/cassandra/index/internal/composites/CollectionEntryIndex.java @@ -19,7 +19,7 @@ package org.apache.cassandra.index.internal.composites; import java.nio.ByteBuffer; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.db.Clustering; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.marshal.AbstractType; @@ -57,7 +57,7 @@ public class CollectionEntryIndex extends CollectionKeyIndexBase ByteBuffer mapKey = components[0]; ByteBuffer mapValue = components[1]; - ColumnDefinition columnDef = indexedColumn; + ColumnMetadata columnDef = indexedColumn; Cell cell = data.getCell(columnDef, CellPath.create(mapKey)); if (cell == null || !cell.isLive(nowInSec)) return true; http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndex.java b/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndex.java index 42c45e5..4fc20ae 100644 --- a/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndex.java +++ b/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndex.java @@ -19,7 +19,7 @@ package org.apache.cassandra.index.internal.composites; import java.nio.ByteBuffer; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.cql3.Operator; import org.apache.cassandra.db.Clustering; import org.apache.cassandra.db.ColumnFamilyStore; @@ -56,7 +56,7 @@ public class CollectionKeyIndex extends CollectionKeyIndexBase return cell == null || !cell.isLive(nowInSec); } - public boolean supportsOperator(ColumnDefinition indexedColumn, Operator operator) + public boolean supportsOperator(ColumnMetadata indexedColumn, Operator operator) { return operator == Operator.CONTAINS_KEY || operator == Operator.CONTAINS && indexedColumn.type instanceof SetType; http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndexBase.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndexBase.java b/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndexBase.java index ef76870..fccf522 100644 --- a/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndexBase.java +++ b/src/java/org/apache/cassandra/index/internal/composites/CollectionKeyIndexBase.java @@ -73,7 +73,7 @@ public abstract class CollectionKeyIndexBase extends CassandraIndex indexedEntryClustering = Clustering.STATIC_CLUSTERING; else { - int count = 1 + baseCfs.metadata.clusteringColumns().size(); + int count = 1 + baseCfs.metadata().clusteringColumns().size(); CBuilder builder = CBuilder.create(baseCfs.getComparator()); for (int i = 0; i < count - 1; i++) builder.add(clustering.get(i + 1)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/composites/CollectionValueIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/composites/CollectionValueIndex.java b/src/java/org/apache/cassandra/index/internal/composites/CollectionValueIndex.java index 5929e69..4f0f2df 100644 --- a/src/java/org/apache/cassandra/index/internal/composites/CollectionValueIndex.java +++ b/src/java/org/apache/cassandra/index/internal/composites/CollectionValueIndex.java @@ -19,7 +19,7 @@ package org.apache.cassandra.index.internal.composites; import java.nio.ByteBuffer; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.cql3.Operator; import org.apache.cassandra.db.*; import org.apache.cassandra.db.marshal.CollectionType; @@ -67,7 +67,7 @@ public class CollectionValueIndex extends CassandraIndex // partition key is needed at query time. // In the non-static case, cell will be present during indexing but // not when searching (CASSANDRA-7525). - if (prefix.size() == baseCfs.metadata.clusteringColumns().size() && path != null) + if (prefix.size() == baseCfs.metadata().clusteringColumns().size() && path != null) builder.add(path.get(0)); return builder; @@ -94,14 +94,14 @@ public class CollectionValueIndex extends CassandraIndex indexedEntryClustering); } - public boolean supportsOperator(ColumnDefinition indexedColumn, Operator operator) + public boolean supportsOperator(ColumnMetadata indexedColumn, Operator operator) { return operator == Operator.CONTAINS && !(indexedColumn.type instanceof SetType); } public boolean isStale(Row data, ByteBuffer indexValue, int nowInSec) { - ColumnDefinition columnDef = indexedColumn; + ColumnMetadata columnDef = indexedColumn; ComplexColumnData complexData = data.getComplexColumnData(columnDef); if (complexData == null) return true; http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java b/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java index b5e4a78..7ee3bb5 100644 --- a/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java +++ b/src/java/org/apache/cassandra/index/internal/composites/CompositesSearcher.java @@ -21,7 +21,7 @@ import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; -import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.db.*; import org.apache.cassandra.db.filter.ClusteringIndexNamesFilter; import org.apache.cassandra.db.filter.ClusteringIndexSliceFilter; @@ -69,7 +69,7 @@ public class CompositesSearcher extends CassandraIndexSearcher private UnfilteredRowIterator next; - public CFMetaData metadata() + public TableMetadata metadata() { return command.metadata(); } @@ -111,7 +111,7 @@ public class CompositesSearcher extends CassandraIndexSearcher { // If the index is on a static column, we just need to do a full read on the partition. // Note that we want to re-use the command.columnFilter() in case of future change. - dataCmd = SinglePartitionReadCommand.create(index.baseCfs.metadata, + dataCmd = SinglePartitionReadCommand.create(index.baseCfs.metadata(), command.nowInSec(), command.columnFilter(), RowFilter.NONE, @@ -148,7 +148,7 @@ public class CompositesSearcher extends CassandraIndexSearcher // Query the gathered index hits. We still need to filter stale hits from the resulting query. ClusteringIndexNamesFilter filter = new ClusteringIndexNamesFilter(clusterings.build(), false); - dataCmd = SinglePartitionReadCommand.create(index.baseCfs.metadata, + dataCmd = SinglePartitionReadCommand.create(index.baseCfs.metadata(), command.nowInSec(), command.columnFilter(), command.rowFilter(), http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/composites/PartitionKeyIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/composites/PartitionKeyIndex.java b/src/java/org/apache/cassandra/index/internal/composites/PartitionKeyIndex.java index 2c0b5aa..810571c 100644 --- a/src/java/org/apache/cassandra/index/internal/composites/PartitionKeyIndex.java +++ b/src/java/org/apache/cassandra/index/internal/composites/PartitionKeyIndex.java @@ -57,7 +57,7 @@ public class PartitionKeyIndex extends CassandraIndex CellPath path, ByteBuffer cellValue) { - CompositeType keyComparator = (CompositeType)baseCfs.metadata.getKeyValidator(); + CompositeType keyComparator = (CompositeType)baseCfs.metadata().partitionKeyType; ByteBuffer[] components = keyComparator.split(partitionKey); return components[indexedColumn.position()]; } @@ -75,7 +75,7 @@ public class PartitionKeyIndex extends CassandraIndex public IndexEntry decodeEntry(DecoratedKey indexedValue, Row indexEntry) { - int ckCount = baseCfs.metadata.clusteringColumns().size(); + int ckCount = baseCfs.metadata().clusteringColumns().size(); Clustering clustering = indexEntry.clustering(); CBuilder builder = CBuilder.create(baseCfs.getComparator()); for (int i = 0; i < ckCount; i++) http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/keys/KeysIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/keys/KeysIndex.java b/src/java/org/apache/cassandra/index/internal/keys/KeysIndex.java index d680253..20a1915 100644 --- a/src/java/org/apache/cassandra/index/internal/keys/KeysIndex.java +++ b/src/java/org/apache/cassandra/index/internal/keys/KeysIndex.java @@ -22,8 +22,9 @@ package org.apache.cassandra.index.internal.keys; import java.nio.ByteBuffer; -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.TableMetadata; +import org.apache.cassandra.schema.TableMetadataRef; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.db.*; import org.apache.cassandra.db.rows.Cell; import org.apache.cassandra.db.rows.CellPath; @@ -39,17 +40,17 @@ public class KeysIndex extends CassandraIndex super(baseCfs, indexDef); } - public CFMetaData.Builder addIndexClusteringColumns(CFMetaData.Builder builder, - CFMetaData baseMetadata, - ColumnDefinition cfDef) + public TableMetadata.Builder addIndexClusteringColumns(TableMetadata.Builder builder, + TableMetadataRef baseMetadata, + ColumnMetadata cfDef) { // no additional clustering columns required return builder; } protected CBuilder buildIndexClusteringPrefix(ByteBuffer partitionKey, - ClusteringPrefix prefix, - CellPath path) + ClusteringPrefix prefix, + CellPath path) { CBuilder builder = CBuilder.create(getIndexComparator()); builder.add(partitionKey); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/internal/keys/KeysSearcher.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/internal/keys/KeysSearcher.java b/src/java/org/apache/cassandra/index/internal/keys/KeysSearcher.java index febb09f..2ab5345 100644 --- a/src/java/org/apache/cassandra/index/internal/keys/KeysSearcher.java +++ b/src/java/org/apache/cassandra/index/internal/keys/KeysSearcher.java @@ -22,7 +22,6 @@ import java.nio.ByteBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.db.*; import org.apache.cassandra.db.filter.ColumnFilter; import org.apache.cassandra.db.filter.DataLimits; @@ -31,6 +30,7 @@ import org.apache.cassandra.db.partitions.UnfilteredPartitionIterator; import org.apache.cassandra.db.rows.*; import org.apache.cassandra.index.internal.CassandraIndex; import org.apache.cassandra.index.internal.CassandraIndexSearcher; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.utils.concurrent.OpOrder; public class KeysSearcher extends CassandraIndexSearcher @@ -55,7 +55,7 @@ public class KeysSearcher extends CassandraIndexSearcher { private UnfilteredRowIterator next; - public CFMetaData metadata() + public TableMetadata metadata() { return command.metadata(); } @@ -85,7 +85,7 @@ public class KeysSearcher extends CassandraIndexSearcher continue; ColumnFilter extendedFilter = getExtendedFilter(command.columnFilter()); - SinglePartitionReadCommand dataCmd = SinglePartitionReadCommand.create(index.baseCfs.metadata, + SinglePartitionReadCommand dataCmd = SinglePartitionReadCommand.create(index.baseCfs.metadata(), command.nowInSec(), extendedFilter, command.rowFilter(), http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/sasi/SASIIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java b/src/java/org/apache/cassandra/index/sasi/SASIIndex.java index 4375964..5257cb7 100644 --- a/src/java/org/apache/cassandra/index/sasi/SASIIndex.java +++ b/src/java/org/apache/cassandra/index/sasi/SASIIndex.java @@ -52,7 +52,10 @@ import org.apache.cassandra.io.sstable.Descriptor; import org.apache.cassandra.io.sstable.format.SSTableFlushObserver; import org.apache.cassandra.io.sstable.format.SSTableReader; import org.apache.cassandra.notifications.*; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.schema.IndexMetadata; +import org.apache.cassandra.schema.Schema; +import org.apache.cassandra.schema.TableMetadata; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.Pair; import org.apache.cassandra.utils.concurrent.OpOrder; @@ -65,7 +68,7 @@ public class SASIIndex implements Index, INotificationConsumer Set<Index> indexes, Collection<SSTableReader> sstablesToRebuild) { - NavigableMap<SSTableReader, Map<ColumnDefinition, ColumnIndex>> sstables = new TreeMap<>((a, b) -> { + NavigableMap<SSTableReader, Map<ColumnMetadata, ColumnIndex>> sstables = new TreeMap<>((a, b) -> { return Integer.compare(a.descriptor.generation, b.descriptor.generation); }); @@ -77,7 +80,7 @@ public class SASIIndex implements Index, INotificationConsumer sstablesToRebuild.stream() .filter((sstable) -> !sasi.index.hasSSTable(sstable)) .forEach((sstable) -> { - Map<ColumnDefinition, ColumnIndex> toBuild = sstables.get(sstable); + Map<ColumnMetadata, ColumnIndex> toBuild = sstables.get(sstable); if (toBuild == null) sstables.put(sstable, (toBuild = new HashMap<>())); @@ -100,18 +103,18 @@ public class SASIIndex implements Index, INotificationConsumer this.baseCfs = baseCfs; this.config = config; - ColumnDefinition column = TargetParser.parse(baseCfs.metadata, config).left; - this.index = new ColumnIndex(baseCfs.metadata.getKeyValidator(), column, config); + ColumnMetadata column = TargetParser.parse(baseCfs.metadata(), config).left; + this.index = new ColumnIndex(baseCfs.metadata().partitionKeyType, column, config); Tracker tracker = baseCfs.getTracker(); tracker.subscribe(this); - SortedMap<SSTableReader, Map<ColumnDefinition, ColumnIndex>> toRebuild = new TreeMap<>((a, b) + SortedMap<SSTableReader, Map<ColumnMetadata, ColumnIndex>> toRebuild = new TreeMap<>((a, b) -> Integer.compare(a.descriptor.generation, b.descriptor.generation)); for (SSTableReader sstable : index.init(tracker.getView().liveSSTables())) { - Map<ColumnDefinition, ColumnIndex> perSSTable = toRebuild.get(sstable); + Map<ColumnMetadata, ColumnIndex> perSSTable = toRebuild.get(sstable); if (perSSTable == null) toRebuild.put(sstable, (perSSTable = new HashMap<>())); @@ -121,16 +124,16 @@ public class SASIIndex implements Index, INotificationConsumer CompactionManager.instance.submitIndexBuild(new SASIIndexBuilder(baseCfs, toRebuild)); } - public static Map<String, String> validateOptions(Map<String, String> options, CFMetaData cfm) + public static Map<String, String> validateOptions(Map<String, String> options, TableMetadata metadata) { - if (!(cfm.partitioner instanceof Murmur3Partitioner)) + if (!(metadata.partitioner instanceof Murmur3Partitioner)) throw new ConfigurationException("SASI only supports Murmur3Partitioner."); String targetColumn = options.get("target"); if (targetColumn == null) throw new ConfigurationException("unknown target column"); - Pair<ColumnDefinition, IndexTarget.Type> target = TargetParser.parse(cfm, targetColumn); + Pair<ColumnMetadata, IndexTarget.Type> target = TargetParser.parse(metadata, targetColumn); if (target == null) throw new ConfigurationException("failed to retrieve target column for: " + targetColumn); @@ -200,17 +203,17 @@ public class SASIIndex implements Index, INotificationConsumer return Optional.empty(); } - public boolean indexes(PartitionColumns columns) + public boolean indexes(RegularAndStaticColumns columns) { return columns.contains(index.getDefinition()); } - public boolean dependsOn(ColumnDefinition column) + public boolean dependsOn(ColumnMetadata column) { return index.getDefinition().compareTo(column) == 0; } - public boolean supportsExpression(ColumnDefinition column, Operator operator) + public boolean supportsExpression(ColumnMetadata column, Operator operator) { return dependsOn(column) && index.supports(operator); } @@ -236,7 +239,7 @@ public class SASIIndex implements Index, INotificationConsumer public void validate(PartitionUpdate update) throws InvalidRequestException {} - public Indexer indexerFor(DecoratedKey key, PartitionColumns columns, int nowInSec, OpOrder.Group opGroup, IndexTransaction.Type transactionType) + public Indexer indexerFor(DecoratedKey key, RegularAndStaticColumns columns, int nowInSec, OpOrder.Group opGroup, IndexTransaction.Type transactionType) { return new Indexer() { @@ -282,14 +285,14 @@ public class SASIIndex implements Index, INotificationConsumer public Searcher searcherFor(ReadCommand command) throws InvalidRequestException { - CFMetaData config = command.metadata(); - ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreInstance(config.cfId); + TableMetadata config = command.metadata(); + ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreInstance(config.id); return controller -> new QueryPlan(cfs, command, DatabaseDescriptor.getRangeRpcTimeout()).execute(controller); } public SSTableFlushObserver getFlushObserver(Descriptor descriptor, OperationType opType) { - return newWriter(baseCfs.metadata.getKeyValidator(), descriptor, Collections.singletonMap(index.getDefinition(), index), opType); + return newWriter(baseCfs.metadata().partitionKeyType, descriptor, Collections.singletonMap(index.getDefinition(), index), opType); } public BiFunction<PartitionIterator, ReadCommand, PartitionIterator> postProcessorFor(ReadCommand command) @@ -336,7 +339,7 @@ public class SASIIndex implements Index, INotificationConsumer protected static PerSSTableIndexWriter newWriter(AbstractType<?> keyValidator, Descriptor descriptor, - Map<ColumnDefinition, ColumnIndex> indexes, + Map<ColumnMetadata, ColumnIndex> indexes, OperationType opType) { return new PerSSTableIndexWriter(keyValidator, descriptor, opType, indexes); http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java b/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java index d50875a..a01e45b 100644 --- a/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java +++ b/src/java/org/apache/cassandra/index/sasi/SASIIndexBuilder.java @@ -24,7 +24,7 @@ import java.io.File; import java.io.IOException; import java.util.*; -import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.schema.ColumnMetadata; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.RowIndexEntry; @@ -49,12 +49,12 @@ class SASIIndexBuilder extends SecondaryIndexBuilder private final ColumnFamilyStore cfs; private final UUID compactionId = UUIDGen.getTimeUUID(); - private final SortedMap<SSTableReader, Map<ColumnDefinition, ColumnIndex>> sstables; + private final SortedMap<SSTableReader, Map<ColumnMetadata, ColumnIndex>> sstables; private long bytesProcessed = 0; private final long totalSizeInBytes; - public SASIIndexBuilder(ColumnFamilyStore cfs, SortedMap<SSTableReader, Map<ColumnDefinition, ColumnIndex>> sstables) + public SASIIndexBuilder(ColumnFamilyStore cfs, SortedMap<SSTableReader, Map<ColumnMetadata, ColumnIndex>> sstables) { long totalIndexBytes = 0; for (SSTableReader sstable : sstables.keySet()) @@ -67,18 +67,18 @@ class SASIIndexBuilder extends SecondaryIndexBuilder public void build() { - AbstractType<?> keyValidator = cfs.metadata.getKeyValidator(); - for (Map.Entry<SSTableReader, Map<ColumnDefinition, ColumnIndex>> e : sstables.entrySet()) + AbstractType<?> keyValidator = cfs.metadata().partitionKeyType; + for (Map.Entry<SSTableReader, Map<ColumnMetadata, ColumnIndex>> e : sstables.entrySet()) { SSTableReader sstable = e.getKey(); - Map<ColumnDefinition, ColumnIndex> indexes = e.getValue(); + Map<ColumnMetadata, ColumnIndex> indexes = e.getValue(); try (RandomAccessReader dataFile = sstable.openDataReader()) { PerSSTableIndexWriter indexWriter = SASIIndex.newWriter(keyValidator, sstable.descriptor, indexes, OperationType.COMPACTION); long previousKeyPosition = 0; - try (KeyIterator keys = new KeyIterator(sstable.descriptor, cfs.metadata)) + try (KeyIterator keys = new KeyIterator(sstable.descriptor, cfs.metadata())) { while (keys.hasNext()) { @@ -99,7 +99,7 @@ class SASIIndexBuilder extends SecondaryIndexBuilder try (SSTableIdentityIterator partition = SSTableIdentityIterator.create(sstable, dataFile, key)) { // if the row has statics attached, it has to be indexed separately - if (cfs.metadata.hasStaticColumns()) + if (cfs.metadata().hasStaticColumns()) indexWriter.nextUnfilteredCluster(partition.staticRow()); while (partition.hasNext()) @@ -123,7 +123,7 @@ class SASIIndexBuilder extends SecondaryIndexBuilder public CompactionInfo getCompactionInfo() { - return new CompactionInfo(cfs.metadata, + return new CompactionInfo(cfs.metadata(), OperationType.INDEX_BUILD, bytesProcessed, totalSizeInBytes,