Search in sources :

Example 11 with Range

use of org.apache.cassandra.dht.Range in project cassandra by apache.

the class TokenMetadata method pendingRangeChanges.

/** @return the number of nodes bootstrapping into source's primary range */
public int pendingRangeChanges(InetAddress source) {
    int n = 0;
    Collection<Range<Token>> sourceRanges = getPrimaryRangesFor(getTokens(source));
    lock.readLock().lock();
    try {
        for (Token token : bootstrapTokens.keySet()) for (Range<Token> range : sourceRanges) if (range.contains(token))
            n++;
    } finally {
        lock.readLock().unlock();
    }
    return n;
}
Also used : Token(org.apache.cassandra.dht.Token) Range(org.apache.cassandra.dht.Range)

Example 12 with Range

use of org.apache.cassandra.dht.Range in project cassandra by apache.

the class TokenMetadata method getPendingRangesMM.

public Multimap<Range<Token>, InetAddress> getPendingRangesMM(String keyspaceName) {
    Multimap<Range<Token>, InetAddress> map = HashMultimap.create();
    PendingRangeMaps pendingRangeMaps = this.pendingRanges.get(keyspaceName);
    if (pendingRangeMaps != null) {
        for (Map.Entry<Range<Token>, List<InetAddress>> entry : pendingRangeMaps) {
            Range<Token> range = entry.getKey();
            for (InetAddress address : entry.getValue()) {
                map.put(range, address);
            }
        }
    }
    return map;
}
Also used : Token(org.apache.cassandra.dht.Token) Range(org.apache.cassandra.dht.Range) InetAddress(java.net.InetAddress) BiMultiValMap(org.apache.cassandra.utils.BiMultiValMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) SortedBiMultiValMap(org.apache.cassandra.utils.SortedBiMultiValMap) ConcurrentMap(java.util.concurrent.ConcurrentMap)

Example 13 with Range

use of org.apache.cassandra.dht.Range in project cassandra by apache.

the class StreamSession method getSSTableSectionsForRanges.

@VisibleForTesting
public static List<SSTableStreamingSections> getSSTableSectionsForRanges(Collection<Range<Token>> ranges, Collection<ColumnFamilyStore> stores, long overriddenRepairedAt, UUID pendingRepair) {
    Refs<SSTableReader> refs = new Refs<>();
    try {
        for (ColumnFamilyStore cfStore : stores) {
            final List<Range<PartitionPosition>> keyRanges = new ArrayList<>(ranges.size());
            for (Range<Token> range : ranges) keyRanges.add(Range.makeRowRange(range));
            refs.addAll(cfStore.selectAndReference(view -> {
                Set<SSTableReader> sstables = Sets.newHashSet();
                SSTableIntervalTree intervalTree = SSTableIntervalTree.build(view.select(SSTableSet.CANONICAL));
                Predicate<SSTableReader> predicate;
                if (pendingRepair == ActiveRepairService.NO_PENDING_REPAIR) {
                    predicate = Predicates.alwaysTrue();
                } else {
                    predicate = s -> s.isPendingRepair() && s.getSSTableMetadata().pendingRepair.equals(pendingRepair);
                }
                for (Range<PartitionPosition> keyRange : keyRanges) {
                    for (SSTableReader sstable : Iterables.filter(View.sstablesInBounds(keyRange.left, keyRange.right, intervalTree), predicate)) {
                        sstables.add(sstable);
                    }
                }
                if (logger.isDebugEnabled())
                    logger.debug("ViewFilter for {}/{} sstables", sstables.size(), Iterables.size(view.select(SSTableSet.CANONICAL)));
                return sstables;
            }).refs);
        }
        List<SSTableStreamingSections> sections = new ArrayList<>(refs.size());
        for (SSTableReader sstable : refs) {
            long repairedAt = overriddenRepairedAt;
            if (overriddenRepairedAt == ActiveRepairService.UNREPAIRED_SSTABLE)
                repairedAt = sstable.getSSTableMetadata().repairedAt;
            sections.add(new SSTableStreamingSections(refs.get(sstable), sstable.getPositionsForRanges(ranges), sstable.estimatedKeysForRanges(ranges), repairedAt));
        }
        return sections;
    } catch (Throwable t) {
        refs.release();
        throw t;
    }
}
Also used : Refs(org.apache.cassandra.utils.concurrent.Refs) Token(org.apache.cassandra.dht.Token) Range(org.apache.cassandra.dht.Range) SSTableReader(org.apache.cassandra.io.sstable.format.SSTableReader) PartitionPosition(org.apache.cassandra.db.PartitionPosition) SSTableIntervalTree(org.apache.cassandra.db.lifecycle.SSTableIntervalTree) ColumnFamilyStore(org.apache.cassandra.db.ColumnFamilyStore) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 14 with Range

use of org.apache.cassandra.dht.Range in project cassandra by apache.

the class PendingRangesBench method searchTokenForOldPendingRanges.

