http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableScanner.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableScanner.java b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableScanner.java index 0451a98..1b3b407 100644 --- a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableScanner.java +++ b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableScanner.java @@ -172,7 +172,7 @@ public class BigTableScanner implements ISSTableScanner while (!ifile.isEOF()) { indexPosition = ifile.getFilePointer(); - DecoratedKey indexDecoratedKey = sstable.partitioner.decorateKey(ByteBufferUtil.readWithShortLength(ifile)); + DecoratedKey indexDecoratedKey = sstable.decorateKey(ByteBufferUtil.readWithShortLength(ifile)); if (indexDecoratedKey.compareTo(currentRange.left) > 0 || currentRange.contains(indexDecoratedKey)) { // Found, just read the dataPosition and seek into index and data files @@ -282,7 +282,7 @@ public class BigTableScanner implements ISSTableScanner if (ifile.isEOF()) return endOfData(); - currentKey = sstable.partitioner.decorateKey(ByteBufferUtil.readWithShortLength(ifile)); + currentKey = sstable.decorateKey(ByteBufferUtil.readWithShortLength(ifile)); currentEntry = rowIndexEntrySerializer.deserialize(ifile); } while (!currentRange.contains(currentKey)); } @@ -301,7 +301,7 @@ public class BigTableScanner implements ISSTableScanner else { // we need the position of the start of the next key, regardless of whether it falls in the current range - nextKey = sstable.partitioner.decorateKey(ByteBufferUtil.readWithShortLength(ifile)); + nextKey = sstable.decorateKey(ByteBufferUtil.readWithShortLength(ifile)); nextEntry = rowIndexEntrySerializer.deserialize(ifile); if (!currentRange.contains(nextKey))
http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java index ff279a8..5607a7e 100644 --- a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java +++ b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java @@ -19,7 +19,6 @@ package org.apache.cassandra.io.sstable.format.big; import java.io.*; import java.util.Map; -import java.util.Set; import org.apache.cassandra.db.*; import org.apache.cassandra.db.lifecycle.LifecycleTransaction; @@ -32,7 +31,6 @@ import org.slf4j.LoggerFactory; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.rows.*; -import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.io.FSWriteError; import org.apache.cassandra.io.compress.CompressedSequentialWriter; import org.apache.cassandra.io.sstable.metadata.MetadataCollector; @@ -62,12 +60,11 @@ public class BigTableWriter extends SSTableWriter Long keyCount, Long repairedAt, CFMetaData metadata, - IPartitioner partitioner, MetadataCollector metadataCollector, SerializationHeader header, LifecycleTransaction txn) { - super(descriptor, keyCount, repairedAt, metadata, partitioner, metadataCollector, header); + super(descriptor, keyCount, repairedAt, metadata, metadataCollector, header); txn.trackNew(this); // must track before any files are created if (compression) @@ -243,13 +240,12 @@ public class BigTableWriter extends SSTableWriter StatsMetadata stats = statsMetadata(); assert boundary.indexLength > 0 && boundary.dataLength > 0; // open the reader early - IndexSummary indexSummary = iwriter.summary.build(partitioner, boundary); + IndexSummary indexSummary = iwriter.summary.build(metadata.partitioner, boundary); SegmentedFile ifile = iwriter.builder.buildIndex(descriptor, indexSummary, boundary); SegmentedFile dfile = dbuilder.buildData(descriptor, stats, boundary); SSTableReader sstable = SSTableReader.internalOpen(descriptor, components, metadata, - partitioner, ifile, - dfile, indexSummary, + ifile, dfile, indexSummary, iwriter.bf.sharedCopy(), maxDataAge, stats, SSTableReader.OpenReason.EARLY, header); // now it's open, find the ACTUAL last readable key (i.e. for which the data file has also been flushed) @@ -275,13 +271,12 @@ public class BigTableWriter extends SSTableWriter StatsMetadata stats = statsMetadata(); // finalize in-memory state for the reader - IndexSummary indexSummary = iwriter.summary.build(partitioner); + IndexSummary indexSummary = iwriter.summary.build(this.metadata.partitioner); SegmentedFile ifile = iwriter.builder.buildIndex(desc, indexSummary); SegmentedFile dfile = dbuilder.buildData(desc, stats); SSTableReader sstable = SSTableReader.internalOpen(desc, components, this.metadata, - partitioner, ifile, dfile, indexSummary, @@ -475,7 +470,7 @@ public class BigTableWriter extends SSTableWriter // save summary summary.prepareToCommit(); - try (IndexSummary summary = iwriter.summary.build(partitioner)) + try (IndexSummary summary = iwriter.summary.build(getPartitioner())) { SSTableReader.saveSummary(descriptor, first, last, iwriter.builder, dbuilder, summary); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/locator/TokenMetadata.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/locator/TokenMetadata.java b/src/java/org/apache/cassandra/locator/TokenMetadata.java index 1b3c560..c3ec353 100644 --- a/src/java/org/apache/cassandra/locator/TokenMetadata.java +++ b/src/java/org/apache/cassandra/locator/TokenMetadata.java @@ -26,12 +26,14 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.*; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.cassandra.config.DatabaseDescriptor; +import org.apache.cassandra.db.DecoratedKey; +import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.dht.Range; import org.apache.cassandra.dht.Token; import org.apache.cassandra.gms.FailureDetector; @@ -92,6 +94,7 @@ public class TokenMetadata private volatile ArrayList<Token> sortedTokens; private final Topology topology; + public final IPartitioner partitioner; private static final Comparator<InetAddress> inetaddressCmp = new Comparator<InetAddress>() { @@ -108,17 +111,28 @@ public class TokenMetadata { this(SortedBiMultiValMap.<Token, InetAddress>create(null, inetaddressCmp), HashBiMap.<InetAddress, UUID>create(), - new Topology()); + new Topology(), + DatabaseDescriptor.getPartitioner()); } - private TokenMetadata(BiMultiValMap<Token, InetAddress> tokenToEndpointMap, BiMap<InetAddress, UUID> endpointsMap, Topology topology) + private TokenMetadata(BiMultiValMap<Token, InetAddress> tokenToEndpointMap, BiMap<InetAddress, UUID> endpointsMap, Topology topology, IPartitioner partitioner) { this.tokenToEndpointMap = tokenToEndpointMap; this.topology = topology; + this.partitioner = partitioner; endpointToHostIdMap = endpointsMap; sortedTokens = sortTokens(); } + /** + * To be used by tests only (via {@link StorageService.setPartitionerUnsafe}). + */ + @VisibleForTesting + public TokenMetadata cloneWithNewPartitioner(IPartitioner newPartitioner) + { + return new TokenMetadata(tokenToEndpointMap, endpointToHostIdMap, topology, newPartitioner); + } + private ArrayList<Token> sortTokens() { return new ArrayList<Token>(tokenToEndpointMap.keySet()); @@ -521,7 +535,8 @@ public class TokenMetadata { return new TokenMetadata(SortedBiMultiValMap.<Token, InetAddress>create(tokenToEndpointMap, null, inetaddressCmp), HashBiMap.create(endpointToHostIdMap), - new Topology(topology)); + new Topology(topology), + partitioner); } finally { @@ -880,7 +895,7 @@ public class TokenMetadata public static Iterator<Token> ringIterator(final ArrayList<Token> ring, Token start, boolean includeMin) { if (ring.isEmpty()) - return includeMin ? Iterators.singletonIterator(StorageService.getPartitioner().getMinimumToken()) + return includeMin ? Iterators.singletonIterator(start.getPartitioner().getMinimumToken()) : Iterators.<Token>emptyIterator(); final boolean insertMin = includeMin && !ring.get(0).isMinimum(); @@ -896,7 +911,7 @@ public class TokenMetadata { // return minimum for index == -1 if (j == -1) - return StorageService.getPartitioner().getMinimumToken(); + return start.getPartitioner().getMinimumToken(); // return ring token for other indexes return ring.get(j); } @@ -1093,6 +1108,11 @@ public class TokenMetadata cachedTokenMap.set(null); } + public DecoratedKey decorateKey(ByteBuffer key) + { + return partitioner.decorateKey(key); + } + /** * Tracks the assignment of racks and endpoints in each datacenter for all the "normal" endpoints * in this TokenMetadata. This allows faster calculation of endpoints in NetworkTopologyStrategy. http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/net/MessagingService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/net/MessagingService.java b/src/java/org/apache/cassandra/net/MessagingService.java index 4f15da2..422fdb3 100644 --- a/src/java/org/apache/cassandra/net/MessagingService.java +++ b/src/java/org/apache/cassandra/net/MessagingService.java @@ -1108,12 +1108,14 @@ public final class MessagingService implements MessagingServiceMBean public static IPartitioner globalPartitioner() { - return DatabaseDescriptor.getPartitioner(); + return StorageService.instance.getTokenMetadata().partitioner; } public static void validatePartitioner(AbstractBounds<?> bounds) { if (globalPartitioner() != bounds.left.getPartitioner()) - throw new AssertionError(); + throw new AssertionError(String.format("Partitioner in bounds serialization. Expected %s, was %s.", + globalPartitioner().getClass().getName(), + bounds.left.getPartitioner().getClass().getName())); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/repair/RepairMessageVerbHandler.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/repair/RepairMessageVerbHandler.java b/src/java/org/apache/cassandra/repair/RepairMessageVerbHandler.java index c0855c4..d765ae6 100644 --- a/src/java/org/apache/cassandra/repair/RepairMessageVerbHandler.java +++ b/src/java/org/apache/cassandra/repair/RepairMessageVerbHandler.java @@ -85,8 +85,8 @@ public class RepairMessageVerbHandler implements IVerbHandler<RepairMessage> public boolean apply(SSTableReader sstable) { return sstable != null && - !(sstable.partitioner instanceof LocalPartitioner) && // exclude SSTables from 2i - new Bounds<>(sstable.first.getToken(), sstable.last.getToken()).intersects(Collections.singleton(repairingRange)); + !sstable.metadata.isIndex() && // exclude SSTables from 2i + new Bounds<>(sstable.first.getToken(), sstable.last.getToken()).intersects(Collections.singleton(repairingRange)); } }, true); //ephemeral snapshot, if repair fails, it will be cleaned next startup http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java b/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java index 1c21e41..41da481 100644 --- a/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java +++ b/src/java/org/apache/cassandra/schema/LegacySchemaMigrator.java @@ -38,7 +38,6 @@ import org.apache.cassandra.db.rows.RowIterator; import org.apache.cassandra.db.rows.UnfilteredRowIterators; import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.io.compress.CompressionParameters; -import org.apache.cassandra.service.StorageService; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.concurrent.OpOrder; @@ -307,9 +306,16 @@ public final class LegacySchemaMigrator defaultValidator); } - // The legacy schema did not have views, so we know that we are not loading a materialized view - boolean isMaterializedView = false; - CFMetaData cfm = CFMetaData.create(ksName, cfName, cfId, isDense, isCompound, isSuper, isCounter, isMaterializedView, columnDefs); + CFMetaData cfm = CFMetaData.create(ksName, + cfName, + cfId, + isDense, + isCompound, + isSuper, + isCounter, + false, // legacy schema did not contain views + columnDefs, + DatabaseDescriptor.getPartitioner()); cfm.readRepairChance(tableRow.getDouble("read_repair_chance")); cfm.dcLocalReadRepairChance(tableRow.getDouble("local_read_repair_chance")); @@ -579,7 +585,7 @@ public final class LegacySchemaMigrator ClusteringComparator comparator = store.metadata.comparator; Slices slices = Slices.with(comparator, Slice.make(comparator, typeName)); int nowInSec = FBUtilities.nowInSeconds(); - DecoratedKey key = StorageService.getPartitioner().decorateKey(AsciiType.instance.fromString(keyspaceName)); + DecoratedKey key = store.metadata.decorateKey(AsciiType.instance.fromString(keyspaceName)); SinglePartitionReadCommand command = SinglePartitionSliceCommand.create(store.metadata, nowInSec, key, slices); try (OpOrder.Group op = store.readOrdering.start(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java index 1f1a3dd..b33ba76 100644 --- a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java +++ b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java @@ -38,7 +38,6 @@ import org.apache.cassandra.cql3.QueryProcessor; import org.apache.cassandra.cql3.UntypedResultSet; import org.apache.cassandra.cql3.functions.*; import org.apache.cassandra.cql3.statements.CFPropDefs; -import org.apache.cassandra.db.ClusteringComparator; import org.apache.cassandra.db.*; import org.apache.cassandra.db.compaction.AbstractCompactionStrategy; import org.apache.cassandra.db.marshal.*; @@ -47,7 +46,6 @@ import org.apache.cassandra.db.rows.*; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.io.compress.CompressionParameters; -import org.apache.cassandra.service.StorageService; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.concurrent.OpOrder; @@ -397,19 +395,24 @@ public final class SchemaKeyspace return AsciiType.instance.fromString(ksName); } - private static DecoratedKey getSchemaKSDecoratedKey(String ksName) + private static <T> T readSchemaPartitionForKeyspaceAndApply(String schemaTableName, String keyspaceName, Function<RowIterator, T> fct) { - return StorageService.getPartitioner().decorateKey(getSchemaKSKey(ksName)); + return readSchemaPartitionForKeyspaceAndApply(schemaTableName, getSchemaKSKey(keyspaceName), fct); } - private static <T> T readSchemaPartitionForKeyspaceAndApply(String schemaTableName, String keyspaceName, Function<RowIterator, T> fct) + private static <T> T readSchemaPartitionForKeyspaceAndApply(String schemaTableName, ByteBuffer keyspaceKey, Function<RowIterator, T> fct) { - return readSchemaPartitionForKeyspaceAndApply(schemaTableName, getSchemaKSDecoratedKey(keyspaceName), fct); + ColumnFamilyStore store = getSchemaCFS(schemaTableName); + return readSchemaPartitionForKeyspaceAndApply(store, store.decorateKey(keyspaceKey), fct); } private static <T> T readSchemaPartitionForKeyspaceAndApply(String schemaTableName, DecoratedKey keyspaceKey, Function<RowIterator, T> fct) { - ColumnFamilyStore store = getSchemaCFS(schemaTableName); + return readSchemaPartitionForKeyspaceAndApply(getSchemaCFS(schemaTableName), keyspaceKey, fct); + } + + private static <T> T readSchemaPartitionForKeyspaceAndApply(ColumnFamilyStore store, DecoratedKey keyspaceKey, Function<RowIterator, T> fct) + { int nowInSec = FBUtilities.nowInSeconds(); try (OpOrder.Group op = store.readOrdering.start(); RowIterator partition = UnfilteredRowIterators.filter(SinglePartitionReadCommand.fullPartitionRead(store.metadata, nowInSec, keyspaceKey) @@ -427,7 +430,7 @@ public final class SchemaKeyspace Slices slices = Slices.with(comparator, Slice.make(comparator, tableName)); int nowInSec = FBUtilities.nowInSeconds(); try (OpOrder.Group op = store.readOrdering.start(); - RowIterator partition = UnfilteredRowIterators.filter(SinglePartitionSliceCommand.create(store.metadata, nowInSec, getSchemaKSDecoratedKey(keyspaceName), slices) + RowIterator partition = UnfilteredRowIterators.filter(SinglePartitionSliceCommand.create(store.metadata, nowInSec, getSchemaKSKey(keyspaceName), slices) .queryMemtableAndDisk(store, op), nowInSec)) { return fct.apply(partition); @@ -698,7 +701,8 @@ public final class SchemaKeyspace public static Mutation makeDropKeyspaceMutation(KeyspaceMetadata keyspace, long timestamp) { int nowInSec = FBUtilities.nowInSeconds(); - Mutation mutation = new Mutation(NAME, getSchemaKSDecoratedKey(keyspace.name)); + Mutation mutation = new Mutation(NAME, Keyspaces.decorateKey(getSchemaKSKey(keyspace.name))); + for (CFMetaData schemaTable : All) mutation.add(PartitionUpdate.fullPartitionDelete(schemaTable, mutation.key(), timestamp, nowInSec)); @@ -1085,7 +1089,16 @@ public final class SchemaKeyspace boolean isCompound = flags.contains(CFMetaData.Flag.COMPOUND); boolean isMaterializedView = flags.contains(CFMetaData.Flag.MATERIALIZEDVIEW); - CFMetaData cfm = CFMetaData.create(keyspace, table, id, isDense, isCompound, isSuper, isCounter, isMaterializedView, columns); + CFMetaData cfm = CFMetaData.create(keyspace, + table, + id, + isDense, + isCompound, + isSuper, + isCounter, + isMaterializedView, + columns, + DatabaseDescriptor.getPartitioner()); Map<String, String> compaction = new HashMap<>(row.getTextMap("compaction")); Class<? extends AbstractCompactionStrategy> compactionStrategyClass = http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/service/CacheService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/CacheService.java b/src/java/org/apache/cassandra/service/CacheService.java index b1554e3..253e9e4 100644 --- a/src/java/org/apache/cassandra/service/CacheService.java +++ b/src/java/org/apache/cassandra/service/CacheService.java @@ -372,7 +372,7 @@ public class CacheService implements CacheServiceMBean { public Pair<CounterCacheKey, ClockAndCount> call() throws Exception { - DecoratedKey key = cfs.partitioner.decorateKey(partitionKey); + DecoratedKey key = cfs.decorateKey(partitionKey); LegacyLayout.LegacyCellName name = LegacyLayout.decodeCellName(cfs.metadata, cellName); ColumnDefinition column = name.column; CellPath path = name.collectionElement == null ? null : CellPath.create(name.collectionElement); @@ -427,7 +427,7 @@ public class CacheService implements CacheServiceMBean { public Pair<RowCacheKey, IRowCacheEntry> call() throws Exception { - DecoratedKey key = cfs.partitioner.decorateKey(buffer); + DecoratedKey key = cfs.decorateKey(buffer); int nowInSec = FBUtilities.nowInSeconds(); try (OpOrder.Group op = cfs.readOrdering.start(); UnfilteredRowIterator iter = SinglePartitionReadCommand.fullPartitionRead(cfs.metadata, nowInSec, key).queryMemtableAndDisk(cfs, op)) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/service/StorageProxy.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java index be11c77..51aa48f 100644 --- a/src/java/org/apache/cassandra/service/StorageProxy.java +++ b/src/java/org/apache/cassandra/service/StorageProxy.java @@ -643,7 +643,7 @@ public class StorageProxy implements StorageProxyMBean try { - Token baseToken = StorageService.getPartitioner().getToken(dataKey); + Token baseToken = StorageService.instance.getTokenMetadata().partitioner.getToken(dataKey); ConsistencyLevel consistencyLevel = ConsistencyLevel.ONE; @@ -862,8 +862,11 @@ public class StorageProxy implements StorageProxyMBean Keyspace.open(SystemKeyspace.NAME), null, WriteType.SIMPLE); - Mutation mutation = new Mutation(SystemKeyspace.NAME, StorageService.getPartitioner().decorateKey(UUIDType.instance.decompose(uuid))); - mutation.add(PartitionUpdate.fullPartitionDelete(SystemKeyspace.Batchlog, mutation.key(), FBUtilities.timestampMicros(), FBUtilities.nowInSeconds())); + Mutation mutation = new Mutation( + PartitionUpdate.fullPartitionDelete(SystemKeyspace.Batchlog, + UUIDType.instance.decompose(uuid), + FBUtilities.timestampMicros(), + FBUtilities.nowInSeconds())); MessageOut<Mutation> message = mutation.createMessage(MessagingService.Verb.BATCHLOG_MUTATION); for (InetAddress target : endpoints) { @@ -1686,7 +1689,7 @@ public class StorageProxy implements StorageProxyMBean public static List<InetAddress> getLiveSortedEndpoints(Keyspace keyspace, ByteBuffer key) { - return getLiveSortedEndpoints(keyspace, StorageService.getPartitioner().decorateKey(key)); + return getLiveSortedEndpoints(keyspace, StorageService.instance.getTokenMetadata().decorateKey(key)); } public static List<InetAddress> getLiveSortedEndpoints(Keyspace keyspace, RingPosition pos) http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/service/StorageService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index 5049337..b51dd3a 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -78,6 +78,7 @@ import org.apache.cassandra.dht.RangeStreamer; import org.apache.cassandra.dht.RingPosition; import org.apache.cassandra.dht.StreamStateStore; import org.apache.cassandra.dht.Token; +import org.apache.cassandra.dht.Token.TokenFactory; import org.apache.cassandra.exceptions.AlreadyExistsException; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.InvalidRequestException; @@ -188,7 +189,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE /* This abstraction maintains the token/endpoint metadata information */ private TokenMetadata tokenMetadata = new TokenMetadata(); - public volatile VersionedValue.VersionedValueFactory valueFactory = new VersionedValue.VersionedValueFactory(getPartitioner()); + public volatile VersionedValue.VersionedValueFactory valueFactory = new VersionedValue.VersionedValueFactory(tokenMetadata.partitioner); private Thread drainOnShutdown = null; private boolean inShutdownHook = false; @@ -200,11 +201,6 @@ public class StorageService extends NotificationBroadcasterSupport implements IE return inShutdownHook; } - public static IPartitioner getPartitioner() - { - return DatabaseDescriptor.getPartitioner(); - } - public Collection<Range<Token>> getLocalRanges(String keyspaceName) { return getRangesForEndpoint(keyspaceName, FBUtilities.getBroadcastAddress()); @@ -510,7 +506,10 @@ public class StorageService extends NotificationBroadcasterSupport implements IE { if (Gossiper.instance.getEndpointStateForEndpoint(DatabaseDescriptor.getReplaceAddress()).getApplicationState(ApplicationState.TOKENS) == null) throw new RuntimeException("Could not find tokens for " + DatabaseDescriptor.getReplaceAddress() + " to replace"); - Collection<Token> tokens = TokenSerializer.deserialize(getPartitioner(), new DataInputStream(new ByteArrayInputStream(getApplicationStateValue(DatabaseDescriptor.getReplaceAddress(), ApplicationState.TOKENS)))); + Collection<Token> tokens = TokenSerializer.deserialize( + tokenMetadata.partitioner, + new DataInputStream(new ByteArrayInputStream(getApplicationStateValue(DatabaseDescriptor.getReplaceAddress(), + ApplicationState.TOKENS)))); SystemKeyspace.setLocalHostId(hostId); // use the replacee's host Id as our own so we receive hints, etc Gossiper.instance.resetEndpointStateMap(); // clean up since we have what we need @@ -947,7 +946,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE { bootstrapTokens = new ArrayList<>(initialTokens.size()); for (String token : initialTokens) - bootstrapTokens.add(getPartitioner().getTokenFactory().fromString(token)); + bootstrapTokens.add(getTokenFactory().fromString(token)); logger.info("Saved tokens not found. Using configuration value: {}", bootstrapTokens); } } @@ -1509,7 +1508,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE throw new InvalidRequestException("There is no ring for the keyspace: " + keyspace); List<TokenRange> ranges = new ArrayList<>(); - Token.TokenFactory tf = getPartitioner().getTokenFactory(); + Token.TokenFactory tf = getTokenFactory(); Map<Range<Token>, List<InetAddress>> rangeToAddressMap = includeOnlyLocalDC @@ -1818,7 +1817,9 @@ public class StorageService extends NotificationBroadcasterSupport implements IE { try { - return TokenSerializer.deserialize(getPartitioner(), new DataInputStream(new ByteArrayInputStream(getApplicationStateValue(endpoint, ApplicationState.TOKENS)))); + return TokenSerializer.deserialize( + tokenMetadata.partitioner, + new DataInputStream(new ByteArrayInputStream(getApplicationStateValue(endpoint, ApplicationState.TOKENS)))); } catch (IOException e) { @@ -2049,7 +2050,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE private void handleStateMoving(InetAddress endpoint, String[] pieces) { assert pieces.length >= 2; - Token token = getPartitioner().getTokenFactory().fromString(pieces[1]); + Token token = getTokenFactory().fromString(pieces[1]); if (logger.isDebugEnabled()) logger.debug("Node {} state moving, new token {}", endpoint, token); @@ -2790,7 +2791,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE public int repairAsync(String keyspace, Map<String, String> repairSpec) { - RepairOption option = RepairOption.parse(repairSpec, getPartitioner()); + RepairOption option = RepairOption.parse(repairSpec, tokenMetadata.partitioner); // if ranges are not specified if (option.getRanges().isEmpty()) { @@ -2974,8 +2975,8 @@ public class StorageService extends NotificationBroadcasterSupport implements IE @VisibleForTesting Collection<Range<Token>> createRepairRangeFrom(String beginToken, String endToken) { - Token parsedBeginToken = getPartitioner().getTokenFactory().fromString(beginToken); - Token parsedEndToken = getPartitioner().getTokenFactory().fromString(endToken); + Token parsedBeginToken = getTokenFactory().fromString(beginToken); + Token parsedEndToken = getTokenFactory().fromString(endToken); // Break up given range to match ring layout in TokenMetadata ArrayList<Range<Token>> repairingRange = new ArrayList<>(); @@ -3002,6 +3003,11 @@ public class StorageService extends NotificationBroadcasterSupport implements IE return repairingRange; } + public TokenFactory getTokenFactory() + { + return tokenMetadata.partitioner.getTokenFactory(); + } + public int forceRepairAsync(String keyspace, RepairOption options) { if (options.getRanges().isEmpty() || Keyspace.open(keyspace).getReplicationStrategy().getReplicationFactor() < 2) @@ -3144,12 +3150,12 @@ public class StorageService extends NotificationBroadcasterSupport implements IE if (cfMetaData == null) throw new IllegalArgumentException("Unknown table '" + cf + "' in keyspace '" + keyspaceName + "'"); - return getNaturalEndpoints(keyspaceName, getPartitioner().getToken(cfMetaData.getKeyValidator().fromString(key))); + return getNaturalEndpoints(keyspaceName, tokenMetadata.partitioner.getToken(cfMetaData.getKeyValidator().fromString(key))); } public List<InetAddress> getNaturalEndpoints(String keyspaceName, ByteBuffer key) { - return getNaturalEndpoints(keyspaceName, getPartitioner().getToken(key)); + return getNaturalEndpoints(keyspaceName, tokenMetadata.partitioner.getToken(key)); } /** @@ -3175,7 +3181,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE */ public List<InetAddress> getLiveNaturalEndpoints(Keyspace keyspace, ByteBuffer key) { - return getLiveNaturalEndpoints(keyspace, getPartitioner().decorateKey(key)); + return getLiveNaturalEndpoints(keyspace, tokenMetadata.decorateKey(key)); } public List<InetAddress> getLiveNaturalEndpoints(Keyspace keyspace, RingPosition pos) @@ -3438,7 +3444,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE InetAddress preferred = SystemKeyspace.getPreferredIP(hintsDestinationHost); // stream all hints -- range list will be a singleton of "the entire ring" - Token token = StorageService.getPartitioner().getMinimumToken(); + Token token = tokenMetadata.partitioner.getMinimumToken(); List<Range<Token>> ranges = Collections.singletonList(new Range<>(token, token)); return new StreamPlan("Hints").transferRanges(hintsDestinationHost, @@ -3454,13 +3460,13 @@ public class StorageService extends NotificationBroadcasterSupport implements IE { try { - getPartitioner().getTokenFactory().validate(newToken); + getTokenFactory().validate(newToken); } catch (ConfigurationException e) { throw new IOException(e.getMessage()); } - move(getPartitioner().getTokenFactory().fromString(newToken)); + move(getTokenFactory().fromString(newToken)); } /** @@ -3915,9 +3921,9 @@ public class StorageService extends NotificationBroadcasterSupport implements IE @VisibleForTesting public IPartitioner setPartitionerUnsafe(IPartitioner newPartitioner) { - IPartitioner oldPartitioner = DatabaseDescriptor.getPartitioner(); - DatabaseDescriptor.setPartitioner(newPartitioner); - valueFactory = new VersionedValue.VersionedValueFactory(getPartitioner()); + IPartitioner oldPartitioner = DatabaseDescriptor.setPartitionerUnsafe(newPartitioner); + tokenMetadata = tokenMetadata.cloneWithNewPartitioner(newPartitioner); + valueFactory = new VersionedValue.VersionedValueFactory(newPartitioner); return oldPartitioner; } @@ -3944,7 +3950,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE { List<Token> sortedTokens = tokenMetadata.sortedTokens(); // describeOwnership returns tokens in an unspecified order, let's re-order them - Map<Token, Float> tokenMap = new TreeMap<Token, Float>(getPartitioner().describeOwnership(sortedTokens)); + Map<Token, Float> tokenMap = new TreeMap<Token, Float>(tokenMetadata.partitioner.describeOwnership(sortedTokens)); Map<InetAddress, Float> nodeMap = new LinkedHashMap<>(); for (Map.Entry<Token, Float> entry : tokenMap.entrySet()) { @@ -4004,7 +4010,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE for (Collection<InetAddress> endpoints : sortedDcsToEndpoints.values()) endpointsGroupedByDc.add(endpoints); - Map<Token, Float> tokenOwnership = getPartitioner().describeOwnership(tokenMetadata.sortedTokens()); + Map<Token, Float> tokenOwnership = tokenMetadata.partitioner.describeOwnership(tokenMetadata.sortedTokens()); LinkedHashMap<InetAddress, Float> finalOwnership = Maps.newLinkedHashMap(); // calculate ownership per dc @@ -4211,7 +4217,6 @@ public class StorageService extends NotificationBroadcasterSupport implements IE this.keyspace = keyspace; try { - setPartitioner(DatabaseDescriptor.getPartitioner()); for (Map.Entry<Range<Token>, List<InetAddress>> entry : StorageService.instance.getRangeToAddressMap(keyspace).entrySet()) { Range<Token> range = entry.getKey(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/service/pager/RangeNamesQueryPager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/pager/RangeNamesQueryPager.java b/src/java/org/apache/cassandra/service/pager/RangeNamesQueryPager.java index fffb4e1..4171694 100644 --- a/src/java/org/apache/cassandra/service/pager/RangeNamesQueryPager.java +++ b/src/java/org/apache/cassandra/service/pager/RangeNamesQueryPager.java @@ -19,10 +19,8 @@ package org.apache.cassandra.service.pager; import org.apache.cassandra.db.*; import org.apache.cassandra.db.rows.*; -import org.apache.cassandra.db.partitions.*; import org.apache.cassandra.dht.*; import org.apache.cassandra.exceptions.RequestExecutionException; -import org.apache.cassandra.service.StorageService; /** * Pages a RangeSliceCommand whose predicate is a name query. @@ -44,7 +42,7 @@ public class RangeNamesQueryPager extends AbstractQueryPager if (state != null) { - lastReturnedKey = StorageService.getPartitioner().decorateKey(state.partitionKey); + lastReturnedKey = command.metadata().decorateKey(state.partitionKey); restoreState(lastReturnedKey, state.remaining, state.remainingInPartition); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java b/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java index 6c08be0..0139d9c 100644 --- a/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java +++ b/src/java/org/apache/cassandra/service/pager/RangeSliceQueryPager.java @@ -22,7 +22,6 @@ import org.apache.cassandra.db.rows.*; import org.apache.cassandra.db.filter.*; import org.apache.cassandra.dht.*; import org.apache.cassandra.exceptions.RequestExecutionException; -import org.apache.cassandra.service.StorageService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,7 +46,7 @@ public class RangeSliceQueryPager extends AbstractQueryPager if (state != null) { - lastReturnedKey = StorageService.getPartitioner().decorateKey(state.partitionKey); + lastReturnedKey = command.metadata().decorateKey(state.partitionKey); lastReturnedClustering = LegacyLayout.decodeClustering(command.metadata(), state.cellName); restoreState(lastReturnedKey, state.remaining, state.remainingInPartition); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/service/paxos/Commit.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/paxos/Commit.java b/src/java/org/apache/cassandra/service/paxos/Commit.java index 579c315..95bd464 100644 --- a/src/java/org/apache/cassandra/service/paxos/Commit.java +++ b/src/java/org/apache/cassandra/service/paxos/Commit.java @@ -22,6 +22,7 @@ package org.apache.cassandra.service.paxos; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.UUID; import com.google.common.base.Objects; @@ -122,9 +123,9 @@ public class Commit public Commit deserialize(DataInputPlus in, int version) throws IOException { - DecoratedKey key = null; + ByteBuffer key = null; if (version < MessagingService.VERSION_30) - key = StorageService.getPartitioner().decorateKey(ByteBufferUtil.readWithShortLength(in)); + key = ByteBufferUtil.readWithShortLength(in); UUID ballot = UUIDSerializer.serializer.deserialize(in, version); PartitionUpdate update = PartitionUpdate.serializer.deserialize(in, version, SerializationHelper.Flag.LOCAL, key); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/streaming/StreamReader.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/streaming/StreamReader.java b/src/java/org/apache/cassandra/streaming/StreamReader.java index 61656b3..a098786 100644 --- a/src/java/org/apache/cassandra/streaming/StreamReader.java +++ b/src/java/org/apache/cassandra/streaming/StreamReader.java @@ -193,7 +193,7 @@ public class StreamReader public DecoratedKey newPartition() throws IOException { - key = StorageService.getPartitioner().decorateKey(ByteBufferUtil.readWithShortLength(in)); + key = metadata.decorateKey(ByteBufferUtil.readWithShortLength(in)); partitionLevelDeletion = DeletionTime.serializer.deserialize(in); iterator = SSTableSimpleIterator.create(metadata, in, header, helper, partitionLevelDeletion); staticRow = iterator.readStaticRow(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/thrift/CassandraServer.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java index 0674c62..a7b8b07 100644 --- a/src/java/org/apache/cassandra/thrift/CassandraServer.java +++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java @@ -549,7 +549,7 @@ public class CassandraServer implements Cassandra.Iface for (ByteBuffer key: keys) { ThriftValidation.validateKey(metadata, key); - DecoratedKey dk = StorageService.getPartitioner().decorateKey(key); + DecoratedKey dk = metadata.decorateKey(key); commands.add(SinglePartitionReadCommand.create(true, metadata, nowInSec, columnFilter, RowFilter.NONE, limits, dk, filter)); } @@ -617,7 +617,7 @@ public class CassandraServer implements Cassandra.Iface filter = new ClusteringIndexNamesFilter(FBUtilities.singleton(cellname.clustering, metadata.comparator), false); } - DecoratedKey dk = StorageService.getPartitioner().decorateKey(key); + DecoratedKey dk = metadata.decorateKey(key); SinglePartitionReadCommand<?> command = SinglePartitionReadCommand.create(true, metadata, FBUtilities.nowInSeconds(), columns, RowFilter.NONE, DataLimits.NONE, dk, filter); try (RowIterator result = PartitionIterators.getOnlyElement(read(Arrays.asList(command), consistencyLevel, cState), command)) @@ -694,22 +694,23 @@ public class CassandraServer implements Cassandra.Iface ColumnFilter columnFilter; ClusteringIndexFilter filter; - if (cfs.metadata.isSuper() && !column_parent.isSetSuper_column()) + CFMetaData metadata = cfs.metadata; + if (metadata.isSuper() && !column_parent.isSetSuper_column()) { // If we count on a super column table without having set the super column name, we're in fact interested by the count of super columns - columnFilter = ColumnFilter.all(cfs.metadata); - filter = new ClusteringIndexSliceFilter(makeSlices(cfs.metadata, sliceRange), sliceRange.reversed); + columnFilter = ColumnFilter.all(metadata); + filter = new ClusteringIndexSliceFilter(makeSlices(metadata, sliceRange), sliceRange.reversed); } else { - columnFilter = makeColumnFilter(cfs.metadata, column_parent, sliceRange); - filter = toInternalFilter(cfs.metadata, column_parent, sliceRange); + columnFilter = makeColumnFilter(metadata, column_parent, sliceRange); + filter = toInternalFilter(metadata, column_parent, sliceRange); } - DataLimits limits = getLimits(1, cfs.metadata.isSuper() && !column_parent.isSetSuper_column(), predicate); - DecoratedKey dk = StorageService.getPartitioner().decorateKey(key); + DataLimits limits = getLimits(1, metadata.isSuper() && !column_parent.isSetSuper_column(), predicate); + DecoratedKey dk = metadata.decorateKey(key); - return QueryPagers.countPaged(cfs.metadata, + return QueryPagers.countPaged(metadata, dk, columnFilter, filter, @@ -821,11 +822,9 @@ public class CassandraServer implements Cassandra.Iface org.apache.cassandra.db.Mutation mutation; try { - DecoratedKey dk = StorageService.getPartitioner().decorateKey(key); - LegacyLayout.LegacyCellName name = LegacyLayout.decodeCellName(metadata, column_parent.super_column, column.name); Cell cell = cellFromColumn(metadata, name, column); - PartitionUpdate update = PartitionUpdate.singleRowUpdate(metadata, dk, BTreeBackedRow.singleCellRow(name.clustering, cell)); + PartitionUpdate update = PartitionUpdate.singleRowUpdate(metadata, key, BTreeBackedRow.singleCellRow(name.clustering, cell)); mutation = new org.apache.cassandra.db.Mutation(update); } @@ -913,7 +912,7 @@ public class CassandraServer implements Cassandra.Iface for (Column column : updates) ThriftValidation.validateColumnData(metadata, null, column); - DecoratedKey dk = StorageService.getPartitioner().decorateKey(key); + DecoratedKey dk = metadata.decorateKey(key); int nowInSec = FBUtilities.nowInSeconds(); PartitionUpdate partitionUpdates = PartitionUpdate.fromIterator(LegacyLayout.toRowIterator(metadata, dk, toLegacyCells(metadata, updates, nowInSec).iterator(), nowInSec)); @@ -1080,7 +1079,6 @@ public class CassandraServer implements Cassandra.Iface for (Map.Entry<ByteBuffer, Map<String, List<Mutation>>> mutationEntry: mutation_map.entrySet()) { ByteBuffer key = mutationEntry.getKey(); - DecoratedKey dk = StorageService.getPartitioner().decorateKey(key); // We need to separate mutation for standard cf and counter cf (that will be encapsulated in a // CounterMutation) because it doesn't follow the same code path @@ -1120,6 +1118,7 @@ public class CassandraServer implements Cassandra.Iface } sortAndMerge(metadata, cells, nowInSec); + DecoratedKey dk = metadata.decorateKey(key); PartitionUpdate update = PartitionUpdate.fromIterator(LegacyLayout.toUnfilteredRowIterator(metadata, dk, delInfo, cells.iterator())); org.apache.cassandra.db.Mutation mutation; @@ -1320,7 +1319,7 @@ public class CassandraServer implements Cassandra.Iface if (isCommutativeOp) ThriftConversion.fromThrift(consistency_level).validateCounterForWrite(metadata); - DecoratedKey dk = StorageService.getPartitioner().decorateKey(key); + DecoratedKey dk = metadata.decorateKey(key); int nowInSec = FBUtilities.nowInSeconds(); PartitionUpdate update; @@ -1473,7 +1472,7 @@ public class CassandraServer implements Cassandra.Iface org.apache.cassandra.db.ConsistencyLevel consistencyLevel = ThriftConversion.fromThrift(consistency_level); consistencyLevel.validateForRead(keyspace); - IPartitioner p = StorageService.getPartitioner(); + IPartitioner p = metadata.partitioner; AbstractBounds<PartitionPosition> bounds; if (range.start_key == null) { @@ -1558,7 +1557,7 @@ public class CassandraServer implements Cassandra.Iface org.apache.cassandra.db.ConsistencyLevel consistencyLevel = ThriftConversion.fromThrift(consistency_level); consistencyLevel.validateForRead(keyspace); - IPartitioner p = StorageService.getPartitioner(); + IPartitioner p = metadata.partitioner; AbstractBounds<PartitionPosition> bounds; if (range.start_key == null) { @@ -1670,7 +1669,7 @@ public class CassandraServer implements Cassandra.Iface org.apache.cassandra.db.ConsistencyLevel consistencyLevel = ThriftConversion.fromThrift(consistency_level); consistencyLevel.validateForRead(keyspace); - IPartitioner p = StorageService.getPartitioner(); + IPartitioner p = metadata.partitioner; AbstractBounds<PartitionPosition> bounds = new Bounds<>(PartitionPosition.ForKey.get(index_clause.start_key, p), p.getMinimumToken().minKeyBound()); @@ -1767,7 +1766,7 @@ public class CassandraServer implements Cassandra.Iface public String describe_partitioner() throws TException { - return StorageService.getPartitioner().getClass().getName(); + return StorageService.instance.getTokenMetadata().getClass().getName(); } public String describe_snitch() throws TException @@ -1796,8 +1795,8 @@ public class CassandraServer implements Cassandra.Iface { try { - Token.TokenFactory tf = StorageService.getPartitioner().getTokenFactory(); - Range<Token> tr = new Range<>(tf.fromString(start_token), tf.fromString(end_token)); + Token.TokenFactory tf = StorageService.instance.getTokenFactory(); + Range<Token> tr = new Range<Token>(tf.fromString(start_token), tf.fromString(end_token)); List<Pair<Range<Token>, Long>> splits = StorageService.instance.getSplits(state().getKeyspace(), cfName, tr, keys_per_split); List<CfSplit> result = new ArrayList<>(splits.size()); @@ -2134,14 +2133,13 @@ public class CassandraServer implements Cassandra.Iface try { LegacyLayout.LegacyCellName name = LegacyLayout.decodeCellName(metadata, column_parent.super_column, column.name); - DecoratedKey dk = StorageService.getPartitioner().decorateKey(key); // See UpdateParameters.addCounter() for more details on this ByteBuffer value = CounterContext.instance().createLocal(column.value); CellPath path = name.collectionElement == null ? null : CellPath.create(name.collectionElement); Cell cell = BufferCell.live(metadata, name.column, FBUtilities.timestampMicros(), value, path); - PartitionUpdate update = PartitionUpdate.singleRowUpdate(metadata, dk, BTreeBackedRow.singleCellRow(name.clustering, cell)); + PartitionUpdate update = PartitionUpdate.singleRowUpdate(metadata, key, BTreeBackedRow.singleCellRow(name.clustering, cell)); org.apache.cassandra.db.Mutation mutation = new org.apache.cassandra.db.Mutation(update); doInsert(consistency_level, Arrays.asList(new CounterMutation(mutation, ThriftConversion.fromThrift(consistency_level)))); @@ -2412,7 +2410,7 @@ public class CassandraServer implements Cassandra.Iface DataLimits limits = getLimits(1, false, request.count); ThriftValidation.validateKey(metadata, request.key); - DecoratedKey dk = StorageService.getPartitioner().decorateKey(request.key); + DecoratedKey dk = metadata.decorateKey(request.key); SinglePartitionReadCommand<?> cmd = SinglePartitionReadCommand.create(true, metadata, FBUtilities.nowInSeconds(), columns, RowFilter.NONE, limits, dk, filter); return getSlice(Collections.<SinglePartitionReadCommand<?>>singletonList(cmd), false, http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/thrift/ThriftConversion.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/thrift/ThriftConversion.java b/src/java/org/apache/cassandra/thrift/ThriftConversion.java index 20d6eba..36383e0 100644 --- a/src/java/org/apache/cassandra/thrift/ThriftConversion.java +++ b/src/java/org/apache/cassandra/thrift/ThriftConversion.java @@ -24,10 +24,10 @@ import com.google.common.base.Strings; import com.google.common.collect.Maps; import org.apache.cassandra.io.compress.ICompressor; - import org.apache.cassandra.cache.CachingOptions; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.config.Schema; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.cql3.Operator; @@ -277,7 +277,7 @@ public class ThriftConversion // We do not allow Thrift materialized views, so we always set it to false boolean isMaterializedView = false; - CFMetaData newCFMD = CFMetaData.create(cf_def.keyspace, cf_def.name, cfId, isDense, isCompound, isSuper, isCounter, isMaterializedView, defs); + CFMetaData newCFMD = CFMetaData.create(cf_def.keyspace, cf_def.name, cfId, isDense, isCompound, isSuper, isCounter, isMaterializedView, defs, DatabaseDescriptor.getPartitioner()); if (cf_def.isSetGc_grace_seconds()) newCFMD.gcGraceSeconds(cf_def.gc_grace_seconds); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/thrift/ThriftValidation.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/thrift/ThriftValidation.java b/src/java/org/apache/cassandra/thrift/ThriftValidation.java index 13c55aa..054b466 100644 --- a/src/java/org/apache/cassandra/thrift/ThriftValidation.java +++ b/src/java/org/apache/cassandra/thrift/ThriftValidation.java @@ -31,7 +31,6 @@ import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.dht.IPartitioner; import org.apache.cassandra.dht.Token; import org.apache.cassandra.serializers.MarshalException; -import org.apache.cassandra.service.StorageService; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; @@ -510,7 +509,7 @@ public class ThriftValidation if (range.start_token != null && range.end_key != null) throw new org.apache.cassandra.exceptions.InvalidRequestException("start token + end key is not a supported key range"); - IPartitioner p = StorageService.getPartitioner(); + IPartitioner p = metadata.partitioner; if (range.start_key != null && range.end_key != null) { http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java b/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java index 5354b43..435c505 100644 --- a/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java +++ b/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java @@ -24,10 +24,12 @@ import com.datastax.driver.core.*; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.db.marshal.*; import org.apache.cassandra.dht.*; import org.apache.cassandra.dht.Token; +import org.apache.cassandra.dht.Token.TokenFactory; import org.apache.cassandra.io.sstable.SSTableLoader; import org.apache.cassandra.schema.SchemaKeyspace; @@ -64,11 +66,9 @@ public class NativeSSTableLoaderClient extends SSTableLoader.Client Metadata metadata = cluster.getMetadata(); - setPartitioner(metadata.getPartitioner()); - Set<TokenRange> tokenRanges = metadata.getTokenRanges(); - Token.TokenFactory tokenFactory = getPartitioner().getTokenFactory(); + TokenFactory tokenFactory = FBUtilities.newPartitioner(metadata.getPartitioner()).getTokenFactory(); for (TokenRange tokenRange : tokenRanges) { @@ -128,7 +128,16 @@ public class NativeSSTableLoaderClient extends SSTableLoader.Client for (Row colRow : session.execute(columnsQuery, keyspace, name)) defs.add(createDefinitionFromRow(colRow, keyspace, name)); - tables.put(name, CFMetaData.create(keyspace, name, id, isDense, isCompound, isSuper, isCounter, isMaterializedView, defs)); + tables.put(name, CFMetaData.create(keyspace, + name, + id, + isDense, + isCompound, + isSuper, + isCounter, + isMaterializedView, + defs, + DatabaseDescriptor.getPartitioner())); } return tables; http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java ---------------------------------------------------------------------- diff --git a/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java b/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java index b49055d..b48336f 100644 --- a/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java +++ b/test/long/org/apache/cassandra/io/sstable/CQLSSTableWriterLongTest.java @@ -83,7 +83,6 @@ public class CQLSSTableWriterLongTest CQLSSTableWriter writer = CQLSSTableWriter.builder() .inDirectory(dataDir) .forTable(schema) - .withPartitioner(StorageService.instance.getPartitioner()) .using(insert) .withBufferSizeInMB(1) .build(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/MockSchema.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/MockSchema.java b/test/unit/org/apache/cassandra/MockSchema.java index e052c0a..11892a8 100644 --- a/test/unit/org/apache/cassandra/MockSchema.java +++ b/test/unit/org/apache/cassandra/MockSchema.java @@ -117,11 +117,11 @@ public class MockSchema throw new RuntimeException(e); } } - SerializationHeader header = SerializationHeader.make(cfs.metadata, Collections.EMPTY_LIST); + SerializationHeader header = SerializationHeader.make(cfs.metadata, Collections.emptyList()); StatsMetadata metadata = (StatsMetadata) new MetadataCollector(cfs.metadata.comparator) - .finalizeMetadata(Murmur3Partitioner.instance.getClass().getCanonicalName(), 0.01f, -1, header) + .finalizeMetadata(cfs.metadata.partitioner.getClass().getCanonicalName(), 0.01f, -1, header) .get(MetadataType.STATS); - SSTableReader reader = SSTableReader.internalOpen(descriptor, components, cfs.metadata, Murmur3Partitioner.instance, + SSTableReader reader = SSTableReader.internalOpen(descriptor, components, cfs.metadata, segmentedFile.sharedCopy(), segmentedFile.sharedCopy(), indexSummary.sharedCopy(), new AlwaysPresentFilter(), 1L, metadata, SSTableReader.OpenReason.NORMAL, header); reader.first = reader.last = readerBounds(generation); @@ -139,7 +139,7 @@ public class MockSchema { String cfname = "mockcf" + (id.incrementAndGet()); CFMetaData metadata = newCFMetaData(ksname, cfname); - return new ColumnFamilyStore(ks, cfname, Murmur3Partitioner.instance, 0, metadata, new Directories(metadata), false, false); + return new ColumnFamilyStore(ks, cfname, 0, metadata, new Directories(metadata), false, false); } private static CFMetaData newCFMetaData(String ksname, String cfname) @@ -148,6 +148,7 @@ public class MockSchema .addPartitionKey("key", UTF8Type.instance) .addClusteringColumn("col", UTF8Type.instance) .addRegularColumn("value", UTF8Type.instance) + .withPartitioner(Murmur3Partitioner.instance) .build(); metadata.caching(CachingOptions.NONE); return metadata; http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/UpdateBuilder.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/UpdateBuilder.java b/test/unit/org/apache/cassandra/UpdateBuilder.java index b2d1d7f..3a5fbe6 100644 --- a/test/unit/org/apache/cassandra/UpdateBuilder.java +++ b/test/unit/org/apache/cassandra/UpdateBuilder.java @@ -114,6 +114,6 @@ public class UpdateBuilder return (DecoratedKey)partitionKey[0]; ByteBuffer key = CFMetaData.serializePartitionKey(metadata.getKeyValidatorAsClusteringComparator().make(partitionKey)); - return StorageService.getPartitioner().decorateKey(key); + return metadata.decorateKey(key); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/Util.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/Util.java b/test/unit/org/apache/cassandra/Util.java index e97af68..254c21c 100644 --- a/test/unit/org/apache/cassandra/Util.java +++ b/test/unit/org/apache/cassandra/Util.java @@ -32,24 +32,21 @@ import java.util.function.Supplier; import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.Iterators; + import org.apache.commons.lang3.StringUtils; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.ColumnIdentifier; -import org.apache.cassandra.cql3.Operator; import org.apache.cassandra.db.*; -import org.apache.cassandra.db.Slice.Bound; import org.apache.cassandra.db.rows.*; import org.apache.cassandra.db.compaction.AbstractCompactionTask; import org.apache.cassandra.db.compaction.CompactionManager; -import org.apache.cassandra.db.filter.*; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.partitions.*; import org.apache.cassandra.dht.*; import org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken; -import org.apache.cassandra.dht.Range; -import org.apache.cassandra.dht.Token; import org.apache.cassandra.gms.ApplicationState; import org.apache.cassandra.gms.Gossiper; import org.apache.cassandra.gms.VersionedValue; @@ -68,24 +65,29 @@ public class Util { private static List<UUID> hostIdPool = new ArrayList<UUID>(); + public static IPartitioner testPartitioner() + { + return DatabaseDescriptor.getPartitioner(); + } + public static DecoratedKey dk(String key) { - return StorageService.getPartitioner().decorateKey(ByteBufferUtil.bytes(key)); + return testPartitioner().decorateKey(ByteBufferUtil.bytes(key)); } - public static DecoratedKey dk(String key, AbstractType type) + public static DecoratedKey dk(String key, AbstractType<?> type) { - return StorageService.getPartitioner().decorateKey(type.fromString(key)); + return testPartitioner().decorateKey(type.fromString(key)); } public static DecoratedKey dk(ByteBuffer key) { - return StorageService.getPartitioner().decorateKey(key); + return testPartitioner().decorateKey(key); } public static PartitionPosition rp(String key) { - return rp(key, StorageService.getPartitioner()); + return rp(key, testPartitioner()); } public static PartitionPosition rp(String key, IPartitioner partitioner) @@ -107,7 +109,7 @@ public class Util public static Token token(String key) { - return StorageService.getPartitioner().getToken(ByteBufferUtil.bytes(key)); + return testPartitioner().getToken(ByteBufferUtil.bytes(key)); } public static Range<PartitionPosition> range(String left, String right) @@ -264,7 +266,7 @@ public class Util return (DecoratedKey)partitionKey[0]; ByteBuffer key = CFMetaData.serializePartitionKey(metadata.getKeyValidatorAsClusteringComparator().make(partitionKey)); - return StorageService.getPartitioner().decorateKey(key); + return metadata.decorateKey(key); } public static void assertEmptyUnfiltered(ReadCommand command) @@ -501,4 +503,27 @@ public class Util } assertEquals(expected, s.get()); } + + public static PartitionerSwitcher switchPartitioner(IPartitioner p) + { + return new PartitionerSwitcher(p); + } + + public static class PartitionerSwitcher implements AutoCloseable + { + final IPartitioner oldP; + final IPartitioner newP; + + public PartitionerSwitcher(IPartitioner partitioner) + { + newP = partitioner; + oldP = StorageService.instance.setPartitionerUnsafe(partitioner); + } + + public void close() + { + IPartitioner p = StorageService.instance.setPartitionerUnsafe(oldP); + assert p == newP; + } + } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/config/CFMetaDataTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/config/CFMetaDataTest.java b/test/unit/org/apache/cassandra/config/CFMetaDataTest.java index cf05fe8..ced6343 100644 --- a/test/unit/org/apache/cassandra/config/CFMetaDataTest.java +++ b/test/unit/org/apache/cassandra/config/CFMetaDataTest.java @@ -133,7 +133,6 @@ public class CFMetaDataTest private void checkInverses(CFMetaData cfm) throws Exception { - DecoratedKey k = StorageService.getPartitioner().decorateKey(ByteBufferUtil.bytes(cfm.ksName)); KeyspaceMetadata keyspace = Schema.instance.getKSMetaData(cfm.ksName); // Test thrift conversion http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/cql3/IndexQueryPagingTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/IndexQueryPagingTest.java b/test/unit/org/apache/cassandra/cql3/IndexQueryPagingTest.java index 45994c7..35d57d9 100644 --- a/test/unit/org/apache/cassandra/cql3/IndexQueryPagingTest.java +++ b/test/unit/org/apache/cassandra/cql3/IndexQueryPagingTest.java @@ -8,9 +8,6 @@ import com.datastax.driver.core.Statement; import static org.junit.Assert.assertEquals; -import org.apache.cassandra.config.DatabaseDescriptor; -import org.apache.cassandra.dht.Murmur3Partitioner; - public class IndexQueryPagingTest extends CQLTester { /* http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/cql3/selection/SelectionColumnMappingTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/selection/SelectionColumnMappingTest.java b/test/unit/org/apache/cassandra/cql3/selection/SelectionColumnMappingTest.java index d0df5bc..5831e4a 100644 --- a/test/unit/org/apache/cassandra/cql3/selection/SelectionColumnMappingTest.java +++ b/test/unit/org/apache/cassandra/cql3/selection/SelectionColumnMappingTest.java @@ -33,7 +33,7 @@ public class SelectionColumnMappingTest extends CQLTester @BeforeClass public static void setUpClass() { - DatabaseDescriptor.setPartitioner(ByteOrderedPartitioner.instance); + DatabaseDescriptor.setPartitionerUnsafe(ByteOrderedPartitioner.instance); } @Test http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java index c76d618..e07e421 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/FrozenCollectionsTest.java @@ -17,13 +17,13 @@ */ package org.apache.cassandra.cql3.validation.entities; -import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.db.marshal.*; import org.apache.cassandra.dht.ByteOrderedPartitioner; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.exceptions.InvalidRequestException; import org.apache.cassandra.exceptions.SyntaxException; +import org.apache.cassandra.service.StorageService; import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.BeforeClass; @@ -40,7 +40,8 @@ public class FrozenCollectionsTest extends CQLTester @BeforeClass public static void setUpClass() { - DatabaseDescriptor.setPartitioner(new ByteOrderedPartitioner()); + // Selecting partitioner for a table is not exposed on CREATE TABLE. + StorageService.instance.setPartitionerUnsafe(ByteOrderedPartitioner.instance); } @Test http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java index 7f8fa0b..7a0e8c8 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/JsonTest.java @@ -44,7 +44,7 @@ public class JsonTest extends CQLTester @BeforeClass public static void setUp() { - DatabaseDescriptor.setPartitioner(ByteOrderedPartitioner.instance); + DatabaseDescriptor.setPartitionerUnsafe(ByteOrderedPartitioner.instance); } @Test http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexOnMapEntriesTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexOnMapEntriesTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexOnMapEntriesTest.java index fb0d027..b69948f 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexOnMapEntriesTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/SecondaryIndexOnMapEntriesTest.java @@ -38,7 +38,7 @@ public class SecondaryIndexOnMapEntriesTest extends CQLTester @BeforeClass public static void setUp() { - DatabaseDescriptor.setPartitioner(ByteOrderedPartitioner.instance); + DatabaseDescriptor.setPartitionerUnsafe(ByteOrderedPartitioner.instance); } @Test http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java index 7274cd4..9430f6c 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java @@ -22,16 +22,17 @@ import java.util.UUID; import org.junit.BeforeClass; import org.junit.Test; -import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.cql3.CQLTester; import org.apache.cassandra.dht.ByteOrderedPartitioner; +import org.apache.cassandra.service.StorageService; public class UserTypesTest extends CQLTester { @BeforeClass public static void setUpClass() { - DatabaseDescriptor.setPartitioner(new ByteOrderedPartitioner()); + // Selecting partitioner for a table is not exposed on CREATE TABLE. + StorageService.instance.setPartitionerUnsafe(ByteOrderedPartitioner.instance); } @Test http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java index f1e2f55..cf028a1 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectLimitTest.java @@ -13,7 +13,7 @@ public class SelectLimitTest extends CQLTester @BeforeClass public static void setUp() { - DatabaseDescriptor.setPartitioner(ByteOrderedPartitioner.instance); + DatabaseDescriptor.setPartitionerUnsafe(ByteOrderedPartitioner.instance); } /** http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java index 5152ba9..8a2e1c9 100644 --- a/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java +++ b/test/unit/org/apache/cassandra/cql3/validation/operations/SelectOrderedPartitionerTest.java @@ -19,7 +19,7 @@ public class SelectOrderedPartitionerTest extends CQLTester @BeforeClass public static void setUp() { - DatabaseDescriptor.setPartitioner(ByteOrderedPartitioner.instance); + DatabaseDescriptor.setPartitionerUnsafe(ByteOrderedPartitioner.instance); } @Test http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/db/BatchlogManagerTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/db/BatchlogManagerTest.java b/test/unit/org/apache/cassandra/db/BatchlogManagerTest.java index c578c5e..5f1523e 100644 --- a/test/unit/org/apache/cassandra/db/BatchlogManagerTest.java +++ b/test/unit/org/apache/cassandra/db/BatchlogManagerTest.java @@ -89,14 +89,13 @@ public class BatchlogManagerTest .build() .applyUnsafe(); - DecoratedKey dk = StorageService.getPartitioner().decorateKey(ByteBufferUtil.bytes("1234")); + DecoratedKey dk = cfs.decorateKey(ByteBufferUtil.bytes("1234")); ArrayBackedPartition results = Util.getOnlyPartitionUnfiltered(Util.cmd(cfs, dk).build()); Iterator<Row> iter = results.iterator(); assert iter.hasNext(); - Mutation mutation = new Mutation(KEYSPACE1, dk); - mutation.add(PartitionUpdate.fullPartitionDelete(cfm, - mutation.key(), + Mutation mutation = new Mutation(PartitionUpdate.fullPartitionDelete(cfm, + dk, FBUtilities.timestampMicros(), FBUtilities.nowInSeconds())); mutation.applyUnsafe(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/0a08525a/test/unit/org/apache/cassandra/db/RowCacheTest.java ---------------------------------------------------------------------- diff --git a/test/unit/org/apache/cassandra/db/RowCacheTest.java b/test/unit/org/apache/cassandra/db/RowCacheTest.java index b53f62c..b89b792 100644 --- a/test/unit/org/apache/cassandra/db/RowCacheTest.java +++ b/test/unit/org/apache/cassandra/db/RowCacheTest.java @@ -88,7 +88,7 @@ public class RowCacheTest CacheService.instance.setRowCacheCapacityInMB(1); ByteBuffer key = ByteBufferUtil.bytes("rowcachekey"); - DecoratedKey dk = cachedStore.partitioner.decorateKey(key); + DecoratedKey dk = cachedStore.decorateKey(key); RowCacheKey rck = new RowCacheKey(cachedStore.metadata.cfId, dk); RowUpdateBuilder rub = new RowUpdateBuilder(cachedStore.metadata, System.currentTimeMillis(), key); @@ -255,7 +255,7 @@ public class RowCacheTest CacheService.instance.setRowCacheCapacityInMB(1); ByteBuffer key = ByteBufferUtil.bytes("rowcachekey"); - DecoratedKey dk = cachedStore.partitioner.decorateKey(key); + DecoratedKey dk = cachedStore.decorateKey(key); RowCacheKey rck = new RowCacheKey(cachedStore.metadata.cfId, dk); String values[] = new String[200]; for (int i = 0; i < 200; i++)