You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2017/01/27 22:18:43 UTC
[37/37] cassandra git commit: Make TableMetadata immutable,
optimize Schema
Make TableMetadata immutable, optimize Schema
patch by Aleksey Yeschenko; reviewed by Sylvain Lebresne for
CASSANDRA-9425
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/af3fe39d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/af3fe39d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/af3fe39d
Branch: refs/heads/trunk
Commit: af3fe39dcabd9ef77a00309ce6741268423206df
Parents: 3580f6c
Author: Aleksey Yeschenko <al...@apache.org>
Authored: Thu Nov 10 01:16:59 2016 +0000
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Fri Jan 27 22:17:46 2017 +0000
----------------------------------------------------------------------
CHANGES.txt | 2 +
.../apache/cassandra/triggers/AuditTrigger.java | 12 +-
src/antlr/Cql.g | 8 +-
src/antlr/Parser.g | 60 +-
.../org/apache/cassandra/auth/AuthKeyspace.java | 87 +-
.../cassandra/auth/AuthMigrationListener.java | 53 -
.../auth/AuthSchemaChangeListener.java | 53 +
.../cassandra/auth/CassandraAuthorizer.java | 12 +-
.../cassandra/auth/CassandraRoleManager.java | 12 +-
.../org/apache/cassandra/auth/DataResource.java | 4 +-
.../apache/cassandra/auth/FunctionResource.java | 2 +-
.../cassandra/auth/PasswordAuthenticator.java | 8 +-
.../cassandra/batchlog/BatchlogManager.java | 9 +-
.../apache/cassandra/cache/AutoSavingCache.java | 29 +-
.../org/apache/cassandra/cache/CacheKey.java | 24 +-
.../apache/cassandra/cache/CounterCacheKey.java | 50 +-
.../org/apache/cassandra/cache/KeyCacheKey.java | 23 +-
.../org/apache/cassandra/cache/OHCProvider.java | 27 +-
.../org/apache/cassandra/cache/RowCacheKey.java | 35 +-
.../org/apache/cassandra/config/CFMetaData.java | 1362 ------------------
.../cassandra/config/ColumnDefinition.java | 623 --------
.../cassandra/config/ReadRepairDecision.java | 23 -
.../org/apache/cassandra/config/Schema.java | 776 ----------
.../cassandra/config/SchemaConstants.java | 74 -
.../apache/cassandra/config/ViewDefinition.java | 166 ---
.../org/apache/cassandra/cql3/CQL3Type.java | 4 +-
.../apache/cassandra/cql3/ColumnIdentifier.java | 1 -
.../org/apache/cassandra/cql3/Constants.java | 10 +-
src/java/org/apache/cassandra/cql3/Json.java | 34 +-
src/java/org/apache/cassandra/cql3/Lists.java | 18 +-
src/java/org/apache/cassandra/cql3/Maps.java | 12 +-
.../cassandra/cql3/MultiColumnRelation.java | 62 +-
.../org/apache/cassandra/cql3/Operation.java | 77 +-
.../org/apache/cassandra/cql3/QueryOptions.java | 4 +-
.../apache/cassandra/cql3/QueryProcessor.java | 19 +-
.../org/apache/cassandra/cql3/Relation.java | 65 +-
src/java/org/apache/cassandra/cql3/Sets.java | 12 +-
.../cassandra/cql3/SingleColumnRelation.java | 64 +-
.../apache/cassandra/cql3/TokenRelation.java | 66 +-
.../apache/cassandra/cql3/UntypedResultSet.java | 21 +-
.../apache/cassandra/cql3/UpdateParameters.java | 28 +-
.../org/apache/cassandra/cql3/UserTypes.java | 8 +-
.../org/apache/cassandra/cql3/Validation.java | 58 +-
.../cassandra/cql3/VariableSpecifications.java | 24 +-
.../cql3/conditions/AbstractConditions.java | 4 +-
.../cql3/conditions/ColumnCondition.java | 48 +-
.../cql3/conditions/ColumnConditions.java | 6 +-
.../cassandra/cql3/conditions/Conditions.java | 4 +-
.../cql3/functions/AbstractFunction.java | 11 +
.../cassandra/cql3/functions/FunctionName.java | 2 +-
.../cql3/functions/FunctionResolver.java | 4 +-
.../cassandra/cql3/functions/OperationFcts.java | 2 +-
.../cassandra/cql3/functions/TokenFct.java | 22 +-
.../cassandra/cql3/functions/UDFunction.java | 38 +-
.../ClusteringColumnRestrictions.java | 16 +-
.../restrictions/CustomIndexExpression.java | 20 +-
.../cql3/restrictions/IndexRestrictions.java | 14 +-
.../restrictions/MultiColumnRestriction.java | 50 +-
.../restrictions/PartitionKeyRestrictions.java | 10 +-
.../PartitionKeySingleRestrictionSet.java | 12 +-
.../cql3/restrictions/Restriction.java | 8 +-
.../cql3/restrictions/RestrictionSet.java | 42 +-
.../restrictions/RestrictionSetWrapper.java | 10 +-
.../cql3/restrictions/Restrictions.java | 4 +-
.../restrictions/SingleColumnRestriction.java | 34 +-
.../restrictions/StatementRestrictions.java | 118 +-
.../cassandra/cql3/restrictions/TermSlice.java | 4 +-
.../cql3/restrictions/TokenFilter.java | 20 +-
.../cql3/restrictions/TokenRestriction.java | 42 +-
.../selection/AbstractFunctionSelector.java | 4 +-
.../cql3/selection/CollectionFactory.java | 4 +-
.../cassandra/cql3/selection/ListSelector.java | 2 -
.../cassandra/cql3/selection/MapSelector.java | 4 +-
.../cassandra/cql3/selection/RawSelector.java | 16 +-
.../cassandra/cql3/selection/Selectable.java | 146 +-
.../cassandra/cql3/selection/Selection.java | 82 +-
.../cql3/selection/SelectionColumnMapping.java | 14 +-
.../cql3/selection/SelectionColumns.java | 4 +-
.../cassandra/cql3/selection/Selector.java | 10 +-
.../cql3/selection/SelectorFactories.java | 20 +-
.../cassandra/cql3/selection/SetSelector.java | 2 -
.../cql3/selection/SimpleSelector.java | 4 +-
.../cassandra/cql3/selection/TermSelector.java | 4 +-
.../cql3/selection/UserTypeSelector.java | 4 +-
.../cql3/selection/WritetimeOrTTLSelector.java | 4 +-
.../cql3/statements/AlterKeyspaceStatement.java | 10 +-
.../cql3/statements/AlterTableStatement.java | 171 +--
.../statements/AlterTableStatementColumn.java | 12 +-
.../cql3/statements/AlterTypeStatement.java | 132 +-
.../cql3/statements/AlterViewStatement.java | 24 +-
.../cql3/statements/BatchStatement.java | 65 +-
.../apache/cassandra/cql3/statements/Bound.java | 8 +-
.../cql3/statements/CQL3CasRequest.java | 36 +-
.../statements/CreateAggregateStatement.java | 8 +-
.../statements/CreateFunctionStatement.java | 9 +-
.../cql3/statements/CreateIndexStatement.java | 49 +-
.../statements/CreateKeyspaceStatement.java | 7 +-
.../cql3/statements/CreateTableStatement.java | 60 +-
.../cql3/statements/CreateTriggerStatement.java | 24 +-
.../cql3/statements/CreateTypeStatement.java | 8 +-
.../cql3/statements/CreateViewStatement.java | 94 +-
.../cql3/statements/DeleteStatement.java | 26 +-
.../cql3/statements/DropAggregateStatement.java | 9 +-
.../cql3/statements/DropFunctionStatement.java | 11 +-
.../cql3/statements/DropIndexStatement.java | 35 +-
.../cql3/statements/DropKeyspaceStatement.java | 6 +-
.../cql3/statements/DropTableStatement.java | 24 +-
.../cql3/statements/DropTriggerStatement.java | 23 +-
.../cql3/statements/DropTypeStatement.java | 16 +-
.../cql3/statements/DropViewStatement.java | 26 +-
.../cassandra/cql3/statements/IndexTarget.java | 56 +-
.../cql3/statements/KeyspaceAttributes.java | 10 +
.../statements/ListPermissionsStatement.java | 2 +-
.../cql3/statements/ListRolesStatement.java | 2 +-
.../cql3/statements/ListUsersStatement.java | 2 +-
.../cql3/statements/ModificationStatement.java | 167 ++-
.../PermissionsManagementStatement.java | 2 +-
.../cql3/statements/SelectStatement.java | 152 +-
.../cql3/statements/TableAttributes.java | 7 +-
.../cql3/statements/TruncateStatement.java | 10 +-
.../cql3/statements/UpdateStatement.java | 70 +-
.../cql3/statements/UpdatesCollector.java | 27 +-
.../db/AbstractReadCommandBuilder.java | 44 +-
.../org/apache/cassandra/db/Clustering.java | 16 +-
.../cassandra/db/ClusteringBoundOrBoundary.java | 4 +-
.../cassandra/db/ClusteringComparator.java | 4 +-
.../apache/cassandra/db/ClusteringPrefix.java | 20 +-
.../apache/cassandra/db/ColumnFamilyStore.java | 212 +--
.../db/ColumnFamilyStoreCQLHelper.java | 146 +-
.../cassandra/db/ColumnFamilyStoreMBean.java | 5 +-
src/java/org/apache/cassandra/db/Columns.java | 124 +-
.../org/apache/cassandra/db/CompactTables.java | 16 +-
.../apache/cassandra/db/ConsistencyLevel.java | 8 +-
.../apache/cassandra/db/CounterMutation.java | 13 +-
src/java/org/apache/cassandra/db/DataRange.java | 26 +-
.../db/DefinitionsUpdateVerbHandler.java | 55 -
.../org/apache/cassandra/db/Directories.java | 43 +-
.../org/apache/cassandra/db/EmptyIterators.java | 38 +-
src/java/org/apache/cassandra/db/IMutation.java | 4 +-
src/java/org/apache/cassandra/db/Keyspace.java | 91 +-
src/java/org/apache/cassandra/db/Memtable.java | 51 +-
.../db/MigrationRequestVerbHandler.java | 48 -
.../org/apache/cassandra/db/MultiCBuilder.java | 12 +-
src/java/org/apache/cassandra/db/Mutation.java | 67 +-
.../apache/cassandra/db/PartitionColumns.java | 199 ---
.../cassandra/db/PartitionRangeReadCommand.java | 21 +-
.../org/apache/cassandra/db/ReadCommand.java | 57 +-
.../cassandra/db/ReadExecutionController.java | 16 +-
src/java/org/apache/cassandra/db/ReadQuery.java | 2 +-
.../org/apache/cassandra/db/ReadResponse.java | 4 +-
.../cassandra/db/RegularAndStaticColumns.java | 194 +++
.../cassandra/db/SchemaCheckVerbHandler.java | 42 -
.../cassandra/db/SerializationHeader.java | 61 +-
.../org/apache/cassandra/db/SimpleBuilders.java | 53 +-
.../db/SinglePartitionReadCommand.java | 68 +-
.../cassandra/db/SizeEstimatesRecorder.java | 16 +-
src/java/org/apache/cassandra/db/Slice.java | 6 -
src/java/org/apache/cassandra/db/Slices.java | 18 +-
.../org/apache/cassandra/db/StorageHook.java | 11 +-
.../org/apache/cassandra/db/SystemKeyspace.java | 537 +++----
.../cassandra/db/UnfilteredDeserializer.java | 16 +-
.../cassandra/db/UnknownColumnException.java | 51 -
.../db/UnknownColumnFamilyException.java | 33 -
.../columniterator/AbstractSSTableIterator.java | 16 +-
.../db/columniterator/SSTableIterator.java | 2 +-
.../columniterator/SSTableReversedIterator.java | 14 +-
.../AbstractCommitLogSegmentManager.java | 29 +-
.../cassandra/db/commitlog/CommitLog.java | 15 +-
.../cassandra/db/commitlog/CommitLogReader.java | 15 +-
.../db/commitlog/CommitLogReplayer.java | 54 +-
.../db/commitlog/CommitLogSegment.java | 57 +-
.../cassandra/db/compaction/CompactionInfo.java | 26 +-
.../db/compaction/CompactionIterator.java | 18 +-
.../db/compaction/CompactionManager.java | 32 +-
.../compaction/CompactionStrategyManager.java | 29 +-
.../compaction/LeveledCompactionStrategy.java | 12 +-
.../cassandra/db/compaction/Scrubber.java | 16 +-
.../cassandra/db/compaction/Upgrader.java | 4 +-
.../cassandra/db/compaction/Verifier.java | 4 +-
.../writers/DefaultCompactionWriter.java | 4 +-
.../writers/MajorLeveledCompactionWriter.java | 4 +-
.../writers/MaxSSTableSizeWriter.java | 4 +-
.../SplittingSizeTieredCompactionWriter.java | 4 +-
.../filter/AbstractClusteringIndexFilter.java | 10 +-
.../db/filter/ClusteringIndexFilter.java | 18 +-
.../db/filter/ClusteringIndexNamesFilter.java | 30 +-
.../db/filter/ClusteringIndexSliceFilter.java | 10 +-
.../cassandra/db/filter/ColumnFilter.java | 82 +-
.../cassandra/db/filter/ColumnSubselection.java | 32 +-
.../apache/cassandra/db/filter/DataLimits.java | 2 +-
.../apache/cassandra/db/filter/RowFilter.java | 69 +-
.../filter/TombstoneOverwhelmingException.java | 8 +-
.../db/lifecycle/LifecycleTransaction.java | 7 +-
.../cassandra/db/lifecycle/LogTransaction.java | 4 +-
.../cassandra/db/marshal/CompositeType.java | 6 +
.../apache/cassandra/db/marshal/UserType.java | 5 +
.../db/partitions/AbstractBTreePartition.java | 52 +-
.../db/partitions/AtomicBTreePartition.java | 19 +-
.../db/partitions/CachedBTreePartition.java | 22 +-
.../db/partitions/FilteredPartition.java | 10 +-
.../db/partitions/ImmutableBTreePartition.java | 32 +-
.../cassandra/db/partitions/Partition.java | 6 +-
.../db/partitions/PartitionUpdate.java | 89 +-
.../SingletonUnfilteredPartitionIterator.java | 4 +-
.../partitions/UnfilteredPartitionIterator.java | 4 +-
.../UnfilteredPartitionIterators.java | 15 +-
.../apache/cassandra/db/rows/AbstractCell.java | 6 +-
.../db/rows/AbstractRangeTombstoneMarker.java | 8 +-
.../apache/cassandra/db/rows/AbstractRow.java | 10 +-
.../db/rows/AbstractUnfilteredRowIterator.java | 14 +-
.../org/apache/cassandra/db/rows/BTreeRow.java | 53 +-
.../cassandra/db/rows/BaseRowIterator.java | 8 +-
.../apache/cassandra/db/rows/BufferCell.java | 20 +-
src/java/org/apache/cassandra/db/rows/Cell.java | 13 +-
.../org/apache/cassandra/db/rows/Cells.java | 6 +-
.../apache/cassandra/db/rows/ColumnData.java | 8 +-
.../cassandra/db/rows/ComplexColumnData.java | 14 +-
.../LazilyInitializedUnfilteredRowIterator.java | 6 +-
.../apache/cassandra/db/rows/NativeCell.java | 6 +-
.../db/rows/RangeTombstoneBoundMarker.java | 4 +-
.../db/rows/RangeTombstoneBoundaryMarker.java | 4 +-
src/java/org/apache/cassandra/db/rows/Row.java | 26 +-
.../db/rows/RowAndDeletionMergeIterator.java | 5 +-
.../cassandra/db/rows/RowDiffListener.java | 4 +-
.../apache/cassandra/db/rows/RowIterators.java | 10 +-
src/java/org/apache/cassandra/db/rows/Rows.java | 13 +-
.../cassandra/db/rows/SerializationHelper.java | 25 +-
.../apache/cassandra/db/rows/Unfiltered.java | 10 +-
.../rows/UnfilteredRowIteratorSerializer.java | 12 +-
.../UnfilteredRowIteratorWithLowerBound.java | 22 +-
.../db/rows/UnfilteredRowIterators.java | 33 +-
.../cassandra/db/rows/UnfilteredSerializer.java | 22 +-
.../cassandra/db/rows/WithOnlyQueriedData.java | 4 +-
.../db/rows/WrappingUnfilteredRowIterator.java | 6 +-
.../apache/cassandra/db/transform/BaseRows.java | 8 +-
.../cassandra/db/transform/Transformation.java | 4 +-
.../db/transform/UnfilteredPartitions.java | 4 +-
.../cassandra/db/transform/UnfilteredRows.java | 12 +-
.../apache/cassandra/db/view/TableViews.java | 35 +-
src/java/org/apache/cassandra/db/view/View.java | 54 +-
.../apache/cassandra/db/view/ViewBuilder.java | 12 +-
.../apache/cassandra/db/view/ViewManager.java | 47 +-
.../cassandra/db/view/ViewUpdateGenerator.java | 37 +-
.../org/apache/cassandra/dht/BootStrapper.java | 2 +-
.../cassandra/dht/ByteOrderedPartitioner.java | 8 +-
.../dht/OrderPreservingPartitioner.java | 7 +-
.../exceptions/UnknownIndexException.java | 39 +
.../exceptions/UnknownTableException.java | 33 +
.../hadoop/cql3/CqlBulkRecordWriter.java | 7 +-
.../cassandra/hadoop/cql3/CqlInputFormat.java | 2 +-
src/java/org/apache/cassandra/hints/Hint.java | 7 +-
.../org/apache/cassandra/hints/HintMessage.java | 11 +-
.../org/apache/cassandra/hints/HintsReader.java | 7 +-
src/java/org/apache/cassandra/index/Index.java | 10 +-
.../cassandra/index/SecondaryIndexManager.java | 39 +-
.../apache/cassandra/index/TargetParser.java | 18 +-
.../index/internal/CassandraIndex.java | 79 +-
.../index/internal/CassandraIndexFunctions.java | 45 +-
.../index/internal/CassandraIndexSearcher.java | 7 +-
.../internal/CollatedViewIndexBuilder.java | 2 +-
.../composites/ClusteringColumnIndex.java | 2 +-
.../composites/CollectionEntryIndex.java | 4 +-
.../internal/composites/CollectionKeyIndex.java | 4 +-
.../composites/CollectionKeyIndexBase.java | 2 +-
.../composites/CollectionValueIndex.java | 8 +-
.../internal/composites/CompositesSearcher.java | 8 +-
.../internal/composites/PartitionKeyIndex.java | 4 +-
.../index/internal/keys/KeysIndex.java | 15 +-
.../index/internal/keys/KeysSearcher.java | 6 +-
.../apache/cassandra/index/sasi/SASIIndex.java | 37 +-
.../cassandra/index/sasi/SASIIndexBuilder.java | 18 +-
.../cassandra/index/sasi/conf/ColumnIndex.java | 10 +-
.../cassandra/index/sasi/conf/IndexMode.java | 6 +-
.../index/sasi/disk/PerSSTableIndexWriter.java | 10 +-
.../index/sasi/memory/TrieMemIndex.java | 10 +-
.../cassandra/index/sasi/plan/Expression.java | 4 +-
.../cassandra/index/sasi/plan/Operation.java | 21 +-
.../index/sasi/plan/QueryController.java | 17 +-
.../cassandra/index/sasi/plan/QueryPlan.java | 4 +-
.../io/sstable/AbstractSSTableSimpleWriter.java | 17 +-
.../cassandra/io/sstable/CQLSSTableWriter.java | 48 +-
.../io/sstable/IndexSummaryManager.java | 9 +-
.../io/sstable/IndexSummaryRedistribution.java | 20 +-
.../cassandra/io/sstable/KeyIterator.java | 7 +-
.../io/sstable/ReducingKeyIterator.java | 2 +-
.../apache/cassandra/io/sstable/SSTable.java | 17 +-
.../io/sstable/SSTableIdentityIterator.java | 20 +-
.../cassandra/io/sstable/SSTableLoader.java | 8 +-
.../io/sstable/SSTableMultiWriter.java | 4 +-
.../io/sstable/SSTableSimpleIterator.java | 21 +-
.../io/sstable/SSTableSimpleUnsortedWriter.java | 8 +-
.../io/sstable/SSTableSimpleWriter.java | 6 +-
.../cassandra/io/sstable/SSTableTxnWriter.java | 13 +-
.../io/sstable/SimpleSSTableMultiWriter.java | 13 +-
.../sstable/format/RangeAwareSSTableWriter.java | 6 +-
.../io/sstable/format/SSTableFormat.java | 5 +-
.../io/sstable/format/SSTableReader.java | 118 +-
.../io/sstable/format/SSTableWriter.java | 27 +-
.../io/sstable/format/big/BigFormat.java | 9 +-
.../io/sstable/format/big/BigTableReader.java | 25 +-
.../io/sstable/format/big/BigTableScanner.java | 19 +-
.../io/sstable/format/big/BigTableWriter.java | 20 +-
.../cassandra/metrics/CompactionMetrics.java | 20 +-
.../apache/cassandra/metrics/TableMetrics.java | 6 +-
.../cassandra/net/IncomingTcpConnection.java | 7 +-
.../apache/cassandra/net/MessagingService.java | 6 +-
.../repair/RepairMessageVerbHandler.java | 13 +-
.../apache/cassandra/repair/RepairRunnable.java | 2 +-
.../repair/SystemDistributedKeyspace.java | 131 +-
.../repair/messages/PrepareMessage.java | 47 +-
.../apache/cassandra/schema/ColumnMetadata.java | 617 ++++++++
.../cassandra/schema/CompactionParams.java | 2 +-
.../apache/cassandra/schema/DroppedColumn.java | 59 +
.../org/apache/cassandra/schema/Functions.java | 27 +-
.../apache/cassandra/schema/IndexMetadata.java | 53 +-
.../org/apache/cassandra/schema/Indexes.java | 55 +-
.../cassandra/schema/KeyspaceMetadata.java | 53 +-
.../org/apache/cassandra/schema/Keyspaces.java | 46 +
.../cassandra/schema/MigrationManager.java | 493 +++++++
.../apache/cassandra/schema/MigrationTask.java | 113 ++
.../org/apache/cassandra/schema/Schema.java | 804 +++++++++++
.../cassandra/schema/SchemaChangeListener.java | 102 ++
.../cassandra/schema/SchemaConstants.java | 82 ++
.../apache/cassandra/schema/SchemaKeyspace.java | 808 +++++------
.../cassandra/schema/SchemaPullVerbHandler.java | 50 +
.../cassandra/schema/SchemaPushVerbHandler.java | 47 +
.../schema/SchemaVersionVerbHandler.java | 46 +
.../org/apache/cassandra/schema/TableId.java | 118 ++
.../apache/cassandra/schema/TableMetadata.java | 956 ++++++++++++
.../cassandra/schema/TableMetadataRef.java | 78 +
.../apache/cassandra/schema/TableParams.java | 5 +
.../org/apache/cassandra/schema/Tables.java | 89 +-
.../org/apache/cassandra/schema/Triggers.java | 17 +
.../cassandra/schema/UnknownIndexException.java | 39 -
.../apache/cassandra/schema/ViewMetadata.java | 197 +++
src/java/org/apache/cassandra/schema/Views.java | 66 +-
.../cassandra/service/AbstractReadExecutor.java | 23 +-
.../cassandra/service/ActiveRepairService.java | 97 +-
.../apache/cassandra/service/CacheService.java | 60 +-
.../cassandra/service/CassandraDaemon.java | 9 +-
.../apache/cassandra/service/ClientState.java | 22 +-
.../apache/cassandra/service/DataResolver.java | 22 +-
.../cassandra/service/MigrationListener.java | 102 --
.../cassandra/service/MigrationManager.java | 626 --------
.../apache/cassandra/service/MigrationTask.java | 115 --
.../service/PendingRangeCalculatorService.java | 2 +-
.../apache/cassandra/service/ReadCallback.java | 4 +-
.../cassandra/service/ReadRepairDecision.java | 23 +
.../apache/cassandra/service/StartupChecks.java | 9 +-
.../apache/cassandra/service/StorageProxy.java | 38 +-
.../cassandra/service/StorageService.java | 53 +-
.../service/pager/AbstractQueryPager.java | 6 +-
.../service/pager/AggregationQueryPager.java | 6 +-
.../cassandra/service/pager/PagingState.java | 12 +-
.../service/pager/PartitionRangeQueryPager.java | 2 +-
.../apache/cassandra/service/paxos/Commit.java | 6 +-
.../cassandra/service/paxos/PaxosState.java | 12 +-
.../service/paxos/PrepareCallback.java | 7 +-
.../cassandra/streaming/StreamReader.java | 45 +-
.../cassandra/streaming/StreamReceiveTask.java | 27 +-
.../cassandra/streaming/StreamSession.java | 37 +-
.../cassandra/streaming/StreamSummary.java | 22 +-
.../apache/cassandra/streaming/StreamTask.java | 10 +-
.../cassandra/streaming/StreamTransferTask.java | 7 +-
.../compress/CompressedStreamReader.java | 13 +-
.../management/StreamSummaryCompositeData.java | 8 +-
.../streaming/messages/FileMessageHeader.java | 27 +-
.../streaming/messages/OutgoingFileMessage.java | 4 +-
.../streaming/messages/ReceivedMessage.java | 16 +-
.../apache/cassandra/tools/JsonTransformer.java | 27 +-
.../cassandra/tools/SSTableExpiredBlockers.java | 13 +-
.../apache/cassandra/tools/SSTableExport.java | 27 +-
.../cassandra/tools/SSTableLevelResetter.java | 4 +-
.../cassandra/tools/SSTableOfflineRelevel.java | 4 +-
.../cassandra/tools/StandaloneSSTableUtil.java | 9 +-
.../cassandra/tools/StandaloneScrubber.java | 4 +-
.../cassandra/tools/StandaloneSplitter.java | 2 +-
.../cassandra/tools/StandaloneUpgrader.java | 6 +-
.../cassandra/tools/StandaloneVerifier.java | 4 +-
.../cassandra/tools/nodetool/Cleanup.java | 2 +-
.../apache/cassandra/tools/nodetool/Repair.java | 2 +-
.../apache/cassandra/tracing/TraceKeyspace.java | 74 +-
.../org/apache/cassandra/transport/Server.java | 24 +-
.../cassandra/triggers/TriggerExecutor.java | 21 +-
.../utils/NativeSSTableLoaderClient.java | 78 +-
.../apache/cassandra/cql3/CorruptionTest.java | 2 +-
.../db/commitlog/CommitLogStressTest.java | 5 +-
.../db/compaction/LongCompactionsTest.java | 10 +-
.../LongLeveledCompactionStrategyTest.java | 6 +-
.../cassandra/hints/HintsWriteThenReadTest.java | 6 +-
.../cassandra/streaming/LongStreamingTest.java | 13 +-
.../test/microbench/CompactionBench.java | 35 -
.../test/microbench/MutationBench.java | 26 +-
.../test/microbench/ReadWriteTest.java | 31 -
test/unit/org/apache/cassandra/MockSchema.java | 187 ---
.../unit/org/apache/cassandra/SchemaLoader.java | 788 +++++-----
.../org/apache/cassandra/UpdateBuilder.java | 7 +-
test/unit/org/apache/cassandra/Util.java | 75 +-
.../apache/cassandra/batchlog/BatchTest.java | 6 +-
.../cassandra/batchlog/BatchlogManagerTest.java | 22 +-
.../cassandra/cache/AutoSavingCacheTest.java | 17 +-
.../cassandra/cache/CacheProviderTest.java | 80 +-
.../apache/cassandra/config/CFMetaDataTest.java | 193 ---
.../config/DatabaseDescriptorTest.java | 49 +-
.../org/apache/cassandra/cql3/CQLTester.java | 9 +-
.../apache/cassandra/cql3/KeyCacheCqlTest.java | 14 +-
.../apache/cassandra/cql3/OutOfSpaceTest.java | 6 +-
.../cassandra/cql3/PreparedStatementsTest.java | 2 +-
.../cassandra/cql3/PstmtPersistenceTest.java | 2 +-
.../cassandra/cql3/ViewFilteringTest.java | 3 -
.../apache/cassandra/cql3/ViewSchemaTest.java | 18 +-
.../org/apache/cassandra/cql3/ViewTest.java | 8 +-
.../cql3/conditions/ColumnConditionTest.java | 20 +-
.../ClusteringColumnRestrictionsTest.java | 593 ++++----
.../selection/SelectionColumnMappingTest.java | 41 +-
.../validation/entities/SecondaryIndexTest.java | 28 +-
.../cql3/validation/entities/UFAuthTest.java | 2 +-
.../cql3/validation/entities/UFJavaTest.java | 3 +-
.../cql3/validation/entities/UFTest.java | 6 +-
.../miscellaneous/CrcCheckChanceTest.java | 2 +-
.../validation/operations/AggregationTest.java | 8 +-
.../cql3/validation/operations/AlterTest.java | 10 +-
.../cql3/validation/operations/CreateTest.java | 15 +-
.../operations/DropRecreateAndRestoreTest.java | 8 +-
.../operations/InsertUpdateIfConditionTest.java | 2 +-
test/unit/org/apache/cassandra/db/CellTest.java | 55 +-
.../org/apache/cassandra/db/CleanupTest.java | 6 +-
.../cassandra/db/ColumnFamilyMetricTest.java | 6 +-
.../db/ColumnFamilyStoreCQLHelperTest.java | 371 +++--
.../cassandra/db/ColumnFamilyStoreTest.java | 50 +-
.../org/apache/cassandra/db/ColumnsTest.java | 85 +-
.../apache/cassandra/db/CounterCacheTest.java | 63 +-
.../apache/cassandra/db/CounterCellTest.java | 12 +-
.../cassandra/db/CounterMutationTest.java | 46 +-
.../cassandra/db/DeletePartitionTest.java | 8 +-
.../apache/cassandra/db/DirectoriesTest.java | 95 +-
.../org/apache/cassandra/db/KeyCacheTest.java | 4 +-
.../org/apache/cassandra/db/KeyspaceTest.java | 34 +-
.../org/apache/cassandra/db/NameSortTest.java | 6 +-
.../org/apache/cassandra/db/NativeCellTest.java | 18 +-
.../cassandra/db/PartitionRangeReadTest.java | 16 +-
.../org/apache/cassandra/db/PartitionTest.java | 20 +-
.../apache/cassandra/db/RangeTombstoneTest.java | 134 +-
.../apache/cassandra/db/ReadCommandTest.java | 70 +-
.../apache/cassandra/db/ReadMessageTest.java | 59 +-
.../db/RecoveryManagerFlushedTest.java | 4 +-
.../db/RecoveryManagerMissingHeaderTest.java | 4 +-
.../cassandra/db/RecoveryManagerTest.java | 49 +-
.../db/RecoveryManagerTruncateTest.java | 2 +-
.../org/apache/cassandra/db/RowCacheTest.java | 13 +-
.../apache/cassandra/db/RowIndexEntryTest.java | 22 +-
test/unit/org/apache/cassandra/db/RowTest.java | 68 +-
.../apache/cassandra/db/RowUpdateBuilder.java | 40 +-
.../unit/org/apache/cassandra/db/ScrubTest.java | 50 +-
.../apache/cassandra/db/SecondaryIndexTest.java | 115 +-
.../db/SinglePartitionSliceCommandTest.java | 53 +-
.../apache/cassandra/db/SystemKeyspaceTest.java | 2 +-
.../apache/cassandra/db/TransformerTest.java | 28 +-
.../org/apache/cassandra/db/VerifyTest.java | 41 +-
.../db/commitlog/CommitLogReaderTest.java | 18 +-
.../CommitLogSegmentManagerCDCTest.java | 6 +-
.../commitlog/CommitLogSegmentManagerTest.java | 2 +-
.../cassandra/db/commitlog/CommitLogTest.java | 65 +-
.../db/commitlog/CommitLogUpgradeTest.java | 37 +-
.../db/commitlog/CommitLogUpgradeTestMaker.java | 10 +-
.../db/commitlog/SnapshotDeletingTest.java | 4 +-
.../db/compaction/AntiCompactionTest.java | 19 +-
.../compaction/BlacklistingCompactionsTest.java | 6 +-
.../db/compaction/CompactionControllerTest.java | 52 +-
.../db/compaction/CompactionIteratorTest.java | 9 +-
.../db/compaction/CompactionsPurgeTest.java | 70 +-
.../db/compaction/CompactionsTest.java | 15 +-
.../DateTieredCompactionStrategyTest.java | 12 +-
.../LeveledCompactionStrategyTest.java | 14 +-
.../db/compaction/OneCompactionTest.java | 2 +-
.../SizeTieredCompactionStrategyTest.java | 2 +-
.../cassandra/db/compaction/TTLExpiryTest.java | 71 +-
.../TimeWindowCompactionStrategyTest.java | 10 +-
.../cassandra/db/lifecycle/HelpersTest.java | 2 +-
.../db/lifecycle/LifecycleTransactionTest.java | 4 +-
.../db/lifecycle/LogTransactionTest.java | 81 +-
.../db/lifecycle/RealTransactionsTest.java | 8 +-
.../cassandra/db/lifecycle/TrackerTest.java | 2 +-
.../apache/cassandra/db/lifecycle/ViewTest.java | 2 +-
.../cassandra/db/marshal/CompositeTypeTest.java | 15 +-
.../db/marshal/DynamicCompositeTypeTest.java | 26 +-
.../partition/PartitionImplementationTest.java | 82 +-
.../db/partition/PartitionUpdateTest.java | 6 +-
.../rows/RowAndDeletionMergeIteratorTest.java | 35 +-
.../apache/cassandra/db/rows/RowBuilder.java | 6 +-
.../org/apache/cassandra/db/rows/RowsTest.java | 66 +-
.../rows/UnfilteredRowIteratorsMergeTest.java | 16 +-
.../db/rows/UnfilteredRowsGenerator.java | 10 +-
.../apache/cassandra/db/view/ViewUtilsTest.java | 8 +-
.../apache/cassandra/dht/BootStrapperTest.java | 2 +-
.../apache/cassandra/dht/KeyCollisionTest.java | 4 +-
.../apache/cassandra/dht/LengthPartitioner.java | 8 +-
.../apache/cassandra/hints/AlteredHints.java | 7 +-
.../apache/cassandra/hints/HintMessageTest.java | 6 +-
.../org/apache/cassandra/hints/HintTest.java | 49 +-
.../apache/cassandra/hints/HintsBufferTest.java | 6 +-
.../cassandra/hints/HintsServiceTest.java | 12 +-
.../apache/cassandra/hints/HintsTestUtil.java | 16 +-
.../apache/cassandra/index/CustomIndexTest.java | 84 +-
.../org/apache/cassandra/index/StubIndex.java | 10 +-
.../index/internal/CassandraIndexTest.java | 38 +-
.../index/internal/CustomCassandraIndex.java | 39 +-
.../cassandra/index/sasi/SASIIndexTest.java | 100 +-
.../sasi/disk/PerSSTableIndexWriterTest.java | 26 +-
.../index/sasi/plan/OperationTest.java | 67 +-
.../io/compress/CQLCompressionTest.java | 10 +-
.../io/sstable/BigTableWriterTest.java | 4 +-
.../io/sstable/CQLSSTableWriterTest.java | 6 +-
.../io/sstable/IndexSummaryManagerTest.java | 113 +-
.../sstable/SSTableCorruptionDetectionTest.java | 26 +-
.../cassandra/io/sstable/SSTableLoaderTest.java | 13 +-
.../io/sstable/SSTableMetadataTest.java | 32 +-
.../cassandra/io/sstable/SSTableReaderTest.java | 30 +-
.../io/sstable/SSTableRewriterTest.java | 8 +-
.../io/sstable/SSTableScannerTest.java | 21 +-
.../cassandra/io/sstable/SSTableUtils.java | 14 +-
.../cassandra/io/sstable/SSTableWriterTest.java | 16 +-
.../io/sstable/SSTableWriterTestBase.java | 2 +-
.../format/SSTableFlushObserverTest.java | 30 +-
.../metadata/MetadataSerializerTest.java | 5 +-
.../ReplicationStrategyEndpointCacheTest.java | 3 +-
.../cassandra/locator/SimpleStrategyTest.java | 4 +-
.../cassandra/metrics/BatchMetricsTest.java | 2 +-
.../cassandra/metrics/CQLMetricsTest.java | 2 +-
.../cassandra/net/WriteCallbackInfoTest.java | 6 +-
.../apache/cassandra/repair/ValidatorTest.java | 9 +-
.../RepairMessageSerializationsTest.java | 3 +-
.../org/apache/cassandra/schema/DefsTest.java | 545 -------
.../cassandra/schema/MigrationManagerTest.java | 539 +++++++
.../org/apache/cassandra/schema/MockSchema.java | 187 +++
.../cassandra/schema/SchemaKeyspaceTest.java | 46 +-
.../org/apache/cassandra/schema/SchemaTest.java | 79 +
.../apache/cassandra/schema/ValidationTest.java | 126 ++
.../service/ActiveRepairServiceTest.java | 30 +-
.../cassandra/service/DataResolverTest.java | 62 +-
.../cassandra/service/JoinTokenRingTest.java | 2 +-
.../service/LeaveAndBootstrapTest.java | 4 +-
.../org/apache/cassandra/service/MoveTest.java | 20 +-
.../cassandra/service/PaxosStateTest.java | 6 +-
.../cassandra/service/QueryPagerTest.java | 23 +-
.../cassandra/service/StartupChecksTest.java | 2 +-
.../service/StorageServiceServerTest.java | 20 +-
.../cassandra/streaming/SessionInfoTest.java | 7 +-
.../streaming/StreamTransferTaskTest.java | 8 +-
.../streaming/StreamingTransferTest.java | 54 +-
.../org/apache/cassandra/tools/ToolsTester.java | 4 +-
.../cassandra/triggers/TriggerExecutorTest.java | 118 +-
.../cassandra/triggers/TriggersSchemaTest.java | 89 +-
.../apache/cassandra/triggers/TriggersTest.java | 7 +-
.../io/sstable/StressCQLSSTableWriter.java | 44 +-
.../apache/cassandra/stress/StressProfile.java | 60 +-
.../stress/settings/OptionCompaction.java | 7 +-
557 files changed, 12829 insertions(+), 13197 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e695bb0..3c5bfc2 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
4.0
+ * Make TableMetadata immutable, optimize Schema (CASSANDRA-9425)
* Refactor ColumnCondition (CASSANDRA-12981)
* Parallelize streaming of different keyspaces (CASSANDRA-4663)
* Improved compactions metrics (CASSANDRA-13015)
@@ -30,6 +31,7 @@
* Add support for arithmetic operators (CASSANDRA-11935)
* Tables in system_distributed should not use gcgs of 0 (CASSANDRA-12954)
+
3.10
* Fix secondary index queries regression (CASSANDRA-13013)
* Add duration type to the protocol V5 (CASSANDRA-12850)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/examples/triggers/src/org/apache/cassandra/triggers/AuditTrigger.java
----------------------------------------------------------------------
diff --git a/examples/triggers/src/org/apache/cassandra/triggers/AuditTrigger.java b/examples/triggers/src/org/apache/cassandra/triggers/AuditTrigger.java
index 1efbf13..2528ec7 100644
--- a/examples/triggers/src/org/apache/cassandra/triggers/AuditTrigger.java
+++ b/examples/triggers/src/org/apache/cassandra/triggers/AuditTrigger.java
@@ -22,8 +22,8 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Properties;
-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.Mutation;
import org.apache.cassandra.db.partitions.Partition;
import org.apache.cassandra.db.partitions.PartitionUpdate;
@@ -40,13 +40,13 @@ public class AuditTrigger implements ITrigger
String auditKeyspace = properties.getProperty("keyspace");
String auditTable = properties.getProperty("table");
- CFMetaData metadata = Schema.instance.getCFMetaData(auditKeyspace, auditTable);
+ TableMetadata metadata = Schema.instance.getTableMetadata(auditKeyspace, auditTable);
PartitionUpdate.SimpleBuilder audit = PartitionUpdate.simpleBuilder(metadata, UUIDGen.getTimeUUID());
audit.row()
- .add("keyspace_name", update.metadata().ksName)
- .add("table_name", update.metadata().cfName)
- .add("primary_key", update.metadata().getKeyValidator().getString(update.partitionKey().getKey()));
+ .add("keyspace_name", update.metadata().keyspace)
+ .add("table_name", update.metadata().table)
+ .add("primary_key", update.metadata().partitionKeyType.getString(update.partitionKey().getKey()));
return Collections.singletonList(audit.buildAsMutation());
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/antlr/Cql.g
----------------------------------------------------------------------
diff --git a/src/antlr/Cql.g b/src/antlr/Cql.g
index 8b26426..17a11aa 100644
--- a/src/antlr/Cql.g
+++ b/src/antlr/Cql.g
@@ -40,17 +40,17 @@ import Parser,Lexer;
import java.util.Set;
import org.apache.cassandra.auth.*;
- import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.cql3.*;
+ import org.apache.cassandra.cql3.conditions.*;
+ import org.apache.cassandra.cql3.functions.*;
import org.apache.cassandra.cql3.restrictions.CustomIndexExpression;
- import org.apache.cassandra.cql3.statements.*;
import org.apache.cassandra.cql3.selection.*;
- import org.apache.cassandra.cql3.functions.*;
- import org.apache.cassandra.cql3.conditions.*;
+ import org.apache.cassandra.cql3.statements.*;
import org.apache.cassandra.db.marshal.CollectionType;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.exceptions.InvalidRequestException;
import org.apache.cassandra.exceptions.SyntaxException;
+ import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.utils.Pair;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/antlr/Parser.g
----------------------------------------------------------------------
diff --git a/src/antlr/Parser.g b/src/antlr/Parser.g
index 5fd6851..6cc5f1b 100644
--- a/src/antlr/Parser.g
+++ b/src/antlr/Parser.g
@@ -133,9 +133,9 @@ options {
return res;
}
- public void addRawUpdate(List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> operations, ColumnDefinition.Raw key, Operation.RawUpdate update)
+ public void addRawUpdate(List<Pair<ColumnMetadata.Raw, Operation.RawUpdate>> operations, ColumnMetadata.Raw key, Operation.RawUpdate update)
{
- for (Pair<ColumnDefinition.Raw, Operation.RawUpdate> p : operations)
+ for (Pair<ColumnMetadata.Raw, Operation.RawUpdate> p : operations)
{
if (p.left.equals(key) && !p.right.isCompatibleWith(update))
addRecognitionError("Multiple incompatible setting of column " + key);
@@ -262,8 +262,8 @@ selectStatement returns [SelectStatement.RawStatement expr]
@init {
Term.Raw limit = null;
Term.Raw perPartitionLimit = null;
- Map<ColumnDefinition.Raw, Boolean> orderings = new LinkedHashMap<>();
- List<ColumnDefinition.Raw> groups = new ArrayList<>();
+ Map<ColumnMetadata.Raw, Boolean> orderings = new LinkedHashMap<>();
+ List<ColumnMetadata.Raw> groups = new ArrayList<>();
boolean allowFiltering = false;
boolean isJson = false;
}
@@ -414,8 +414,8 @@ selectionFunctionArgs returns [List<Selectable.Raw> a]
sident returns [Selectable.Raw id]
: t=IDENT { $id = Selectable.RawIdentifier.forUnquoted($t.text); }
- | t=QUOTED_NAME { $id = ColumnDefinition.RawIdentifier.forQuoted($t.text); }
- | k=unreserved_keyword { $id = ColumnDefinition.RawIdentifier.forUnquoted(k); }
+ | t=QUOTED_NAME { $id = ColumnMetadata.RawIdentifier.forQuoted($t.text); }
+ | k=unreserved_keyword { $id = ColumnMetadata.RawIdentifier.forUnquoted(k); }
;
whereClause returns [WhereClause.Builder clause]
@@ -433,14 +433,14 @@ customIndexExpression [WhereClause.Builder clause]
: 'expr(' idxName[name] ',' t=term ')' { clause.add(new CustomIndexExpression(name, t));}
;
-orderByClause[Map<ColumnDefinition.Raw, Boolean> orderings]
+orderByClause[Map<ColumnMetadata.Raw, Boolean> orderings]
@init{
boolean reversed = false;
}
: c=cident (K_ASC | K_DESC { reversed = true; })? { orderings.put(c, reversed); }
;
-groupByClause[List<ColumnDefinition.Raw> groups]
+groupByClause[List<ColumnMetadata.Raw> groups]
: c=cident { groups.add(c); }
;
@@ -459,7 +459,7 @@ insertStatement returns [ModificationStatement.Parsed expr]
normalInsertStatement [CFName cf] returns [UpdateStatement.ParsedInsert expr]
@init {
Attributes.Raw attrs = new Attributes.Raw();
- List<ColumnDefinition.Raw> columnNames = new ArrayList<>();
+ List<ColumnMetadata.Raw> columnNames = new ArrayList<>();
List<Term.Raw> values = new ArrayList<>();
boolean ifNotExists = false;
}
@@ -513,7 +513,7 @@ usingClauseObjective[Attributes.Raw attrs]
updateStatement returns [UpdateStatement.ParsedUpdate expr]
@init {
Attributes.Raw attrs = new Attributes.Raw();
- List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> operations = new ArrayList<>();
+ List<Pair<ColumnMetadata.Raw, Operation.RawUpdate>> operations = new ArrayList<>();
boolean ifExists = false;
}
: K_UPDATE cf=columnFamilyName
@@ -526,13 +526,13 @@ updateStatement returns [UpdateStatement.ParsedUpdate expr]
attrs,
operations,
wclause.build(),
- conditions == null ? Collections.<Pair<ColumnDefinition.Raw, ColumnCondition.Raw>>emptyList() : conditions,
+ conditions == null ? Collections.<Pair<ColumnMetadata.Raw, ColumnCondition.Raw>>emptyList() : conditions,
ifExists);
}
;
-updateConditions returns [List<Pair<ColumnDefinition.Raw, ColumnCondition.Raw>> conditions]
- @init { conditions = new ArrayList<Pair<ColumnDefinition.Raw, ColumnCondition.Raw>>(); }
+updateConditions returns [List<Pair<ColumnMetadata.Raw, ColumnCondition.Raw>> conditions]
+ @init { conditions = new ArrayList<Pair<ColumnMetadata.Raw, ColumnCondition.Raw>>(); }
: columnCondition[conditions] ( K_AND columnCondition[conditions] )*
;
@@ -560,7 +560,7 @@ deleteStatement returns [DeleteStatement.Parsed expr]
attrs,
columnDeletions,
wclause.build(),
- conditions == null ? Collections.<Pair<ColumnDefinition.Raw, ColumnCondition.Raw>>emptyList() : conditions,
+ conditions == null ? Collections.<Pair<ColumnMetadata.Raw, ColumnCondition.Raw>>emptyList() : conditions,
ifExists);
}
;
@@ -837,8 +837,8 @@ indexIdent [List<IndexTarget.Raw> targets]
createMaterializedViewStatement returns [CreateViewStatement expr]
@init {
boolean ifNotExists = false;
- List<ColumnDefinition.Raw> partitionKeys = new ArrayList<>();
- List<ColumnDefinition.Raw> compositeKeys = new ArrayList<>();
+ List<ColumnMetadata.Raw> partitionKeys = new ArrayList<>();
+ List<ColumnMetadata.Raw> compositeKeys = new ArrayList<>();
}
: K_CREATE K_MATERIALIZED K_VIEW (K_IF K_NOT K_EXISTS { ifNotExists = true; })? cf=columnFamilyName K_AS
K_SELECT sclause=selectors K_FROM basecf=columnFamilyName
@@ -895,7 +895,7 @@ alterTableStatement returns [AlterTableStatement expr]
@init {
AlterTableStatement.Type type = null;
TableAttributes attrs = new TableAttributes();
- Map<ColumnDefinition.Raw, ColumnDefinition.Raw> renames = new HashMap<ColumnDefinition.Raw, ColumnDefinition.Raw>();
+ Map<ColumnMetadata.Raw, ColumnMetadata.Raw> renames = new HashMap<ColumnMetadata.Raw, ColumnMetadata.Raw>();
List<AlterTableStatementColumn> colNameList = new ArrayList<AlterTableStatementColumn>();
Long deleteTimestamp = null;
}
@@ -1268,10 +1268,10 @@ userPassword[RoleOptions opts]
// Column Identifiers. These need to be treated differently from other
// identifiers because the underlying comparator is not necessarily text. See
// CASSANDRA-8178 for details.
-cident returns [ColumnDefinition.Raw id]
- : t=IDENT { $id = ColumnDefinition.Raw.forUnquoted($t.text); }
- | t=QUOTED_NAME { $id = ColumnDefinition.Raw.forQuoted($t.text); }
- | k=unreserved_keyword { $id = ColumnDefinition.Raw.forUnquoted(k); }
+cident returns [ColumnMetadata.Raw id]
+ : t=IDENT { $id = ColumnMetadata.Raw.forUnquoted($t.text); }
+ | t=QUOTED_NAME { $id = ColumnMetadata.Raw.forQuoted($t.text); }
+ | k=unreserved_keyword { $id = ColumnMetadata.Raw.forUnquoted(k); }
;
// Column identifiers where the comparator is known to be text
@@ -1480,18 +1480,18 @@ simpleTerm returns [Term.Raw term]
| '(' c=comparatorType ')' t=simpleTerm { $term = new TypeCast(c, t); }
;
-columnOperation[List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> operations]
+columnOperation[List<Pair<ColumnMetadata.Raw, Operation.RawUpdate>> operations]
: key=cident columnOperationDifferentiator[operations, key]
;
-columnOperationDifferentiator[List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> operations, ColumnDefinition.Raw key]
+columnOperationDifferentiator[List<Pair<ColumnMetadata.Raw, Operation.RawUpdate>> operations, ColumnMetadata.Raw key]
: '=' normalColumnOperation[operations, key]
| shorthandColumnOperation[operations, key]
| '[' k=term ']' collectionColumnOperation[operations, key, k]
| '.' field=fident udtColumnOperation[operations, key, field]
;
-normalColumnOperation[List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> operations, ColumnDefinition.Raw key]
+normalColumnOperation[List<Pair<ColumnMetadata.Raw, Operation.RawUpdate>> operations, ColumnMetadata.Raw key]
: t=term ('+' c=cident )?
{
if (c == null)
@@ -1521,28 +1521,28 @@ normalColumnOperation[List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> oper
}
;
-shorthandColumnOperation[List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> operations, ColumnDefinition.Raw key]
+shorthandColumnOperation[List<Pair<ColumnMetadata.Raw, Operation.RawUpdate>> operations, ColumnMetadata.Raw key]
: sig=('+=' | '-=') t=term
{
addRawUpdate(operations, key, $sig.text.equals("+=") ? new Operation.Addition(t) : new Operation.Substraction(t));
}
;
-collectionColumnOperation[List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> operations, ColumnDefinition.Raw key, Term.Raw k]
+collectionColumnOperation[List<Pair<ColumnMetadata.Raw, Operation.RawUpdate>> operations, ColumnMetadata.Raw key, Term.Raw k]
: '=' t=term
{
addRawUpdate(operations, key, new Operation.SetElement(k, t));
}
;
-udtColumnOperation[List<Pair<ColumnDefinition.Raw, Operation.RawUpdate>> operations, ColumnDefinition.Raw key, FieldIdentifier field]
+udtColumnOperation[List<Pair<ColumnMetadata.Raw, Operation.RawUpdate>> operations, ColumnMetadata.Raw key, FieldIdentifier field]
: '=' t=term
{
addRawUpdate(operations, key, new Operation.SetField(field, t));
}
;
-columnCondition[List<Pair<ColumnDefinition.Raw, ColumnCondition.Raw>> conditions]
+columnCondition[List<Pair<ColumnMetadata.Raw, ColumnCondition.Raw>> conditions]
// Note: we'll reject duplicates later
: key=cident
( op=relationType t=term { conditions.add(Pair.create(key, ColumnCondition.Raw.simpleCondition(t, op))); }
@@ -1634,8 +1634,8 @@ inMarker returns [AbstractMarker.INRaw marker]
| ':' name=noncol_ident { $marker = newINBindVariables(name); }
;
-tupleOfIdentifiers returns [List<ColumnDefinition.Raw> ids]
- @init { $ids = new ArrayList<ColumnDefinition.Raw>(); }
+tupleOfIdentifiers returns [List<ColumnMetadata.Raw> ids]
+ @init { $ids = new ArrayList<ColumnMetadata.Raw>(); }
: '(' n1=cident { $ids.add(n1); } (',' ni=cident { $ids.add(ni); })* ')'
;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/auth/AuthKeyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/AuthKeyspace.java b/src/java/org/apache/cassandra/auth/AuthKeyspace.java
index a5add9a..a7079dc 100644
--- a/src/java/org/apache/cassandra/auth/AuthKeyspace.java
+++ b/src/java/org/apache/cassandra/auth/AuthKeyspace.java
@@ -19,12 +19,16 @@ package org.apache.cassandra.auth;
import java.util.concurrent.TimeUnit;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.SchemaConstants;
+import org.apache.cassandra.cql3.statements.CreateTableStatement;
+import org.apache.cassandra.schema.TableId;
+import org.apache.cassandra.schema.TableMetadata;
+import org.apache.cassandra.schema.SchemaConstants;
import org.apache.cassandra.schema.KeyspaceMetadata;
import org.apache.cassandra.schema.KeyspaceParams;
import org.apache.cassandra.schema.Tables;
+import static java.lang.String.format;
+
public final class AuthKeyspace
{
private AuthKeyspace()
@@ -38,52 +42,57 @@ public final class AuthKeyspace
public static final long SUPERUSER_SETUP_DELAY = Long.getLong("cassandra.superuser_setup_delay_ms", 10000);
- private static final CFMetaData Roles =
- compile(ROLES,
- "role definitions",
- "CREATE TABLE %s ("
- + "role text,"
- + "is_superuser boolean,"
- + "can_login boolean,"
- + "salted_hash text,"
- + "member_of set<text>,"
- + "PRIMARY KEY(role))");
+ private static final TableMetadata Roles =
+ parse(ROLES,
+ "role definitions",
+ "CREATE TABLE %s ("
+ + "role text,"
+ + "is_superuser boolean,"
+ + "can_login boolean,"
+ + "salted_hash text,"
+ + "member_of set<text>,"
+ + "PRIMARY KEY(role))");
- private static final CFMetaData RoleMembers =
- compile(ROLE_MEMBERS,
- "role memberships lookup table",
- "CREATE TABLE %s ("
- + "role text,"
- + "member text,"
- + "PRIMARY KEY(role, member))");
+ private static final TableMetadata RoleMembers =
+ parse(ROLE_MEMBERS,
+ "role memberships lookup table",
+ "CREATE TABLE %s ("
+ + "role text,"
+ + "member text,"
+ + "PRIMARY KEY(role, member))");
- private static final CFMetaData RolePermissions =
- compile(ROLE_PERMISSIONS,
- "permissions granted to db roles",
- "CREATE TABLE %s ("
- + "role text,"
- + "resource text,"
- + "permissions set<text>,"
- + "PRIMARY KEY(role, resource))");
+ private static final TableMetadata RolePermissions =
+ parse(ROLE_PERMISSIONS,
+ "permissions granted to db roles",
+ "CREATE TABLE %s ("
+ + "role text,"
+ + "resource text,"
+ + "permissions set<text>,"
+ + "PRIMARY KEY(role, resource))");
- private static final CFMetaData ResourceRoleIndex =
- compile(RESOURCE_ROLE_INDEX,
- "index of db roles with permissions granted on a resource",
- "CREATE TABLE %s ("
- + "resource text,"
- + "role text,"
- + "PRIMARY KEY(resource, role))");
+ private static final TableMetadata ResourceRoleIndex =
+ parse(RESOURCE_ROLE_INDEX,
+ "index of db roles with permissions granted on a resource",
+ "CREATE TABLE %s ("
+ + "resource text,"
+ + "role text,"
+ + "PRIMARY KEY(resource, role))");
- private static CFMetaData compile(String name, String description, String schema)
+ private static TableMetadata parse(String name, String description, String cql)
{
- return CFMetaData.compile(String.format(schema, name), SchemaConstants.AUTH_KEYSPACE_NAME)
- .comment(description)
- .gcGraceSeconds((int) TimeUnit.DAYS.toSeconds(90));
+ return CreateTableStatement.parse(format(cql, name), SchemaConstants.AUTH_KEYSPACE_NAME)
+ .id(TableId.forSystemTable(SchemaConstants.AUTH_KEYSPACE_NAME, name))
+ .comment(description)
+ .dcLocalReadRepairChance(0.0)
+ .gcGraceSeconds((int) TimeUnit.DAYS.toSeconds(90))
+ .build();
}
public static KeyspaceMetadata metadata()
{
- return KeyspaceMetadata.create(SchemaConstants.AUTH_KEYSPACE_NAME, KeyspaceParams.simple(1), Tables.of(Roles, RoleMembers, RolePermissions, ResourceRoleIndex));
+ return KeyspaceMetadata.create(SchemaConstants.AUTH_KEYSPACE_NAME,
+ KeyspaceParams.simple(1),
+ Tables.of(Roles, RoleMembers, RolePermissions, ResourceRoleIndex));
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/auth/AuthMigrationListener.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/AuthMigrationListener.java b/src/java/org/apache/cassandra/auth/AuthMigrationListener.java
deleted file mode 100644
index 64fe7c6..0000000
--- a/src/java/org/apache/cassandra/auth/AuthMigrationListener.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.auth;
-
-import java.util.List;
-
-import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.service.MigrationListener;
-
-/**
- * MigrationListener implementation that cleans up permissions on dropped resources.
- */
-public class AuthMigrationListener extends MigrationListener
-{
- public void onDropKeyspace(String ksName)
- {
- DatabaseDescriptor.getAuthorizer().revokeAllOn(DataResource.keyspace(ksName));
- DatabaseDescriptor.getAuthorizer().revokeAllOn(FunctionResource.keyspace(ksName));
- }
-
- public void onDropColumnFamily(String ksName, String cfName)
- {
- DatabaseDescriptor.getAuthorizer().revokeAllOn(DataResource.table(ksName, cfName));
- }
-
- public void onDropFunction(String ksName, String functionName, List<AbstractType<?>> argTypes)
- {
- DatabaseDescriptor.getAuthorizer()
- .revokeAllOn(FunctionResource.function(ksName, functionName, argTypes));
- }
-
- public void onDropAggregate(String ksName, String aggregateName, List<AbstractType<?>> argTypes)
- {
- DatabaseDescriptor.getAuthorizer()
- .revokeAllOn(FunctionResource.function(ksName, aggregateName, argTypes));
- }
-}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/auth/AuthSchemaChangeListener.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/AuthSchemaChangeListener.java b/src/java/org/apache/cassandra/auth/AuthSchemaChangeListener.java
new file mode 100644
index 0000000..6c21d7b
--- /dev/null
+++ b/src/java/org/apache/cassandra/auth/AuthSchemaChangeListener.java
@@ -0,0 +1,53 @@
+/*
+ * 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.auth;
+
+import java.util.List;
+
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.schema.SchemaChangeListener;
+
+/**
+ * SchemaChangeListener implementation that cleans up permissions on dropped resources.
+ */
+public class AuthSchemaChangeListener extends SchemaChangeListener
+{
+ public void onDropKeyspace(String ksName)
+ {
+ DatabaseDescriptor.getAuthorizer().revokeAllOn(DataResource.keyspace(ksName));
+ DatabaseDescriptor.getAuthorizer().revokeAllOn(FunctionResource.keyspace(ksName));
+ }
+
+ public void onDropTable(String ksName, String cfName)
+ {
+ DatabaseDescriptor.getAuthorizer().revokeAllOn(DataResource.table(ksName, cfName));
+ }
+
+ public void onDropFunction(String ksName, String functionName, List<AbstractType<?>> argTypes)
+ {
+ DatabaseDescriptor.getAuthorizer()
+ .revokeAllOn(FunctionResource.function(ksName, functionName, argTypes));
+ }
+
+ public void onDropAggregate(String ksName, String aggregateName, List<AbstractType<?>> argTypes)
+ {
+ DatabaseDescriptor.getAuthorizer()
+ .revokeAllOn(FunctionResource.function(ksName, aggregateName, argTypes));
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java b/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java
index 7f44eef..045a38a 100644
--- a/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java
+++ b/src/java/org/apache/cassandra/auth/CassandraAuthorizer.java
@@ -30,8 +30,8 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.concurrent.ScheduledExecutors;
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.*;
import org.apache.cassandra.cql3.statements.BatchStatement;
import org.apache.cassandra.cql3.statements.ModificationStatement;
@@ -218,7 +218,7 @@ public class CassandraAuthorizer implements IAuthorizer
SelectStatement statement;
// If it exists, read from the legacy user permissions table to handle the case where the cluster
// is being upgraded and so is running with mixed versions of the authz schema
- if (Schema.instance.getCFMetaData(SchemaConstants.AUTH_KEYSPACE_NAME, USER_PERMISSIONS) == null)
+ if (Schema.instance.getTableMetadata(SchemaConstants.AUTH_KEYSPACE_NAME, USER_PERMISSIONS) == null)
statement = authorizeRoleStatement;
else
{
@@ -305,7 +305,7 @@ public class CassandraAuthorizer implements IAuthorizer
Set<PermissionDetails> details = new HashSet<>();
// If it exists, try the legacy user permissions table first. This is to handle the case
// where the cluster is being upgraded and so is running with mixed versions of the perms table
- boolean useLegacyTable = Schema.instance.getCFMetaData(SchemaConstants.AUTH_KEYSPACE_NAME, USER_PERMISSIONS) != null;
+ boolean useLegacyTable = Schema.instance.getTableMetadata(SchemaConstants.AUTH_KEYSPACE_NAME, USER_PERMISSIONS) != null;
String entityColumnName = useLegacyTable ? USERNAME : ROLE;
for (UntypedResultSet.Row row : process(buildListQuery(resource, role, useLegacyTable)))
{
@@ -370,7 +370,7 @@ public class CassandraAuthorizer implements IAuthorizer
// If old user permissions table exists, migrate the legacy authz data to the new table
// The delay is to give the node a chance to see its peers before attempting the conversion
- if (Schema.instance.getCFMetaData(SchemaConstants.AUTH_KEYSPACE_NAME, "permissions") != null)
+ if (Schema.instance.getTableMetadata(SchemaConstants.AUTH_KEYSPACE_NAME, "permissions") != null)
{
legacyAuthorizeRoleStatement = prepare(USERNAME, USER_PERMISSIONS);
@@ -404,7 +404,7 @@ public class CassandraAuthorizer implements IAuthorizer
{
try
{
- if (Schema.instance.getCFMetaData("system_auth", "permissions") != null)
+ if (Schema.instance.getTableMetadata("system_auth", "permissions") != null)
{
logger.info("Converting legacy permissions data");
CQLStatement insertStatement =
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/CassandraRoleManager.java b/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
index d371df3..bd1d176 100644
--- a/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
+++ b/src/java/org/apache/cassandra/auth/CassandraRoleManager.java
@@ -32,8 +32,8 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.concurrent.ScheduledExecutors;
import org.apache.cassandra.config.Config;
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.*;
import org.apache.cassandra.cql3.statements.SelectStatement;
import org.apache.cassandra.db.ConsistencyLevel;
@@ -162,7 +162,7 @@ public class CassandraRoleManager implements IRoleManager
// it, so we can continue to use the old tables while the cluster is upgraded.
// Otherwise, we may need to create a default superuser role to enable others
// to be added.
- if (Schema.instance.getCFMetaData(SchemaConstants.AUTH_KEYSPACE_NAME, "users") != null)
+ if (Schema.instance.getTableMetadata(SchemaConstants.AUTH_KEYSPACE_NAME, "users") != null)
{
legacySelectUserStatement = prepareLegacySelectUserStatement();
@@ -399,7 +399,7 @@ public class CassandraRoleManager implements IRoleManager
try
{
// read old data at QUORUM as it may contain the data for the default superuser
- if (Schema.instance.getCFMetaData("system_auth", "users") != null)
+ if (Schema.instance.getTableMetadata("system_auth", "users") != null)
{
logger.info("Converting legacy users");
UntypedResultSet users = QueryProcessor.process("SELECT * FROM system_auth.users",
@@ -414,7 +414,7 @@ public class CassandraRoleManager implements IRoleManager
logger.info("Completed conversion of legacy users");
}
- if (Schema.instance.getCFMetaData("system_auth", "credentials") != null)
+ if (Schema.instance.getTableMetadata("system_auth", "credentials") != null)
{
logger.info("Migrating legacy credentials data to new system table");
UntypedResultSet credentials = QueryProcessor.process("SELECT * FROM system_auth.credentials",
@@ -489,7 +489,7 @@ public class CassandraRoleManager implements IRoleManager
// If it exists, try the legacy users table in case the cluster
// is in the process of being upgraded and so is running with mixed
// versions of the authn schema.
- if (Schema.instance.getCFMetaData(SchemaConstants.AUTH_KEYSPACE_NAME, "users") == null)
+ if (Schema.instance.getTableMetadata(SchemaConstants.AUTH_KEYSPACE_NAME, "users") == null)
return getRoleFromTable(name, loadRoleStatement, ROW_TO_ROLE);
else
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/auth/DataResource.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/DataResource.java b/src/java/org/apache/cassandra/auth/DataResource.java
index 0aa24db..c3f5b32 100644
--- a/src/java/org/apache/cassandra/auth/DataResource.java
+++ b/src/java/org/apache/cassandra/auth/DataResource.java
@@ -23,7 +23,7 @@ import com.google.common.base.Objects;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
-import org.apache.cassandra.config.Schema;
+import org.apache.cassandra.schema.Schema;
/**
* The primary type of resource in Cassandra.
@@ -211,7 +211,7 @@ public class DataResource implements IResource
case KEYSPACE:
return Schema.instance.getKeyspaces().contains(keyspace);
case TABLE:
- return Schema.instance.getCFMetaData(keyspace, table) != null;
+ return Schema.instance.getTableMetadata(keyspace, table) != null;
}
throw new AssertionError();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/auth/FunctionResource.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/FunctionResource.java b/src/java/org/apache/cassandra/auth/FunctionResource.java
index 01a4de5..f9f51d5 100644
--- a/src/java/org/apache/cassandra/auth/FunctionResource.java
+++ b/src/java/org/apache/cassandra/auth/FunctionResource.java
@@ -28,7 +28,7 @@ import com.google.common.base.Splitter;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
-import org.apache.cassandra.config.Schema;
+import org.apache.cassandra.schema.Schema;
import org.apache.cassandra.cql3.CQL3Type;
import org.apache.cassandra.cql3.functions.Function;
import org.apache.cassandra.cql3.functions.FunctionName;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java b/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java
index b1b0536..74ef851 100644
--- a/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java
+++ b/src/java/org/apache/cassandra/auth/PasswordAuthenticator.java
@@ -30,8 +30,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.QueryOptions;
import org.apache.cassandra.cql3.QueryProcessor;
import org.apache.cassandra.cql3.UntypedResultSet;
@@ -133,7 +133,7 @@ public class PasswordAuthenticator implements IAuthenticator
*/
private SelectStatement authenticationStatement()
{
- if (Schema.instance.getCFMetaData(SchemaConstants.AUTH_KEYSPACE_NAME, LEGACY_CREDENTIALS_TABLE) == null)
+ if (Schema.instance.getTableMetadata(SchemaConstants.AUTH_KEYSPACE_NAME, LEGACY_CREDENTIALS_TABLE) == null)
return authenticateStatement;
else
{
@@ -164,7 +164,7 @@ public class PasswordAuthenticator implements IAuthenticator
AuthKeyspace.ROLES);
authenticateStatement = prepare(query);
- if (Schema.instance.getCFMetaData(SchemaConstants.AUTH_KEYSPACE_NAME, LEGACY_CREDENTIALS_TABLE) != null)
+ if (Schema.instance.getTableMetadata(SchemaConstants.AUTH_KEYSPACE_NAME, LEGACY_CREDENTIALS_TABLE) != null)
prepareLegacyAuthenticateStatement();
cache = new CredentialsCache(this);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/batchlog/BatchlogManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/batchlog/BatchlogManager.java b/src/java/org/apache/cassandra/batchlog/BatchlogManager.java
index d23103c..321fca6 100644
--- a/src/java/org/apache/cassandra/batchlog/BatchlogManager.java
+++ b/src/java/org/apache/cassandra/batchlog/BatchlogManager.java
@@ -34,7 +34,7 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor;
import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.config.SchemaConstants;
+import org.apache.cassandra.schema.SchemaConstants;
import org.apache.cassandra.cql3.UntypedResultSet;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.marshal.BytesType;
@@ -51,6 +51,7 @@ import org.apache.cassandra.io.util.DataOutputBuffer;
import org.apache.cassandra.net.MessageIn;
import org.apache.cassandra.net.MessageOut;
import org.apache.cassandra.net.MessagingService;
+import org.apache.cassandra.schema.TableId;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.service.WriteResponseHandler;
import org.apache.cassandra.utils.FBUtilities;
@@ -364,9 +365,9 @@ public class BatchlogManager implements BatchlogManagerMBean
// truncated.
private void addMutation(Mutation mutation)
{
- for (UUID cfId : mutation.getColumnFamilyIds())
- if (writtenAt <= SystemKeyspace.getTruncatedAt(cfId))
- mutation = mutation.without(cfId);
+ for (TableId tableId : mutation.getTableIds())
+ if (writtenAt <= SystemKeyspace.getTruncatedAt(tableId))
+ mutation = mutation.without(tableId);
if (!mutation.isEmpty())
mutations.add(mutation);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cache/AutoSavingCache.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cache/AutoSavingCache.java b/src/java/org/apache/cassandra/cache/AutoSavingCache.java
index b7616b9..1f06266 100644
--- a/src/java/org/apache/cassandra/cache/AutoSavingCache.java
+++ b/src/java/org/apache/cassandra/cache/AutoSavingCache.java
@@ -34,10 +34,11 @@ import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import org.apache.cassandra.concurrent.ScheduledExecutors;
-import org.apache.cassandra.config.CFMetaData;
+import org.apache.cassandra.schema.TableId;
+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.db.ColumnFamilyStore;
import org.apache.cassandra.db.compaction.CompactionInfo;
import org.apache.cassandra.db.compaction.CompactionManager;
@@ -79,8 +80,10 @@ public class AutoSavingCache<K extends CacheKey, V> extends InstrumentingCache<K
* Sticking with "d" is fine for 3.0 since it has never been released or used by another version
*
* "e" introduced with CASSANDRA-11206, omits IndexInfo from key-cache, stores offset into index-file
+ *
+ * "f" introduced with CASSANDRA-9425, changes "keyspace.table.index" in cache keys to TableMetadata.id+TableMetadata.indexName
*/
- private static final String CURRENT_VERSION = "e";
+ private static final String CURRENT_VERSION = "f";
private static volatile IStreamFactory streamFactory = new IStreamFactory()
{
@@ -208,13 +211,17 @@ public class AutoSavingCache<K extends CacheKey, V> extends InstrumentingCache<K
ArrayDeque<Future<Pair<K, V>>> futures = new ArrayDeque<Future<Pair<K, V>>>();
while (in.available() > 0)
{
- //ksname and cfname are serialized by the serializers in CacheService
+ //tableId and indexName are serialized by the serializers in CacheService
//That is delegated there because there are serializer specific conditions
//where a cache key is skipped and not written
- String ksname = in.readUTF();
- String cfname = in.readUTF();
+ TableId tableId = TableId.deserialize(in);
+ String indexName = in.readUTF();
+ if (indexName.isEmpty())
+ indexName = null;
- ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreIncludingIndexes(Pair.create(ksname, cfname));
+ ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreInstance(tableId);
+ if (indexName != null && cfs != null)
+ cfs = cfs.indexManager.getIndexByName(indexName).getBackingTable().orElse(null);
Future<Pair<K, V>> entryFuture = cacheLoader.deserialize(in, cfs);
// Key cache entry can return null, if the SSTable doesn't exist.
@@ -308,7 +315,7 @@ public class AutoSavingCache<K extends CacheKey, V> extends InstrumentingCache<K
else
type = OperationType.UNKNOWN;
- info = new CompactionInfo(CFMetaData.createFake(SchemaConstants.SYSTEM_KEYSPACE_NAME, cacheType.toString()),
+ info = new CompactionInfo(TableMetadata.minimal(SchemaConstants.SYSTEM_KEYSPACE_NAME, cacheType.toString()),
type,
0,
keysEstimate,
@@ -359,9 +366,11 @@ public class AutoSavingCache<K extends CacheKey, V> extends InstrumentingCache<K
{
K key = keyIterator.next();
- ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreIncludingIndexes(key.ksAndCFName);
+ ColumnFamilyStore cfs = Schema.instance.getColumnFamilyStoreInstance(key.tableId);
if (cfs == null)
continue; // the table or 2i has been dropped.
+ if (key.indexName != null)
+ cfs = cfs.indexManager.getIndexByName(key.indexName).getBackingTable().orElse(null);
cacheLoader.serialize(key, writer, cfs);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cache/CacheKey.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cache/CacheKey.java b/src/java/org/apache/cassandra/cache/CacheKey.java
index 0e82990..ccab672 100644
--- a/src/java/org/apache/cassandra/cache/CacheKey.java
+++ b/src/java/org/apache/cassandra/cache/CacheKey.java
@@ -17,14 +17,30 @@
*/
package org.apache.cassandra.cache;
-import org.apache.cassandra.utils.Pair;
+import java.util.Objects;
+
+import org.apache.cassandra.schema.TableId;
+import org.apache.cassandra.schema.TableMetadata;
public abstract class CacheKey implements IMeasurableMemory
{
- public final Pair<String, String> ksAndCFName;
+ public final TableId tableId;
+ public final String indexName;
+
+ protected CacheKey(TableId tableId, String indexName)
+ {
+ this.tableId = tableId;
+ this.indexName = indexName;
+ }
+
+ public CacheKey(TableMetadata metadata)
+ {
+ this(metadata.id, metadata.indexName().orElse(null));
+ }
- public CacheKey(Pair<String, String> ksAndCFName)
+ public boolean sameTable(TableMetadata tableMetadata)
{
- this.ksAndCFName = ksAndCFName;
+ return tableId.equals(tableMetadata.id)
+ && Objects.equals(indexName, tableMetadata.indexName().orElse(null));
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cache/CounterCacheKey.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cache/CounterCacheKey.java b/src/java/org/apache/cassandra/cache/CounterCacheKey.java
index 67dd15f..2d123d4 100644
--- a/src/java/org/apache/cassandra/cache/CounterCacheKey.java
+++ b/src/java/org/apache/cassandra/cache/CounterCacheKey.java
@@ -20,47 +20,55 @@ package org.apache.cassandra.cache;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import java.util.Objects;
+import java.util.UUID;
-import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.filter.ClusteringIndexFilter;
import org.apache.cassandra.db.filter.ClusteringIndexNamesFilter;
import org.apache.cassandra.db.filter.ColumnFilter;
-import org.apache.cassandra.db.rows.CellPath;
import org.apache.cassandra.db.marshal.CompositeType;
+import org.apache.cassandra.db.marshal.UTF8Type;
+import org.apache.cassandra.db.rows.CellPath;
import org.apache.cassandra.db.rows.RowIterator;
import org.apache.cassandra.db.rows.UnfilteredRowIterators;
import org.apache.cassandra.io.util.DataInputPlus;
import org.apache.cassandra.io.util.DataOutputPlus;
+import org.apache.cassandra.schema.ColumnMetadata;
+import org.apache.cassandra.schema.Schema;
+import org.apache.cassandra.schema.TableMetadata;
+import org.apache.cassandra.schema.TableMetadataRef;
import org.apache.cassandra.utils.*;
public final class CounterCacheKey extends CacheKey
{
- private static final long EMPTY_SIZE = ObjectSizes.measure(new CounterCacheKey(null, ByteBufferUtil.EMPTY_BYTE_BUFFER, ByteBuffer.allocate(1)));
+ private static final long EMPTY_SIZE = ObjectSizes.measure(new CounterCacheKey(TableMetadata.builder("ks", "tab")
+ .addPartitionKeyColumn("pk", UTF8Type.instance)
+ .build(), ByteBufferUtil.EMPTY_BYTE_BUFFER, ByteBuffer.allocate(1)));
private final byte[] partitionKey;
private final byte[] cellName;
- private CounterCacheKey(Pair<String, String> ksAndCFName, byte[] partitionKey, byte[] cellName)
+ private CounterCacheKey(TableMetadata tableMetadata, byte[] partitionKey, byte[] cellName)
{
- super(ksAndCFName);
+ super(tableMetadata);
this.partitionKey = partitionKey;
this.cellName = cellName;
}
- private CounterCacheKey(Pair<String, String> ksAndCFName, ByteBuffer partitionKey, ByteBuffer cellName)
+ private CounterCacheKey(TableMetadata tableMetadata, ByteBuffer partitionKey, ByteBuffer cellName)
{
- this(ksAndCFName, ByteBufferUtil.getArray(partitionKey), ByteBufferUtil.getArray(cellName));
+ this(tableMetadata, ByteBufferUtil.getArray(partitionKey), ByteBufferUtil.getArray(cellName));
}
- public static CounterCacheKey create(Pair<String, String> ksAndCFName, ByteBuffer partitionKey, Clustering clustering, ColumnDefinition c, CellPath path)
+ public static CounterCacheKey create(TableMetadata tableMetadata, ByteBuffer partitionKey, Clustering clustering, ColumnMetadata c, CellPath path)
{
- return new CounterCacheKey(ksAndCFName, partitionKey, makeCellName(clustering, c, path));
+ return new CounterCacheKey(tableMetadata, partitionKey, makeCellName(clustering, c, path));
}
- private static ByteBuffer makeCellName(Clustering clustering, ColumnDefinition c, CellPath path)
+ private static ByteBuffer makeCellName(Clustering clustering, ColumnMetadata c, CellPath path)
{
int cs = clustering.size();
ByteBuffer[] values = new ByteBuffer[cs + 1 + (path == null ? 0 : path.size())];
@@ -87,8 +95,8 @@ public final class CounterCacheKey extends CacheKey
*/
public ByteBuffer readCounterValue(ColumnFamilyStore cfs)
{
- CFMetaData metadata = cfs.metadata;
- assert metadata.ksAndCFName.equals(ksAndCFName);
+ TableMetadata metadata = cfs.metadata();
+ assert metadata.id.equals(tableId) && Objects.equals(metadata.indexName().orElse(null), indexName);
DecoratedKey key = cfs.decorateKey(partitionKey());
@@ -97,7 +105,7 @@ public final class CounterCacheKey extends CacheKey
assert buffers.size() >= clusteringSize + 1; // See makeCellName above
Clustering clustering = Clustering.make(buffers.subList(0, clusteringSize).toArray(new ByteBuffer[clusteringSize]));
- ColumnDefinition column = metadata.getColumnDefinition(buffers.get(clusteringSize));
+ ColumnMetadata column = metadata.getColumn(buffers.get(clusteringSize));
// This can theoretically happen if a column is dropped after the cache is saved and we
// try to load it. Not point if failing in any case, just skip the value.
if (column == null)
@@ -134,10 +142,10 @@ public final class CounterCacheKey extends CacheKey
ByteBufferUtil.writeWithLength(cellName, out);
}
- public static CounterCacheKey read(Pair<String, String> ksAndCFName, DataInputPlus in)
+ public static CounterCacheKey read(TableMetadata tableMetadata, DataInputPlus in)
throws IOException
{
- return new CounterCacheKey(ksAndCFName,
+ return new CounterCacheKey(tableMetadata,
ByteBufferUtil.readBytesWithLength(in),
ByteBufferUtil.readBytesWithLength(in));
}
@@ -152,8 +160,9 @@ public final class CounterCacheKey extends CacheKey
@Override
public String toString()
{
- return String.format("CounterCacheKey(%s, %s, %s)",
- ksAndCFName,
+ TableMetadataRef tableRef = Schema.instance.getTableMetadataRef(tableId);
+ return String.format("CounterCacheKey(%s, %s, %s, %s)",
+ tableRef, indexName,
ByteBufferUtil.bytesToHex(ByteBuffer.wrap(partitionKey)),
ByteBufferUtil.bytesToHex(ByteBuffer.wrap(cellName)));
}
@@ -161,7 +170,7 @@ public final class CounterCacheKey extends CacheKey
@Override
public int hashCode()
{
- return Arrays.deepHashCode(new Object[]{ksAndCFName, partitionKey, cellName});
+ return Arrays.deepHashCode(new Object[]{tableId, indexName, partitionKey, cellName});
}
@Override
@@ -175,7 +184,8 @@ public final class CounterCacheKey extends CacheKey
CounterCacheKey cck = (CounterCacheKey) o;
- return ksAndCFName.equals(cck.ksAndCFName)
+ return tableId.equals(cck.tableId)
+ && Objects.equals(indexName, cck.indexName)
&& Arrays.equals(partitionKey, cck.partitionKey)
&& Arrays.equals(cellName, cck.cellName);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/af3fe39d/src/java/org/apache/cassandra/cache/KeyCacheKey.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cache/KeyCacheKey.java b/src/java/org/apache/cassandra/cache/KeyCacheKey.java
index 222622c..3728cae 100644
--- a/src/java/org/apache/cassandra/cache/KeyCacheKey.java
+++ b/src/java/org/apache/cassandra/cache/KeyCacheKey.java
@@ -19,26 +19,31 @@ package org.apache.cassandra.cache;
import java.nio.ByteBuffer;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.UUID;
+import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.io.sstable.Descriptor;
+import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.ObjectSizes;
-import org.apache.cassandra.utils.Pair;
public class KeyCacheKey extends CacheKey
{
public final Descriptor desc;
- private static final long EMPTY_SIZE = ObjectSizes.measure(new KeyCacheKey(null, null, ByteBufferUtil.EMPTY_BYTE_BUFFER));
+ private static final long EMPTY_SIZE = ObjectSizes.measure(new KeyCacheKey(TableMetadata.builder("ks", "tab")
+ .addPartitionKeyColumn("pk", UTF8Type.instance)
+ .build(), null, ByteBufferUtil.EMPTY_BYTE_BUFFER));
// keeping an array instead of a ByteBuffer lowers the overhead of the key cache working set,
// without extra copies on lookup since client-provided key ByteBuffers will be array-backed already
public final byte[] key;
- public KeyCacheKey(Pair<String, String> ksAndCFName, Descriptor desc, ByteBuffer key)
+ public KeyCacheKey(TableMetadata tableMetadata, Descriptor desc, ByteBuffer key)
{
-
- super(ksAndCFName);
+ super(tableMetadata);
this.desc = desc;
this.key = ByteBufferUtil.getArray(key);
assert this.key != null;
@@ -62,13 +67,17 @@ public class KeyCacheKey extends CacheKey
KeyCacheKey that = (KeyCacheKey) o;
- return ksAndCFName.equals(that.ksAndCFName) && desc.equals(that.desc) && Arrays.equals(key, that.key);
+ return tableId.equals(that.tableId)
+ && Objects.equals(indexName, that.indexName)
+ && desc.equals(that.desc)
+ && Arrays.equals(key, that.key);
}
@Override
public int hashCode()
{
- int result = ksAndCFName.hashCode();
+ int result = tableId.hashCode();
+ result = 31 * result + Objects.hashCode(indexName);
result = 31 * result + desc.hashCode();
result = 31 * result + Arrays.hashCode(key);
return result;