@Benchmark
public void searchTokenForOldPendingRanges(final Blackhole bh) {
    int randomToken = ThreadLocalRandom.current().nextInt(maxToken * 10 + 5);
    Token searchToken = new RandomPartitioner.BigIntegerToken(Integer.toString(randomToken));
    Set<InetAddress> endpoints = new HashSet<>();
    for (Map.Entry<Range<Token>, Collection<InetAddress>> entry : oldPendingRanges.asMap().entrySet()) {
        if (entry.getKey().contains(searchToken))
            endpoints.addAll(entry.getValue());
    }
    bh.consume(endpoints);
}
Also used : Collection(java.util.Collection) Token(org.apache.cassandra.dht.Token) Range(org.apache.cassandra.dht.Range) InetAddress(java.net.InetAddress) Map(java.util.Map) HashSet(java.util.HashSet)

Example 15 with Range

use of org.apache.cassandra.dht.Range in project cassandra by apache.

the class AntiCompactionTest method antiCompactOne.

private void antiCompactOne(long repairedAt, UUID pendingRepair) throws Exception {
    assert repairedAt != UNREPAIRED_SSTABLE || pendingRepair != null;
    ColumnFamilyStore store = prepareColumnFamilyStore();
    Collection<SSTableReader> sstables = getUnrepairedSSTables(store);
    assertEquals(store.getLiveSSTables().size(), sstables.size());
    Range<Token> range = new Range<Token>(new BytesToken("0".getBytes()), new BytesToken("4".getBytes()));
    List<Range<Token>> ranges = Arrays.asList(range);
    int repairedKeys = 0;
    int pendingKeys = 0;
    int nonRepairedKeys = 0;
    try (LifecycleTransaction txn = store.getTracker().tryModify(sstables, OperationType.ANTICOMPACTION);
        Refs<SSTableReader> refs = Refs.ref(sstables)) {
        if (txn == null)
            throw new IllegalStateException();
        UUID parentRepairSession = UUID.randomUUID();
        CompactionManager.instance.performAnticompaction(store, ranges, refs, txn, repairedAt, pendingRepair, parentRepairSession);
    }
    assertEquals(2, store.getLiveSSTables().size());
    for (SSTableReader sstable : store.getLiveSSTables()) {
        try (ISSTableScanner scanner = sstable.getScanner()) {
            while (scanner.hasNext()) {
                UnfilteredRowIterator row = scanner.next();
                if (sstable.isRepaired() || sstable.isPendingRepair()) {
                    assertTrue(range.contains(row.partitionKey().getToken()));
                    repairedKeys += sstable.isRepaired() ? 1 : 0;
                    pendingKeys += sstable.isPendingRepair() ? 1 : 0;
                } else {
                    assertFalse(range.contains(row.partitionKey().getToken()));
                    nonRepairedKeys++;
                }
            }
        }
    }
    for (SSTableReader sstable : store.getLiveSSTables()) {
        assertFalse(sstable.isMarkedCompacted());
        assertEquals(1, sstable.selfRef().globalCount());
    }
    assertEquals(0, store.getTracker().getCompacting().size());
    assertEquals(repairedKeys, repairedAt != UNREPAIRED_SSTABLE ? 4 : 0);
    assertEquals(pendingKeys, pendingRepair != NO_PENDING_REPAIR ? 4 : 0);
    assertEquals(nonRepairedKeys, 6);
}
Also used : UnfilteredRowIterator(org.apache.cassandra.db.rows.UnfilteredRowIterator) LifecycleTransaction(org.apache.cassandra.db.lifecycle.LifecycleTransaction) BytesToken(org.apache.cassandra.dht.ByteOrderedPartitioner.BytesToken) Token(org.apache.cassandra.dht.Token) Range(org.apache.cassandra.dht.Range) SSTableReader(org.apache.cassandra.io.sstable.format.SSTableReader) BytesToken(org.apache.cassandra.dht.ByteOrderedPartitioner.BytesToken) UUID(java.util.UUID)

Aggregations

Range (org.apache.cassandra.dht.Range)120 Token (org.apache.cassandra.dht.Token)74 Test (org.junit.Test)63 InetAddress (java.net.InetAddress)35 SSTableReader (org.apache.cassandra.io.sstable.format.SSTableReader)28 TokenMetadata (org.apache.cassandra.locator.TokenMetadata)17 TreeRange (org.apache.cassandra.utils.MerkleTree.TreeRange)17 IPartitioner (org.apache.cassandra.dht.IPartitioner)14 UUID (java.util.UUID)12 ColumnFamilyStore (org.apache.cassandra.db.ColumnFamilyStore)12 StringToken (org.apache.cassandra.dht.OrderPreservingPartitioner.StringToken)9 IOException (java.io.IOException)8 ArrayList (java.util.ArrayList)8 LifecycleTransaction (org.apache.cassandra.db.lifecycle.LifecycleTransaction)8 BigIntegerToken (org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken)8 KeyspaceMetadata (org.apache.cassandra.schema.KeyspaceMetadata)8 LongToken (org.apache.cassandra.dht.Murmur3Partitioner.LongToken)7 BigInteger (java.math.BigInteger)6 HashSet (java.util.HashSet)6 BytesToken (org.apache.cassandra.dht.ByteOrderedPartitioner.BytesToken)6