Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 498181087C for ; Tue, 29 Apr 2014 12:05:11 +0000 (UTC) Received: (qmail 58903 invoked by uid 500); 29 Apr 2014 12:05:09 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 58739 invoked by uid 500); 29 Apr 2014 12:05:08 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 58578 invoked by uid 99); 29 Apr 2014 12:05:07 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 29 Apr 2014 12:05:07 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 52A66995213; Tue, 29 Apr 2014 12:05:05 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: slebresne@apache.org To: commits@cassandra.apache.org Date: Tue, 29 Apr 2014 12:05:07 -0000 Message-Id: <641e56586c664beab93043be9c6b152e@git.apache.org> In-Reply-To: <897707e270d24178a2023536e010f68c@git.apache.org> References: <897707e270d24178a2023536e010f68c@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [5/7] Push more of memtable data off-heap http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/NativeDeletedCell.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/NativeDeletedCell.java b/src/java/org/apache/cassandra/db/NativeDeletedCell.java new file mode 100644 index 0000000..8bfc95b --- /dev/null +++ b/src/java/org/apache/cassandra/db/NativeDeletedCell.java @@ -0,0 +1,125 @@ +/* + * 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.db; + +import java.security.MessageDigest; + +import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.serializers.MarshalException; +import org.apache.cassandra.utils.FBUtilities; +import org.apache.cassandra.utils.ObjectSizes; +import org.apache.cassandra.utils.concurrent.OpOrder; +import org.apache.cassandra.utils.memory.AbstractAllocator; +import org.apache.cassandra.utils.memory.MemoryUtil; +import org.apache.cassandra.utils.memory.MemtableAllocator; +import org.apache.cassandra.utils.memory.NativeAllocator; + +public class NativeDeletedCell extends NativeCell implements DeletedCell +{ + private static final long SIZE = ObjectSizes.measure(new NativeDeletedCell()); + + private NativeDeletedCell() + {} + + public NativeDeletedCell(NativeAllocator allocator, OpOrder.Group writeOp, DeletedCell copyOf) + { + super(allocator, writeOp, copyOf); + } + + @Override + public Cell reconcile(Cell cell) + { + if (cell instanceof DeletedCell) + return super.reconcile(cell); + return cell.reconcile(this); + } + + @Override + public boolean isMarkedForDelete(long now) + { + return true; + } + + @Override + public long getMarkedForDeleteAt() + { + return timestamp(); + } + + @Override + public int getLocalDeletionTime() + { + int v = getInt(valueStartOffset()); + return MemoryUtil.INVERTED_ORDER ? Integer.reverseBytes(v) : v; + } + + @Override + public int serializationFlags() + { + return ColumnSerializer.DELETION_MASK; + } + + @Override + public void validateFields(CFMetaData metadata) throws MarshalException + { + validateName(metadata); + + if ((int) (internalSize() - valueStartOffset()) != 4) + throw new MarshalException("A tombstone value should be 4 bytes long"); + if (getLocalDeletionTime() < 0) + throw new MarshalException("The local deletion time should not be negative"); + } + + @Override + public void updateDigest(MessageDigest digest) + { + updateWithName(digest); + FBUtilities.updateWithLong(digest, timestamp()); + FBUtilities.updateWithByte(digest, serializationFlags()); + } + + @Override + public DeletedCell localCopy(CFMetaData metadata, AbstractAllocator allocator) + { + return new BufferDeletedCell(copy(metadata, allocator), allocator.clone(value()), timestamp()); + } + + @Override + public DeletedCell localCopy(CFMetaData metadata, MemtableAllocator allocator, OpOrder.Group opGroup) + { + return allocator.clone(this, metadata, opGroup); + } + + @Override + public boolean equals(Cell cell) + { + return timestamp() == cell.timestamp() && getLocalDeletionTime() == cell.getLocalDeletionTime() && name().equals(cell.name()); + } + + @Override + public long excessHeapSizeExcludingData() + { + return SIZE; + } + + @Override + public long unsharedHeapSize() + { + return SIZE; + } +} http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/NativeExpiringCell.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/NativeExpiringCell.java b/src/java/org/apache/cassandra/db/NativeExpiringCell.java new file mode 100644 index 0000000..5ac0e81 --- /dev/null +++ b/src/java/org/apache/cassandra/db/NativeExpiringCell.java @@ -0,0 +1,173 @@ +/* + * 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.db; + +import java.security.MessageDigest; + +import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.db.composites.CellNameType; +import org.apache.cassandra.serializers.MarshalException; +import org.apache.cassandra.utils.FBUtilities; +import org.apache.cassandra.utils.ObjectSizes; +import org.apache.cassandra.utils.concurrent.OpOrder; +import org.apache.cassandra.utils.memory.AbstractAllocator; +import org.apache.cassandra.utils.memory.MemtableAllocator; +import org.apache.cassandra.utils.memory.NativeAllocator; + +public class NativeExpiringCell extends NativeCell implements ExpiringCell +{ + private static final long SIZE = ObjectSizes.measure(new NativeExpiringCell()); + + private NativeExpiringCell() + {} + + public NativeExpiringCell(NativeAllocator allocator, OpOrder.Group writeOp, ExpiringCell copyOf) + { + super(allocator, writeOp, copyOf); + } + + @Override + protected int sizeOf(Cell cell) + { + return super.sizeOf(cell) + 8; + } + + @Override + protected void construct(Cell from) + { + ExpiringCell expiring = (ExpiringCell) from; + + setInt(internalSize() - 4, expiring.getTimeToLive()); + setInt(internalSize() - 8, expiring.getLocalDeletionTime()); + super.construct(from); + } + + @Override + protected int postfixSize() + { + return 8; + } + + @Override + public int getTimeToLive() + { + return getInt(internalSize() - 4); + } + + @Override + public int getLocalDeletionTime() + { + return getInt(internalSize() - 8); + } + + @Override + public boolean isMarkedForDelete(long now) + { + return (int) (now / 1000) >= getLocalDeletionTime(); + } + + @Override + public long getMarkedForDeleteAt() + { + return timestamp(); + } + + @Override + public int serializationFlags() + { + return ColumnSerializer.EXPIRATION_MASK; + } + + @Override + public int cellDataSize() + { + return super.cellDataSize() + TypeSizes.NATIVE.sizeof(getLocalDeletionTime()) + TypeSizes.NATIVE.sizeof(getTimeToLive()); + } + + @Override + public int serializedSize(CellNameType type, TypeSizes typeSizes) + { + /* + * An expired column adds to a Cell : + * 4 bytes for the localExpirationTime + * + 4 bytes for the timeToLive + */ + return super.serializedSize(type, typeSizes) + typeSizes.sizeof(getLocalDeletionTime()) + typeSizes.sizeof(getTimeToLive()); + } + + @Override + public void validateFields(CFMetaData metadata) throws MarshalException + { + super.validateFields(metadata); + + if (getTimeToLive() <= 0) + throw new MarshalException("A column TTL should be > 0"); + if (getLocalDeletionTime() < 0) + throw new MarshalException("The local expiration time should not be negative"); + } + + @Override + public void updateDigest(MessageDigest digest) + { + super.updateDigest(digest); + FBUtilities.updateWithInt(digest, getTimeToLive()); + } + + public boolean equals(Cell cell) + { + return cell instanceof ExpiringCell && equals((ExpiringCell) this); + } + + protected boolean equals(ExpiringCell cell) + { + // super.equals() returns false if o is not a CounterCell + return super.equals(cell) + && getLocalDeletionTime() == cell.getLocalDeletionTime() + && getTimeToLive() == cell.getTimeToLive(); + } + + @Override + public String getString(CellNameType comparator) + { + return String.format("%s(%s!%d)", getClass().getSimpleName(), super.getString(comparator), getTimeToLive()); + } + + @Override + public ExpiringCell localCopy(CFMetaData metadata, AbstractAllocator allocator) + { + return new BufferExpiringCell(name().copy(metadata, allocator), allocator.clone(value()), timestamp(), getTimeToLive(), getLocalDeletionTime()); + } + + @Override + public ExpiringCell localCopy(CFMetaData metadata, MemtableAllocator allocator, OpOrder.Group opGroup) + { + return allocator.clone(this, metadata, opGroup); + } + + @Override + public long excessHeapSizeExcludingData() + { + return SIZE; + } + + @Override + public long unsharedHeapSize() + { + return SIZE; + } +} http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/Row.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/Row.java b/src/java/org/apache/cassandra/db/Row.java index 0685116..a826894 100644 --- a/src/java/org/apache/cassandra/db/Row.java +++ b/src/java/org/apache/cassandra/db/Row.java @@ -64,7 +64,7 @@ public class Row { public void serialize(Row row, DataOutputPlus out, int version) throws IOException { - ByteBufferUtil.writeWithShortLength(row.key.key, out); + ByteBufferUtil.writeWithShortLength(row.key.getKey(), out); ColumnFamily.serializer.serialize(row.cf, out, version); } @@ -81,7 +81,7 @@ public class Row public long serializedSize(Row row, int version) { - int keySize = row.key.key.remaining(); + int keySize = row.key.getKey().remaining(); return TypeSizes.NATIVE.sizeof((short) keySize) + keySize + ColumnFamily.serializer.serializedSize(row.cf, TypeSizes.NATIVE, version); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/RowIteratorFactory.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/RowIteratorFactory.java b/src/java/org/apache/cassandra/db/RowIteratorFactory.java index 464b9d1..500291e 100644 --- a/src/java/org/apache/cassandra/db/RowIteratorFactory.java +++ b/src/java/org/apache/cassandra/db/RowIteratorFactory.java @@ -96,7 +96,7 @@ public class RowIteratorFactory { // First check if this row is in the rowCache. If it is and it covers our filter, we can skip the rest ColumnFamily cached = cfs.getRawCachedRow(key); - IDiskAtomFilter filter = range.columnFilter(key.key); + IDiskAtomFilter filter = range.columnFilter(key.getKey()); if (cached == null || !cfs.isFilterFullyCoveredBy(filter, cached, now)) { @@ -150,7 +150,7 @@ public class RowIteratorFactory { public OnDiskAtomIterator create() { - return range.columnFilter(entry.getKey().key).getColumnFamilyIterator(entry.getKey(), entry.getValue()); + return range.columnFilter(entry.getKey().getKey()).getColumnFamilyIterator(entry.getKey(), entry.getValue()); } }); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/RowPosition.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/RowPosition.java b/src/java/org/apache/cassandra/db/RowPosition.java index a665d62..3bcd627 100644 --- a/src/java/org/apache/cassandra/db/RowPosition.java +++ b/src/java/org/apache/cassandra/db/RowPosition.java @@ -27,7 +27,7 @@ import org.apache.cassandra.io.util.DataOutputPlus; import org.apache.cassandra.service.StorageService; import org.apache.cassandra.utils.ByteBufferUtil; -public abstract class RowPosition implements RingPosition +public interface RowPosition extends RingPosition { public static enum Kind { @@ -43,20 +43,18 @@ public abstract class RowPosition implements RingPosition } } - public static final RowPositionSerializer serializer = new RowPositionSerializer(); - - public static RowPosition forKey(ByteBuffer key, IPartitioner p) + public static final class ForKey { - return key == null || key.remaining() == 0 ? p.getMinimumToken().minKeyBound() : p.decorateKey(key); + public static RowPosition get(ByteBuffer key, IPartitioner p) + { + return key == null || key.remaining() == 0 ? p.getMinimumToken().minKeyBound() : p.decorateKey(key); + } } - public abstract Token getToken(); - public abstract Kind kind(); + public static final RowPositionSerializer serializer = new RowPositionSerializer(); - public boolean isMinimum() - { - return isMinimum(StorageService.getPartitioner()); - } + public Kind kind(); + public boolean isMinimum(); public static class RowPositionSerializer implements ISerializer { @@ -76,7 +74,7 @@ public abstract class RowPosition implements RingPosition Kind kind = pos.kind(); out.writeByte(kind.ordinal()); if (kind == Kind.ROW_KEY) - ByteBufferUtil.writeWithShortLength(((DecoratedKey)pos).key, out); + ByteBufferUtil.writeWithShortLength(((DecoratedKey)pos).getKey(), out); else Token.serializer.serialize(pos.getToken(), out); } @@ -102,7 +100,7 @@ public abstract class RowPosition implements RingPosition int size = 1; // 1 byte for enum if (kind == Kind.ROW_KEY) { - int keySize = ((DecoratedKey)pos).key.remaining(); + int keySize = ((DecoratedKey)pos).getKey().remaining(); size += typeSizes.sizeof((short) keySize) + keySize; } else http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/SystemKeyspace.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/SystemKeyspace.java b/src/java/org/apache/cassandra/db/SystemKeyspace.java index b19eb1e..2025d5e 100644 --- a/src/java/org/apache/cassandra/db/SystemKeyspace.java +++ b/src/java/org/apache/cassandra/db/SystemKeyspace.java @@ -696,7 +696,7 @@ public class SystemKeyspace public static void setIndexBuilt(String keyspaceName, String indexName) { ColumnFamily cf = ArrayBackedSortedColumns.factory.create(Keyspace.SYSTEM_KS, INDEX_CF); - cf.addColumn(new Cell(cf.getComparator().makeCellName(indexName), ByteBufferUtil.EMPTY_BYTE_BUFFER, FBUtilities.timestampMicros())); + cf.addColumn(new BufferCell(cf.getComparator().makeCellName(indexName), ByteBufferUtil.EMPTY_BYTE_BUFFER, FBUtilities.timestampMicros())); new Mutation(Keyspace.SYSTEM_KS, ByteBufferUtil.bytes(keyspaceName), cf).apply(); } @@ -774,7 +774,7 @@ public class SystemKeyspace ByteBuffer ip = ByteBuffer.wrap(FBUtilities.getBroadcastAddress().getAddress()); ColumnFamily cf = ArrayBackedSortedColumns.factory.create(Keyspace.SYSTEM_KS, COUNTER_ID_CF); - cf.addColumn(new Cell(cf.getComparator().makeCellName(newCounterId.bytes()), ip, now)); + cf.addColumn(new BufferCell(cf.getComparator().makeCellName(newCounterId.bytes()), ip, now)); new Mutation(Keyspace.SYSTEM_KS, ALL_LOCAL_NODE_ID_KEY, cf).apply(); forceBlockingFlush(COUNTER_ID_CF); } @@ -833,7 +833,7 @@ public class SystemKeyspace Mutation mutation = mutationMap.get(schemaRow.key); if (mutation == null) { - mutation = new Mutation(Keyspace.SYSTEM_KS, schemaRow.key.key); + mutation = new Mutation(Keyspace.SYSTEM_KS, schemaRow.key.getKey()); mutationMap.put(schemaRow.key, mutation); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java index 0691819..0d45e9c 100644 --- a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java +++ b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java @@ -315,7 +315,7 @@ public abstract class AbstractCompactionStrategy long keys = sstable.estimatedKeys(); Set> ranges = new HashSet>(overlaps.size()); for (SSTableReader overlap : overlaps) - ranges.add(new Range(overlap.first.token, overlap.last.token, overlap.partitioner)); + ranges.add(new Range(overlap.first.getToken(), overlap.last.getToken(), overlap.partitioner)); long remainingKeys = keys - sstable.estimatedKeysForRanges(ranges); // next, calculate what percentage of columns we have within those keys long columns = sstable.getEstimatedColumnCount().mean() * remainingKeys; http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/compaction/CompactionController.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionController.java b/src/java/org/apache/cassandra/db/compaction/CompactionController.java index 3fe5c26..2bd9c86 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionController.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionController.java @@ -156,7 +156,7 @@ public class CompactionController implements AutoCloseable // we check index file instead. if (sstable.getBloomFilter() instanceof AlwaysPresentFilter && sstable.getPosition(key, SSTableReader.Operator.EQ, false) != null) min = Math.min(min, sstable.getMinTimestamp()); - else if (sstable.getBloomFilter().isPresent(key.key)) + else if (sstable.getBloomFilter().isPresent(key.getKey())) min = Math.min(min, sstable.getMinTimestamp()); } return min; http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/compaction/CompactionManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java index 792c962..3c9b004 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java @@ -406,7 +406,7 @@ public class CompactionManager implements CompactionManagerMBean SSTableReader sstable = sstableIterator.next(); for (Range r : Range.normalize(ranges)) { - Range sstableRange = new Range<>(sstable.first.token, sstable.last.token, sstable.partitioner); + Range sstableRange = new Range<>(sstable.first.getToken(), sstable.last.getToken(), sstable.partitioner); if (r.contains(sstableRange)) { logger.info("SSTable {} fully contained in range {}, mutating repairedAt instead of anticompacting", sstable, r); @@ -602,7 +602,7 @@ public class CompactionManager implements CompactionManagerMBean // see if there are any keys LTE the token for the start of the first range // (token range ownership is exclusive on the LHS.) Range firstRange = sortedRanges.get(0); - if (sstable.first.token.compareTo(firstRange.left) <= 0) + if (sstable.first.getToken().compareTo(firstRange.left) <= 0) return true; // then, iterate over all owned ranges and see if the next key beyond the end of the owned @@ -631,7 +631,7 @@ public class CompactionManager implements CompactionManagerMBean } Range nextRange = sortedRanges.get(i + 1); - if (!nextRange.contains(firstBeyondRange.token)) + if (!nextRange.contains(firstBeyondRange.getToken())) { // we found a key in between the owned ranges return true; @@ -651,7 +651,7 @@ public class CompactionManager implements CompactionManagerMBean { assert !cfs.isIndex(); - if (!hasIndexes && !new Bounds<>(sstable.first.token, sstable.last.token).intersects(ranges)) + if (!hasIndexes && !new Bounds<>(sstable.first.getToken(), sstable.last.getToken()).intersects(ranges)) { cfs.getDataTracker().markCompactedSSTablesReplaced(Arrays.asList(sstable), Collections.emptyList(), OperationType.CLEANUP); return; @@ -796,7 +796,7 @@ public class CompactionManager implements CompactionManagerMBean @Override public SSTableIdentityIterator cleanup(SSTableIdentityIterator row) { - if (Range.isInRanges(row.getKey().token, ranges)) + if (Range.isInRanges(row.getKey().getToken(), ranges)) return row; cfs.invalidateCachedRow(row.getKey()); @@ -972,7 +972,7 @@ public class CompactionManager implements CompactionManagerMBean { AbstractCompactedRow row = iter.next(); // if current range from sstable is repaired, save it into the new repaired sstable - if (Range.isInRanges(row.key.token, ranges)) + if (Range.isInRanges(row.key.getToken(), ranges)) { repairedSSTableWriter.append(row); repairedKeyCount++; http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java b/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java index 2fefe0d..4f211f4 100644 --- a/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java +++ b/src/java/org/apache/cassandra/db/compaction/LazilyCompactedRow.java @@ -106,7 +106,7 @@ public class LazilyCompactedRow extends AbstractCompactedRow ColumnIndex columnsIndex; try { - indexBuilder = new ColumnIndex.Builder(emptyColumnFamily, key.key, out); + indexBuilder = new ColumnIndex.Builder(emptyColumnFamily, key.getKey(), out); columnsIndex = indexBuilder.buildForCompaction(merger); // if there aren't any columns or tombstones, return null @@ -156,7 +156,7 @@ public class LazilyCompactedRow extends AbstractCompactedRow } // initialize indexBuilder for the benefit of its tombstoneTracker, used by our reducing iterator - indexBuilder = new ColumnIndex.Builder(emptyColumnFamily, key.key, out); + indexBuilder = new ColumnIndex.Builder(emptyColumnFamily, key.getKey(), out); while (merger.hasNext()) merger.next().updateDigest(digest); close(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java index e1a3db8..a21924b 100644 --- a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java +++ b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java @@ -456,13 +456,13 @@ public class LeveledManifest */ Iterator iter = candidates.iterator(); SSTableReader sstable = iter.next(); - Token first = sstable.first.token; - Token last = sstable.last.token; + Token first = sstable.first.getToken(); + Token last = sstable.last.getToken(); while (iter.hasNext()) { sstable = iter.next(); - first = first.compareTo(sstable.first.token) <= 0 ? first : sstable.first.token; - last = last.compareTo(sstable.last.token) >= 0 ? last : sstable.last.token; + first = first.compareTo(sstable.first.getToken()) <= 0 ? first : sstable.first.getToken(); + last = last.compareTo(sstable.last.getToken()) >= 0 ? last : sstable.last.getToken(); } return overlapping(first, last, others); } @@ -470,7 +470,7 @@ public class LeveledManifest @VisibleForTesting static Set overlapping(SSTableReader sstable, Iterable others) { - return overlapping(sstable.first.token, sstable.last.token, others); + return overlapping(sstable.first.getToken(), sstable.last.getToken(), others); } /** @@ -483,7 +483,7 @@ public class LeveledManifest Bounds promotedBounds = new Bounds(start, end); for (SSTableReader candidate : sstables) { - Bounds candidateBounds = new Bounds(candidate.first.token, candidate.last.token); + Bounds candidateBounds = new Bounds(candidate.first.getToken(), candidate.last.getToken()); if (candidateBounds.intersects(promotedBounds)) overlapped.add(candidate); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/compaction/Scrubber.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/Scrubber.java b/src/java/org/apache/cassandra/db/compaction/Scrubber.java index d61f62b..399f96c 100644 --- a/src/java/org/apache/cassandra/db/compaction/Scrubber.java +++ b/src/java/org/apache/cassandra/db/compaction/Scrubber.java @@ -163,7 +163,7 @@ public class Scrubber implements Closeable dataSize = dataSizeFromIndex; // avoid an NPE if key is null - String keyName = key == null ? "(unreadable key)" : ByteBufferUtil.bytesToHex(key.key); + String keyName = key == null ? "(unreadable key)" : ByteBufferUtil.bytesToHex(key.getKey()); outputHandler.debug(String.format("row %s is %s bytes", keyName, dataSize)); assert currentIndexKey != null || indexFile.isEOF(); @@ -188,7 +188,7 @@ public class Scrubber implements Closeable else goodRows++; prevKey = key; - if (!key.key.equals(currentIndexKey) || dataStart != dataStartFromIndex) + if (!key.getKey().equals(currentIndexKey) || dataStart != dataStartFromIndex) outputHandler.warn("Index file contained a different key or row size; using key from data file"); } catch (Throwable th) @@ -197,7 +197,7 @@ public class Scrubber implements Closeable outputHandler.warn("Error reading row (stacktrace follows):", th); if (currentIndexKey != null - && (key == null || !key.key.equals(currentIndexKey) || dataStart != dataStartFromIndex || dataSize != dataSizeFromIndex)) + && (key == null || !key.getKey().equals(currentIndexKey) || dataStart != dataStartFromIndex || dataSize != dataSizeFromIndex)) { outputHandler.output(String.format("Retrying from row index; data is %s bytes starting at %s", dataSizeFromIndex, dataStartFromIndex)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/AbstractCellNameType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/AbstractCellNameType.java b/src/java/org/apache/cassandra/db/composites/AbstractCellNameType.java index 191750f..74e24f7 100644 --- a/src/java/org/apache/cassandra/db/composites/AbstractCellNameType.java +++ b/src/java/org/apache/cassandra/db/composites/AbstractCellNameType.java @@ -23,6 +23,7 @@ import java.nio.ByteBuffer; import java.util.*; import com.google.common.collect.AbstractIterator; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.cql3.CQL3Row; import org.apache.cassandra.cql3.ColumnIdentifier; @@ -294,19 +295,20 @@ public abstract class AbstractCellNameType extends AbstractCType implements Cell } } - protected static CQL3Row.Builder makeSparseCQL3RowBuilder(final CellNameType type, final long now) + protected static CQL3Row.Builder makeSparseCQL3RowBuilder(final CFMetaData cfMetaData, final CellNameType type, final long now) { return new CQL3Row.Builder() { public CQL3Row.RowIterator group(Iterator cells) { - return new SparseRowIterator(type, cells, now); + return new SparseRowIterator(cfMetaData, type, cells, now); } }; } private static class SparseRowIterator extends AbstractIterator implements CQL3Row.RowIterator { + private final CFMetaData cfMetaData; private final CellNameType type; private final Iterator cells; private final long now; @@ -316,8 +318,9 @@ public abstract class AbstractCellNameType extends AbstractCType implements Cell private CellName previous; private CQL3RowOfSparse currentRow; - public SparseRowIterator(CellNameType type, Iterator cells, long now) + public SparseRowIterator(CFMetaData cfMetaData, CellNameType type, Iterator cells, long now) { + this.cfMetaData = cfMetaData; this.type = type; this.cells = cells; this.now = now; @@ -357,7 +360,7 @@ public abstract class AbstractCellNameType extends AbstractCType implements Cell if (currentRow == null || !current.isSameCQL3RowAs(type, previous)) { toReturn = currentRow; - currentRow = new CQL3RowOfSparse(current); + currentRow = new CQL3RowOfSparse(cfMetaData, current); } currentRow.add(nextCell); nextCell = null; @@ -378,12 +381,14 @@ public abstract class AbstractCellNameType extends AbstractCType implements Cell private static class CQL3RowOfSparse implements CQL3Row { + private final CFMetaData cfMetaData; private final CellName cell; private Map columns; private Map> collections; - CQL3RowOfSparse(CellName cell) + CQL3RowOfSparse(CFMetaData metadata, CellName cell) { + this.cfMetaData = metadata; this.cell = cell; } @@ -395,7 +400,7 @@ public abstract class AbstractCellNameType extends AbstractCType implements Cell void add(Cell cell) { CellName cellName = cell.name(); - ColumnIdentifier columnName = cellName.cql3ColumnName(); + ColumnIdentifier columnName = cellName.cql3ColumnName(cfMetaData); if (cellName.isCollectionCell()) { if (collections == null) http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/AbstractComposite.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/AbstractComposite.java b/src/java/org/apache/cassandra/db/composites/AbstractComposite.java index bd94f88..14fa16c 100644 --- a/src/java/org/apache/cassandra/db/composites/AbstractComposite.java +++ b/src/java/org/apache/cassandra/db/composites/AbstractComposite.java @@ -20,7 +20,6 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; import org.apache.cassandra.db.filter.ColumnSlice; -import org.apache.cassandra.db.marshal.AbstractCompositeType; import org.apache.cassandra.db.marshal.CompositeType; import org.apache.cassandra.utils.ByteBufferUtil; http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/BoundedComposite.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/BoundedComposite.java b/src/java/org/apache/cassandra/db/composites/BoundedComposite.java index 5ea39a4..7654edc 100644 --- a/src/java/org/apache/cassandra/db/composites/BoundedComposite.java +++ b/src/java/org/apache/cassandra/db/composites/BoundedComposite.java @@ -19,9 +19,9 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.utils.memory.AbstractAllocator; import org.apache.cassandra.utils.ObjectSizes; -import org.apache.cassandra.utils.memory.PoolAllocator; public class BoundedComposite extends AbstractComposite { @@ -94,14 +94,8 @@ public class BoundedComposite extends AbstractComposite return EMPTY_SIZE + wrapped.unsharedHeapSize(); } - public Composite copy(AbstractAllocator allocator) + public Composite copy(CFMetaData cfm, AbstractAllocator allocator) { - return new BoundedComposite(wrapped.copy(allocator), isStart); - } - - @Override - public void free(PoolAllocator allocator) - { - wrapped.free(allocator); + return new BoundedComposite(wrapped.copy(cfm, allocator), isStart); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/CellName.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/CellName.java b/src/java/org/apache/cassandra/db/composites/CellName.java index 202d73a..22b3fbd 100644 --- a/src/java/org/apache/cassandra/db/composites/CellName.java +++ b/src/java/org/apache/cassandra/db/composites/CellName.java @@ -19,6 +19,7 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.utils.memory.AbstractAllocator; @@ -52,8 +53,9 @@ public interface CellName extends Composite * The name of the CQL3 column this cell represents. * * Will be null for cells of "dense" tables. + * @param metadata */ - public ColumnIdentifier cql3ColumnName(); + public ColumnIdentifier cql3ColumnName(CFMetaData metadata); /** * The value of the collection element, or null if the cell is not part @@ -70,7 +72,7 @@ public interface CellName extends Composite // If cellnames were sharing some prefix components, this will break it, so // we might want to try to do better. @Override - public CellName copy(AbstractAllocator allocator); + public CellName copy(CFMetaData cfm, AbstractAllocator allocator); public long excessHeapSizeExcludingData(); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/CellNameType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/CellNameType.java b/src/java/org/apache/cassandra/db/composites/CellNameType.java index 6e8744a..acc0527 100644 --- a/src/java/org/apache/cassandra/db/composites/CellNameType.java +++ b/src/java/org/apache/cassandra/db/composites/CellNameType.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.Comparator; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.cql3.CQL3Row; import org.apache.cassandra.cql3.ColumnIdentifier; @@ -152,7 +153,7 @@ public interface CellNameType extends CType /** * Creates a new CQL3Row builder for this type. See CQL3Row for details. */ - public CQL3Row.Builder CQL3RowBuilder(long now); + public CQL3Row.Builder CQL3RowBuilder(CFMetaData metadata, long now); // The two following methods are used to pass the declared regular column names (in CFMetaData) // to the CellNameType. This is only used for optimization sake, see SparseCellNameType. http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/CellNames.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/CellNames.java b/src/java/org/apache/cassandra/db/composites/CellNames.java index dc7d0e2..b941166 100644 --- a/src/java/org/apache/cassandra/db/composites/CellNames.java +++ b/src/java/org/apache/cassandra/db/composites/CellNames.java @@ -20,6 +20,7 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; import java.util.List; +import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.db.Cell; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.ColumnToCollectionType; @@ -75,6 +76,11 @@ public abstract class CellNames return new SimpleDenseCellName(bb); } + public static CellName simpleSparse(ColumnIdentifier identifier) + { + return new SimpleSparseCellName(identifier); + } + // Mainly for tests and a few cases where we know what we need and didn't wanted to pass the type around // Avoid in general, prefer the CellNameType methods. public static CellName compositeDense(ByteBuffer... bbs) @@ -82,6 +88,16 @@ public abstract class CellNames return new CompoundDenseCellName(bbs); } + public static CellName compositeSparse(ByteBuffer[] bbs, ColumnIdentifier identifier, boolean isStatic) + { + return new CompoundSparseCellName(bbs, identifier, isStatic); + } + + public static CellName compositeSparseWithCollection(ByteBuffer[] bbs, ByteBuffer collectionElement, ColumnIdentifier identifier, boolean isStatic) + { + return new CompoundSparseCellName.WithCollection(bbs, identifier, collectionElement, isStatic); + } + public static String getColumnsString(CellNameType type, Iterable columns) { StringBuilder builder = new StringBuilder(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/Composite.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/Composite.java b/src/java/org/apache/cassandra/db/composites/Composite.java index c7ed047..98b1c91 100644 --- a/src/java/org/apache/cassandra/db/composites/Composite.java +++ b/src/java/org/apache/cassandra/db/composites/Composite.java @@ -20,9 +20,9 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; import org.apache.cassandra.cache.IMeasurableMemory; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.db.filter.ColumnSlice; import org.apache.cassandra.utils.memory.AbstractAllocator; -import org.apache.cassandra.utils.memory.PoolAllocator; /** * A composite value. @@ -75,6 +75,5 @@ public interface Composite extends IMeasurableMemory public ByteBuffer toByteBuffer(); public int dataSize(); - public Composite copy(AbstractAllocator allocator); - public void free(PoolAllocator allocator); + public Composite copy(CFMetaData cfm, AbstractAllocator allocator); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/Composites.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/Composites.java b/src/java/org/apache/cassandra/db/composites/Composites.java index 9b37d6e..42ec72d 100644 --- a/src/java/org/apache/cassandra/db/composites/Composites.java +++ b/src/java/org/apache/cassandra/db/composites/Composites.java @@ -19,10 +19,10 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.db.filter.ColumnSlice; import org.apache.cassandra.utils.memory.AbstractAllocator; import org.apache.cassandra.utils.ByteBufferUtil; -import org.apache.cassandra.utils.memory.PoolAllocator; public abstract class Composites { @@ -108,15 +108,9 @@ public abstract class Composites return true; } - public Composite copy(AbstractAllocator allocator) + public Composite copy(CFMetaData cfm, AbstractAllocator allocator) { return this; } - - @Override - public void free(PoolAllocator allocator) - { - } - } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/CompoundComposite.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/CompoundComposite.java b/src/java/org/apache/cassandra/db/composites/CompoundComposite.java index 5ba4c8a..e16b48a 100644 --- a/src/java/org/apache/cassandra/db/composites/CompoundComposite.java +++ b/src/java/org/apache/cassandra/db/composites/CompoundComposite.java @@ -19,9 +19,9 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.utils.ObjectSizes; import org.apache.cassandra.utils.memory.AbstractAllocator; -import org.apache.cassandra.utils.memory.PoolAllocator; /** * A "truly-composite" Composite. @@ -81,16 +81,8 @@ public class CompoundComposite extends AbstractComposite return EMPTY_SIZE + ObjectSizes.sizeOnHeapExcludingData(elements); } - public Composite copy(AbstractAllocator allocator) + public Composite copy(CFMetaData cfm, AbstractAllocator allocator) { return new CompoundComposite(elementsCopy(allocator), size, isStatic); } - - @Override - public void free(PoolAllocator allocator) - { - for (ByteBuffer element : elements) - allocator.free(element); - } - } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java index db80043..0a157c2 100644 --- a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java +++ b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellName.java @@ -19,6 +19,7 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.utils.memory.AbstractAllocator; import org.apache.cassandra.utils.ObjectSizes; @@ -44,7 +45,7 @@ public class CompoundDenseCellName extends CompoundComposite implements CellName return size; } - public ColumnIdentifier cql3ColumnName() + public ColumnIdentifier cql3ColumnName(CFMetaData metadata) { return null; } @@ -77,7 +78,7 @@ public class CompoundDenseCellName extends CompoundComposite implements CellName return HEAP_SIZE + ObjectSizes.sizeOnHeapExcludingData(elements); } - public CellName copy(AbstractAllocator allocator) + public CellName copy(CFMetaData cfm, AbstractAllocator allocator) { return new CompoundDenseCellName(elementsCopy(allocator)); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java index 635b997..0fd2f4b 100644 --- a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java +++ b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java @@ -21,6 +21,7 @@ import java.nio.ByteBuffer; import java.util.Arrays; import java.util.List; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.cql3.CQL3Row; import org.apache.cassandra.cql3.ColumnIdentifier; @@ -80,7 +81,7 @@ public class CompoundDenseCellNameType extends AbstractCompoundCellNameType public void addCQL3Column(ColumnIdentifier id) {} public void removeCQL3Column(ColumnIdentifier id) {} - public CQL3Row.Builder CQL3RowBuilder(long now) + public CQL3Row.Builder CQL3RowBuilder(CFMetaData metadata, long now) { return makeDenseCQL3RowBuilder(now); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/CompoundSparseCellName.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/CompoundSparseCellName.java b/src/java/org/apache/cassandra/db/composites/CompoundSparseCellName.java index 753adbf..ad7bb73 100644 --- a/src/java/org/apache/cassandra/db/composites/CompoundSparseCellName.java +++ b/src/java/org/apache/cassandra/db/composites/CompoundSparseCellName.java @@ -19,11 +19,11 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.memory.AbstractAllocator; import org.apache.cassandra.utils.ObjectSizes; -import org.apache.cassandra.utils.memory.PoolAllocator; public class CompoundSparseCellName extends CompoundComposite implements CellName { @@ -65,7 +65,7 @@ public class CompoundSparseCellName extends CompoundComposite implements CellNam return size; } - public ColumnIdentifier cql3ColumnName() + public ColumnIdentifier cql3ColumnName(CFMetaData metadata) { return columnName; } @@ -93,7 +93,7 @@ public class CompoundSparseCellName extends CompoundComposite implements CellNam return true; } - public CellName copy(AbstractAllocator allocator) + public CellName copy(CFMetaData cfm, AbstractAllocator allocator) { if (elements.length == 0) return this; @@ -147,7 +147,7 @@ public class CompoundSparseCellName extends CompoundComposite implements CellNam } @Override - public CellName copy(AbstractAllocator allocator) + public CellName copy(CFMetaData cfm, AbstractAllocator allocator) { // We don't copy columnName because it's interned in SparseCellNameType return new CompoundSparseCellName.WithCollection(elements.length == 0 ? elements : elementsCopy(allocator), size, columnName, allocator.clone(collectionElement), isStatic()); @@ -164,12 +164,5 @@ public class CompoundSparseCellName extends CompoundComposite implements CellNam { return super.excessHeapSizeExcludingData() + ObjectSizes.sizeOnHeapExcludingData(collectionElement); } - - @Override - public void free(PoolAllocator allocator) - { - super.free(allocator); - allocator.free(collectionElement); - } } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java b/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java index 88f6892..bcb500d 100644 --- a/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java +++ b/src/java/org/apache/cassandra/db/composites/CompoundSparseCellNameType.java @@ -20,6 +20,7 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; import java.util.*; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.cql3.CQL3Row; import org.apache.cassandra.cql3.ColumnIdentifier; @@ -29,11 +30,10 @@ import org.apache.cassandra.db.marshal.ColumnToCollectionType; import org.apache.cassandra.db.marshal.UTF8Type; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.memory.AbstractAllocator; -import org.apache.cassandra.utils.memory.PoolAllocator; public class CompoundSparseCellNameType extends AbstractCompoundCellNameType { - private static final ColumnIdentifier rowMarkerId = new ColumnIdentifier(ByteBufferUtil.EMPTY_BYTE_BUFFER, UTF8Type.instance); + public static final ColumnIdentifier rowMarkerId = new ColumnIdentifier(ByteBufferUtil.EMPTY_BYTE_BUFFER, UTF8Type.instance); private static final CellName rowMarkerNoPrefix = new CompoundSparseCellName(rowMarkerId, false); // For CQL3 columns, this is always UTF8Type. However, for compatibility with super columns, we need to allow it to be non-UTF8. @@ -87,15 +87,10 @@ public class CompoundSparseCellNameType extends AbstractCompoundCellNameType } @Override - public Composite copy(AbstractAllocator allocator) + public Composite copy(CFMetaData cfm, AbstractAllocator allocator) { return this; } - - @Override - public void free(PoolAllocator allocator) - { - } }; } @@ -204,9 +199,9 @@ public class CompoundSparseCellNameType extends AbstractCompoundCellNameType internedIds.remove(id.bytes); } - public CQL3Row.Builder CQL3RowBuilder(long now) + public CQL3Row.Builder CQL3RowBuilder(CFMetaData metadata, long now) { - return makeSparseCQL3RowBuilder(this, now); + return makeSparseCQL3RowBuilder(metadata, this, now); } public static class WithCollection extends CompoundSparseCellNameType http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/SimpleComposite.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/SimpleComposite.java b/src/java/org/apache/cassandra/db/composites/SimpleComposite.java index 78173c7..3c80d9f 100644 --- a/src/java/org/apache/cassandra/db/composites/SimpleComposite.java +++ b/src/java/org/apache/cassandra/db/composites/SimpleComposite.java @@ -19,9 +19,9 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.utils.memory.AbstractAllocator; import org.apache.cassandra.utils.ObjectSizes; -import org.apache.cassandra.utils.memory.PoolAllocator; /** * A "simple" (not-truly-composite) Composite. @@ -72,14 +72,8 @@ public class SimpleComposite extends AbstractComposite return EMPTY_SIZE + ObjectSizes.sizeOnHeapOf(element); } - public Composite copy(AbstractAllocator allocator) + public Composite copy(CFMetaData cfm, AbstractAllocator allocator) { return new SimpleComposite(allocator.clone(element)); } - - @Override - public void free(PoolAllocator allocator) - { - allocator.free(element); - } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/SimpleDenseCellName.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/SimpleDenseCellName.java b/src/java/org/apache/cassandra/db/composites/SimpleDenseCellName.java index a4fb9dc..5c0f976 100644 --- a/src/java/org/apache/cassandra/db/composites/SimpleDenseCellName.java +++ b/src/java/org/apache/cassandra/db/composites/SimpleDenseCellName.java @@ -19,6 +19,7 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.utils.memory.AbstractAllocator; import org.apache.cassandra.utils.ObjectSizes; @@ -38,7 +39,7 @@ public class SimpleDenseCellName extends SimpleComposite implements CellName return 1; } - public ColumnIdentifier cql3ColumnName() + public ColumnIdentifier cql3ColumnName(CFMetaData metadata) { return null; } @@ -74,7 +75,7 @@ public class SimpleDenseCellName extends SimpleComposite implements CellName // If cellnames were sharing some prefix components, this will break it, so // we might want to try to do better. @Override - public CellName copy(AbstractAllocator allocator) + public CellName copy(CFMetaData cfm, AbstractAllocator allocator) { return new SimpleDenseCellName(allocator.clone(element)); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/SimpleDenseCellNameType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/SimpleDenseCellNameType.java b/src/java/org/apache/cassandra/db/composites/SimpleDenseCellNameType.java index 1aae580..3db4bc4 100644 --- a/src/java/org/apache/cassandra/db/composites/SimpleDenseCellNameType.java +++ b/src/java/org/apache/cassandra/db/composites/SimpleDenseCellNameType.java @@ -19,6 +19,7 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.cql3.CQL3Row; import org.apache.cassandra.cql3.ColumnIdentifier; @@ -72,7 +73,7 @@ public class SimpleDenseCellNameType extends AbstractSimpleCellNameType public void addCQL3Column(ColumnIdentifier id) {} public void removeCQL3Column(ColumnIdentifier id) {} - public CQL3Row.Builder CQL3RowBuilder(long now) + public CQL3Row.Builder CQL3RowBuilder(CFMetaData metadata, long now) { return makeDenseCQL3RowBuilder(now); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/SimpleSparseCellName.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/SimpleSparseCellName.java b/src/java/org/apache/cassandra/db/composites/SimpleSparseCellName.java index 5c9e991..a7fafba 100644 --- a/src/java/org/apache/cassandra/db/composites/SimpleSparseCellName.java +++ b/src/java/org/apache/cassandra/db/composites/SimpleSparseCellName.java @@ -19,10 +19,10 @@ package org.apache.cassandra.db.composites; import java.nio.ByteBuffer; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.utils.memory.AbstractAllocator; import org.apache.cassandra.utils.ObjectSizes; -import org.apache.cassandra.utils.memory.PoolAllocator; public class SimpleSparseCellName extends AbstractComposite implements CellName { @@ -67,7 +67,7 @@ public class SimpleSparseCellName extends AbstractComposite implements CellName return 0; } - public ColumnIdentifier cql3ColumnName() + public ColumnIdentifier cql3ColumnName(CFMetaData metadata) { return columnName; } @@ -97,13 +97,8 @@ public class SimpleSparseCellName extends AbstractComposite implements CellName return EMPTY_SIZE + columnName.unsharedHeapSize(); } - public CellName copy(AbstractAllocator allocator) + public CellName copy(CFMetaData cfm, AbstractAllocator allocator) { return new SimpleSparseCellName(columnName.clone(allocator)); } - - public void free(PoolAllocator allocator) - { - allocator.free(columnName.bytes); - } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/SimpleSparseCellNameType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/SimpleSparseCellNameType.java b/src/java/org/apache/cassandra/db/composites/SimpleSparseCellNameType.java index 8b446fa..5ce0deb 100644 --- a/src/java/org/apache/cassandra/db/composites/SimpleSparseCellNameType.java +++ b/src/java/org/apache/cassandra/db/composites/SimpleSparseCellNameType.java @@ -21,6 +21,7 @@ import java.nio.ByteBuffer; import java.util.HashMap; import java.util.Map; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; import org.apache.cassandra.cql3.CQL3Row; import org.apache.cassandra.cql3.ColumnIdentifier; @@ -92,8 +93,8 @@ public class SimpleSparseCellNameType extends AbstractSimpleCellNameType internedNames.remove(id.bytes); } - public CQL3Row.Builder CQL3RowBuilder(long now) + public CQL3Row.Builder CQL3RowBuilder(CFMetaData metadata, long now) { - return makeSparseCQL3RowBuilder(this, now); + return makeSparseCQL3RowBuilder(metadata, this, now); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/composites/SimpleSparseInternedCellName.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/composites/SimpleSparseInternedCellName.java b/src/java/org/apache/cassandra/db/composites/SimpleSparseInternedCellName.java index a0395cf..c5708d8 100644 --- a/src/java/org/apache/cassandra/db/composites/SimpleSparseInternedCellName.java +++ b/src/java/org/apache/cassandra/db/composites/SimpleSparseInternedCellName.java @@ -17,9 +17,9 @@ */ package org.apache.cassandra.db.composites; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.utils.memory.AbstractAllocator; -import org.apache.cassandra.utils.memory.PoolAllocator; public class SimpleSparseInternedCellName extends SimpleSparseCellName { @@ -43,16 +43,9 @@ public class SimpleSparseInternedCellName extends SimpleSparseCellName } @Override - public CellName copy(AbstractAllocator allocator) + public CellName copy(CFMetaData cfm, AbstractAllocator allocator) { // We're interning those instance in SparceCellNameType so don't need to copy. return this; } - - @Override - public void free(PoolAllocator allocator) - { - // no-op, never copied - } - } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/filter/ColumnSlice.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/filter/ColumnSlice.java b/src/java/org/apache/cassandra/db/filter/ColumnSlice.java index 6e2fa68..ad3b2fe 100644 --- a/src/java/org/apache/cassandra/db/filter/ColumnSlice.java +++ b/src/java/org/apache/cassandra/db/filter/ColumnSlice.java @@ -26,6 +26,7 @@ import java.util.NavigableSet; import com.google.common.collect.AbstractIterator; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.cql3.ColumnIdentifier; import org.apache.cassandra.db.*; import org.apache.cassandra.db.composites.*; @@ -35,7 +36,6 @@ import org.apache.cassandra.io.IVersionedSerializer; import org.apache.cassandra.io.util.DataOutputPlus; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.memory.AbstractAllocator; -import org.apache.cassandra.utils.memory.PoolAllocator; public class ColumnSlice { @@ -219,7 +219,7 @@ public class ColumnSlice private static Cell fakeCell(Composite name) { - return new Cell(new FakeCellName(name), ByteBufferUtil.EMPTY_BYTE_BUFFER); + return new BufferCell(new FakeCellName(name), ByteBufferUtil.EMPTY_BYTE_BUFFER); } /* @@ -265,7 +265,7 @@ public class ColumnSlice throw new UnsupportedOperationException(); } - public ColumnIdentifier cql3ColumnName() + public ColumnIdentifier cql3ColumnName(CFMetaData metadata) { throw new UnsupportedOperationException(); } @@ -285,7 +285,7 @@ public class ColumnSlice throw new UnsupportedOperationException(); } - public CellName copy(AbstractAllocator allocator) + public CellName copy(CFMetaData cfm, AbstractAllocator allocator) { throw new UnsupportedOperationException(); } @@ -296,12 +296,6 @@ public class ColumnSlice throw new UnsupportedOperationException(); } - @Override - public void free(PoolAllocator allocator) - { - throw new UnsupportedOperationException(); - } - public long unsharedHeapSize() { throw new UnsupportedOperationException(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java b/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java index 6bf25b1..2659439 100644 --- a/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java +++ b/src/java/org/apache/cassandra/db/filter/ExtendedFilter.java @@ -256,7 +256,7 @@ public abstract class ExtendedFilter assert !(cfs.getComparator().isCompound()) : "Sequential scan with filters is not supported (if you just created an index, you " + "need to wait for the creation to be propagated to all nodes before querying it)"; - if (!needsExtraQuery(rowKey.key, data)) + if (!needsExtraQuery(rowKey.getKey(), data)) return null; // Note: for counters we must be careful to not add a column that was already there (to avoid overcount). That is @@ -278,7 +278,7 @@ public abstract class ExtendedFilter return data; ColumnFamily pruned = data.cloneMeShallow(); - IDiskAtomFilter filter = dataRange.columnFilter(rowKey.key); + IDiskAtomFilter filter = dataRange.columnFilter(rowKey.getKey()); OnDiskAtomIterator iter = filter.getColumnFamilyIterator(rowKey, data); filter.collectReducedColumns(pruned, QueryFilter.gatherTombstones(pruned, iter), cfs.gcBefore(timestamp), timestamp); return pruned; @@ -311,7 +311,7 @@ public abstract class ExtendedFilter continue; } - dataValue = extractDataValue(def, rowKey.key, data, prefix); + dataValue = extractDataValue(def, rowKey.getKey(), data, prefix); validator = def.type; } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java b/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java index 4604c16..164c96f 100644 --- a/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java +++ b/src/java/org/apache/cassandra/db/index/AbstractSimplePerColumnSecondaryIndex.java @@ -22,13 +22,7 @@ import java.util.concurrent.Future; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; -import org.apache.cassandra.db.ArrayBackedSortedColumns; -import org.apache.cassandra.db.Cell; -import org.apache.cassandra.db.ColumnFamily; -import org.apache.cassandra.db.ColumnFamilyStore; -import org.apache.cassandra.db.DecoratedKey; -import org.apache.cassandra.db.ExpiringCell; -import org.apache.cassandra.db.IndexExpression; +import org.apache.cassandra.db.*; import org.apache.cassandra.db.composites.CellName; import org.apache.cassandra.db.composites.CellNameType; import org.apache.cassandra.db.marshal.AbstractType; @@ -37,7 +31,7 @@ import org.apache.cassandra.dht.LocalToken; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.cassandra.utils.FBUtilities; import org.apache.cassandra.utils.concurrent.OpOrder; -import org.apache.cassandra.utils.memory.PoolAllocator; +import org.apache.cassandra.utils.memory.MemtableAllocator; /** * Implements a secondary index for a column family using a second column family @@ -75,7 +69,7 @@ public abstract class AbstractSimplePerColumnSecondaryIndex extends PerColumnSec @Override public DecoratedKey getIndexKeyFor(ByteBuffer value) { - return new DecoratedKey(new LocalToken(getIndexKeyComparator(), value), value); + return new BufferDecoratedKey(new LocalToken(getIndexKeyComparator(), value), value); } protected abstract CellName makeIndexColumnName(ByteBuffer rowKey, Cell cell); @@ -115,14 +109,14 @@ public abstract class AbstractSimplePerColumnSecondaryIndex extends PerColumnSec if (cell instanceof ExpiringCell) { ExpiringCell ec = (ExpiringCell) cell; - cfi.addColumn(new ExpiringCell(name, ByteBufferUtil.EMPTY_BYTE_BUFFER, ec.timestamp(), ec.getTimeToLive(), ec.getLocalDeletionTime())); + cfi.addColumn(new BufferExpiringCell(name, ByteBufferUtil.EMPTY_BYTE_BUFFER, ec.timestamp(), ec.getTimeToLive(), ec.getLocalDeletionTime())); } else { - cfi.addColumn(new Cell(name, ByteBufferUtil.EMPTY_BYTE_BUFFER, cell.timestamp())); + cfi.addColumn(new BufferCell(name, ByteBufferUtil.EMPTY_BYTE_BUFFER, cell.timestamp())); } if (logger.isDebugEnabled()) - logger.debug("applying index row {} in {}", indexCfs.metadata.getKeyValidator().getString(valueKey.key), cfi); + logger.debug("applying index row {} in {}", indexCfs.metadata.getKeyValidator().getString(valueKey.getKey()), cfi); indexCfs.apply(valueKey, cfi, SecondaryIndexManager.nullUpdater, opGroup, null); } @@ -171,11 +165,6 @@ public abstract class AbstractSimplePerColumnSecondaryIndex extends PerColumnSec return indexCfs.name; } - public PoolAllocator getAllocator() - { - return indexCfs.getDataTracker().getView().getCurrentMemtable().getAllocator(); - } - public void reload() { indexCfs.metadata.reloadSecondaryIndexMetadata(baseCfs.metadata); http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/SecondaryIndex.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/SecondaryIndex.java b/src/java/org/apache/cassandra/db/index/SecondaryIndex.java index 88d8905..4f95a5a 100644 --- a/src/java/org/apache/cassandra/db/index/SecondaryIndex.java +++ b/src/java/org/apache/cassandra/db/index/SecondaryIndex.java @@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; +import org.apache.cassandra.db.BufferDecoratedKey; import org.apache.cassandra.db.Cell; import org.apache.cassandra.db.ColumnFamilyStore; import org.apache.cassandra.db.DecoratedKey; @@ -51,7 +52,7 @@ import org.apache.cassandra.io.sstable.ReducingKeyIterator; import org.apache.cassandra.io.sstable.SSTableReader; import org.apache.cassandra.service.StorageService; import org.apache.cassandra.utils.FBUtilities; -import org.apache.cassandra.utils.memory.PoolAllocator; +import org.apache.cassandra.utils.memory.MemtableAllocator; /** * Abstract base class for different types of secondary indexes. @@ -150,11 +151,6 @@ public abstract class SecondaryIndex public abstract void forceBlockingFlush(); /** - * Get current amount of memory this index is consuming (in bytes) - */ - public abstract PoolAllocator getAllocator(); - - /** * Allow access to the underlying column family store if there is one * @return the underlying column family store or null */ @@ -284,7 +280,7 @@ public abstract class SecondaryIndex { // FIXME: this imply one column definition per index ByteBuffer name = columnDefs.iterator().next().name.bytes; - return new DecoratedKey(new LocalToken(baseCfs.metadata.getColumnDefinition(name).type, value), value); + return new BufferDecoratedKey(new LocalToken(baseCfs.metadata.getColumnDefinition(name).type, value), value); } /** http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java b/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java index a97007e..39bc26b 100644 --- a/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java +++ b/src/java/org/apache/cassandra/db/index/SecondaryIndexManager.java @@ -496,7 +496,7 @@ public class SecondaryIndexManager } else { - ((PerColumnSecondaryIndex) index).delete(key.key, cell, opGroup); + ((PerColumnSecondaryIndex) index).delete(key.getKey(), cell, opGroup); } } } @@ -665,7 +665,7 @@ public class SecondaryIndexManager { try (OpOrder.Group opGroup = baseCfs.keyspace.writeOrder.start()) { - ((PerColumnSecondaryIndex) index).delete(key.key, cell, opGroup); + ((PerColumnSecondaryIndex) index).delete(key.getKey(), cell, opGroup); } } } @@ -674,7 +674,7 @@ public class SecondaryIndexManager public void updateRowLevelIndexes() { for (SecondaryIndex index : rowLevelIndexMap.values()) - ((PerRowSecondaryIndex) index).index(key.key, null); + ((PerRowSecondaryIndex) index).index(key.getKey(), null); } } @@ -698,7 +698,7 @@ public class SecondaryIndexManager for (SecondaryIndex index : indexFor(cell.name())) if (index instanceof PerColumnSecondaryIndex) - ((PerColumnSecondaryIndex) index).insert(key.key, cell, opGroup); + ((PerColumnSecondaryIndex) index).insert(key.getKey(), cell, opGroup); } public void update(Cell oldCell, Cell cell) @@ -711,9 +711,9 @@ public class SecondaryIndexManager if (index instanceof PerColumnSecondaryIndex) { if (!cell.isMarkedForDelete(System.currentTimeMillis())) - ((PerColumnSecondaryIndex) index).update(key.key, oldCell, cell, opGroup); + ((PerColumnSecondaryIndex) index).update(key.getKey(), oldCell, cell, opGroup); else - ((PerColumnSecondaryIndex) index).delete(key.key, oldCell, opGroup); + ((PerColumnSecondaryIndex) index).delete(key.getKey(), oldCell, opGroup); } } } @@ -725,13 +725,13 @@ public class SecondaryIndexManager for (SecondaryIndex index : indexFor(cell.name())) if (index instanceof PerColumnSecondaryIndex) - ((PerColumnSecondaryIndex) index).delete(key.key, cell, opGroup); + ((PerColumnSecondaryIndex) index).delete(key.getKey(), cell, opGroup); } public void updateRowLevelIndexes() { for (SecondaryIndex index : rowLevelIndexMap.values()) - ((PerRowSecondaryIndex) index).index(key.key, cf); + ((PerRowSecondaryIndex) index).index(key.getKey(), cf); } } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnClusteringKey.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnClusteringKey.java b/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnClusteringKey.java index a795d7f..d967971 100644 --- a/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnClusteringKey.java +++ b/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnClusteringKey.java @@ -86,7 +86,7 @@ public class CompositesIndexOnClusteringKey extends CompositesIndex for (int i = 0; i < columnDef.position(); i++) builder.add(indexEntry.name().get(i + 1)); - builder.add(indexedValue.key); + builder.add(indexedValue.getKey()); for (int i = columnDef.position() + 1; i < ckCount; i++) builder.add(indexEntry.name().get(i)); http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionKey.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionKey.java b/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionKey.java index c8fc56c..2aff39d 100644 --- a/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionKey.java +++ b/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionKey.java @@ -99,7 +99,7 @@ public class CompositesIndexOnCollectionKey extends CompositesIndex public boolean isStale(IndexedEntry entry, ColumnFamily data, long now) { - CellName name = data.getComparator().create(entry.indexedEntryPrefix, columnDef, entry.indexValue.key); + CellName name = data.getComparator().create(entry.indexedEntryPrefix, columnDef, entry.indexValue.getKey()); Cell liveCell = data.getColumn(name); return (liveCell == null || liveCell.isMarkedForDelete(now)); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionValue.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionValue.java b/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionValue.java index 9536e2e..67293aa 100644 --- a/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionValue.java +++ b/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnCollectionValue.java @@ -103,6 +103,6 @@ public class CompositesIndexOnCollectionValue extends CompositesIndex return true; ByteBuffer liveValue = liveCell.value(); - return ((CollectionType)columnDef.type).valueComparator().compare(entry.indexValue.key, liveValue) != 0; + return ((CollectionType)columnDef.type).valueComparator().compare(entry.indexValue.getKey(), liveValue) != 0; } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnRegular.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnRegular.java b/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnRegular.java index fc2f9db..0cfd240 100644 --- a/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnRegular.java +++ b/src/java/org/apache/cassandra/db/index/composites/CompositesIndexOnRegular.java @@ -95,6 +95,6 @@ public class CompositesIndexOnRegular extends CompositesIndex return true; ByteBuffer liveValue = liveCell.value(); - return columnDef.type.compare(entry.indexValue.key, liveValue) != 0; + return columnDef.type.compare(entry.indexValue.getKey(), liveValue) != 0; } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java index 9de2bd0..22d4361 100644 --- a/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java +++ b/src/java/org/apache/cassandra/db/index/composites/CompositesSearcher.java @@ -111,8 +111,8 @@ public class CompositesSearcher extends SecondaryIndexSearcher * indexed row. */ final AbstractBounds range = filter.dataRange.keyRange(); - ByteBuffer startKey = range.left instanceof DecoratedKey ? ((DecoratedKey)range.left).key : ByteBufferUtil.EMPTY_BYTE_BUFFER; - ByteBuffer endKey = range.right instanceof DecoratedKey ? ((DecoratedKey)range.right).key : ByteBufferUtil.EMPTY_BYTE_BUFFER; + ByteBuffer startKey = range.left instanceof DecoratedKey ? ((DecoratedKey)range.left).getKey() : ByteBufferUtil.EMPTY_BYTE_BUFFER; + ByteBuffer endKey = range.right instanceof DecoratedKey ? ((DecoratedKey)range.right).getKey() : ByteBufferUtil.EMPTY_BYTE_BUFFER; final CellNameType baseComparator = baseCfs.getComparator(); final CellNameType indexComparator = index.getIndexCfs().getComparator(); @@ -243,14 +243,14 @@ public class CompositesSearcher extends SecondaryIndexSearcher } else { - logger.debug("Skipping entry {} before assigned scan range", dk.token); + logger.debug("Skipping entry {} before assigned scan range", dk.getToken()); continue; } } // Check if this entry cannot be a hit due to the original cell filter Composite start = entry.indexedEntryPrefix; - if (!filter.columnFilter(dk.key).maySelectPrefix(baseComparator, start)) + if (!filter.columnFilter(dk.getKey()).maySelectPrefix(baseComparator, start)) continue; // If we've record the previous prefix, it means we're dealing with an index on the collection value. In http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java index 27b61e4..d166c08 100644 --- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java +++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java @@ -85,8 +85,8 @@ public class KeysSearcher extends SecondaryIndexSearcher */ final AbstractBounds range = filter.dataRange.keyRange(); CellNameType type = index.getIndexCfs().getComparator(); - final Composite startKey = range.left instanceof DecoratedKey ? type.make(((DecoratedKey)range.left).key) : Composites.EMPTY; - final Composite endKey = range.right instanceof DecoratedKey ? type.make(((DecoratedKey)range.right).key) : Composites.EMPTY; + final Composite startKey = range.left instanceof DecoratedKey ? type.make(((DecoratedKey)range.left).getKey()) : Composites.EMPTY; + final Composite endKey = range.right instanceof DecoratedKey ? type.make(((DecoratedKey)range.right).getKey()) : Composites.EMPTY; final CellName primaryColumn = baseCfs.getComparator().cellFromByteBuffer(primary.column); @@ -168,7 +168,7 @@ public class KeysSearcher extends SecondaryIndexSearcher } if (!range.contains(dk)) { - logger.trace("Skipping entry {} outside of assigned scan range", dk.token); + logger.trace("Skipping entry {} outside of assigned scan range", dk.getToken()); continue; } @@ -188,11 +188,11 @@ public class KeysSearcher extends SecondaryIndexSearcher data.addAll(cf); } - if (((KeysIndex)index).isIndexEntryStale(indexKey.key, data, filter.timestamp)) + if (((KeysIndex)index).isIndexEntryStale(indexKey.getKey(), data, filter.timestamp)) { // delete the index entry w/ its own timestamp - Cell dummyCell = new Cell(primaryColumn, indexKey.key, cell.timestamp()); - ((PerColumnSecondaryIndex)index).delete(dk.key, dummyCell, writeOp); + Cell dummyCell = new BufferCell(primaryColumn, indexKey.getKey(), cell.timestamp()); + ((PerColumnSecondaryIndex)index).delete(dk.getKey(), dummyCell, writeOp); continue; } return new Row(dk, data); http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java b/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java index a686b90..60bce9d 100644 --- a/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java +++ b/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java @@ -63,7 +63,7 @@ public class LocalByPartionerType extends AbstractType implements Serializ { if (value instanceof DecoratedKey) { - return keyValidator.getString(((DecoratedKey)value).key); + return keyValidator.getString(((DecoratedKey)value).getKey()); } else { http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java b/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java index 0adab50..94be94d 100644 --- a/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java +++ b/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java @@ -22,6 +22,7 @@ import java.nio.ByteBuffer; import java.util.*; import org.apache.cassandra.config.*; +import org.apache.cassandra.db.BufferDecoratedKey; import org.apache.cassandra.utils.ByteBufferUtil; import org.apache.commons.lang3.ArrayUtils; @@ -42,7 +43,7 @@ public abstract class AbstractByteOrderedPartitioner extends AbstractPartitioner public DecoratedKey decorateKey(ByteBuffer key) { - return new DecoratedKey(getToken(key), key); + return new BufferDecoratedKey(getToken(key), key); } public BytesToken midpoint(Token ltoken, Token rtoken) http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/dht/LocalPartitioner.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/dht/LocalPartitioner.java b/src/java/org/apache/cassandra/dht/LocalPartitioner.java index 2e75bd3..c32e792 100644 --- a/src/java/org/apache/cassandra/dht/LocalPartitioner.java +++ b/src/java/org/apache/cassandra/dht/LocalPartitioner.java @@ -22,6 +22,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import org.apache.cassandra.db.BufferDecoratedKey; import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.utils.ByteBufferUtil; @@ -40,7 +41,7 @@ public class LocalPartitioner extends AbstractPartitioner public DecoratedKey decorateKey(ByteBuffer key) { - return new DecoratedKey(getToken(key), key); + return new BufferDecoratedKey(getToken(key), key); } public Token midpoint(Token left, Token right) http://git-wip-us.apache.org/repos/asf/cassandra/blob/8541cca7/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java b/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java index de22a34..5a3c4bb 100644 --- a/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java +++ b/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import org.apache.cassandra.db.BufferDecoratedKey; import org.apache.cassandra.db.DecoratedKey; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.LongType; @@ -46,7 +47,7 @@ public class Murmur3Partitioner extends AbstractPartitioner public DecoratedKey decorateKey(ByteBuffer key) { - return new DecoratedKey(getToken(key), key); + return new BufferDecoratedKey(getToken(key), key); } public Token midpoint(Token lToken, Token rToken)