Search in sources :

Example 1 with Token

use of org.apache.cassandra.dht.Token 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)

Example 2 with Token

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

the class CompactionManagerGetSSTablesForValidationTest method registerRepair.

private void registerRepair(boolean incremental) throws Exception {
    sessionID = UUIDGen.getTimeUUID();
    Range<Token> range = new Range<>(MT, MT);
    ActiveRepairService.instance.registerParentRepairSession(sessionID, coordinator, Lists.newArrayList(cfs), Sets.newHashSet(range), incremental, incremental ? System.currentTimeMillis() : ActiveRepairService.UNREPAIRED_SSTABLE, true);
    desc = new RepairJobDesc(sessionID, UUIDGen.getTimeUUID(), ks, tbl, Collections.singleton(range));
}
Also used : RepairJobDesc(org.apache.cassandra.repair.RepairJobDesc) Token(org.apache.cassandra.dht.Token) Range(org.apache.cassandra.dht.Range)

Example 3 with Token

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

the class OldNetworkTopologyStrategyTest method testMoveMiddleOfRing.

@SuppressWarnings("unchecked")
@Test
public void testMoveMiddleOfRing() throws UnknownHostException {
    // moves to another position in the middle of the ring : should stream all its data, and fetch all its new data
    int movingNodeIdx = 1;
    int movingNodeIdxAfterMove = 4;
    BigIntegerToken newToken = new BigIntegerToken("90070591730234615865843651857942052864");
    BigIntegerToken[] tokens = initTokens();
    BigIntegerToken[] tokensAfterMove = initTokensAfterMove(tokens, movingNodeIdx, newToken);
    Pair<Set<Range<Token>>, Set<Range<Token>>> ranges = calculateStreamAndFetchRanges(tokens, tokensAfterMove, movingNodeIdx);
    // sort the results, so they can be compared
    Range<Token>[] toStream = ranges.left.toArray(new Range[0]);
    Range<Token>[] toFetch = ranges.right.toArray(new Range[0]);
    Arrays.sort(toStream);
    Arrays.sort(toFetch);
    // build expected ranges
    Range<Token>[] toStreamExpected = new Range[2];
    toStreamExpected[0] = new Range<Token>(getToken(movingNodeIdx - 2, tokens), getToken(movingNodeIdx - 1, tokens));
    toStreamExpected[1] = new Range<Token>(getToken(movingNodeIdx - 1, tokens), getToken(movingNodeIdx, tokens));
    Arrays.sort(toStreamExpected);
    Range<Token>[] toFetchExpected = new Range[2];
    toFetchExpected[0] = new Range<Token>(getToken(movingNodeIdxAfterMove - 1, tokens), getToken(movingNodeIdxAfterMove, tokens));
    toFetchExpected[1] = new Range<Token>(getToken(movingNodeIdxAfterMove, tokensAfterMove), getToken(movingNodeIdx, tokensAfterMove));
    Arrays.sort(toFetchExpected);
    assertEquals(Arrays.equals(toStream, toStreamExpected), true);
    assertEquals(Arrays.equals(toFetch, toFetchExpected), true);
}
Also used : Set(java.util.Set) BigIntegerToken(org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken) BigIntegerToken(org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken) Token(org.apache.cassandra.dht.Token) Range(org.apache.cassandra.dht.Range) Test(org.junit.Test)

Example 4 with Token

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

the class OldNetworkTopologyStrategyTest method testMoveAfterNextNeighbors.

@SuppressWarnings("unchecked")
@Test
public void testMoveAfterNextNeighbors() throws UnknownHostException {
    // moves after its next neighbor in the ring
    int movingNodeIdx = 1;
    int movingNodeIdxAfterMove = 2;
    BigIntegerToken newToken = new BigIntegerToken("52535295865117307932921825928971026432");
    BigIntegerToken[] tokens = initTokens();
    BigIntegerToken[] tokensAfterMove = initTokensAfterMove(tokens, movingNodeIdx, newToken);
    Pair<Set<Range<Token>>, Set<Range<Token>>> ranges = calculateStreamAndFetchRanges(tokens, tokensAfterMove, movingNodeIdx);
    // sort the results, so they can be compared
    Range<Token>[] toStream = ranges.left.toArray(new Range[0]);
    Range<Token>[] toFetch = ranges.right.toArray(new Range[0]);
    Arrays.sort(toStream);
    Arrays.sort(toFetch);
    // build expected ranges
    Range<Token>[] toStreamExpected = new Range[1];
    toStreamExpected[0] = new Range<Token>(getToken(movingNodeIdx - 2, tokens), getToken(movingNodeIdx - 1, tokens));
    Arrays.sort(toStreamExpected);
    Range<Token>[] toFetchExpected = new Range[2];
    toFetchExpected[0] = new Range<Token>(getToken(movingNodeIdxAfterMove - 1, tokens), getToken(movingNodeIdxAfterMove, tokens));
    toFetchExpected[1] = new Range<Token>(getToken(movingNodeIdxAfterMove, tokensAfterMove), getToken(movingNodeIdx, tokensAfterMove));
    Arrays.sort(toFetchExpected);
    assertEquals(Arrays.equals(toStream, toStreamExpected), true);
    assertEquals(Arrays.equals(toFetch, toFetchExpected), true);
}
Also used : Set(java.util.Set) BigIntegerToken(org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken) BigIntegerToken(org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken) Token(org.apache.cassandra.dht.Token) Range(org.apache.cassandra.dht.Range) Test(org.junit.Test)

Example 5 with Token

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

the class OldNetworkTopologyStrategyTest method testMoveLeft.

/**
     * test basic methods to move a node. For sure, it's not the best place, but it's easy to test
     *
     * @throws java.net.UnknownHostException
     */
@Test
public void testMoveLeft() throws UnknownHostException {
    // Moves to the left : nothing to fetch, last part to stream
    int movingNodeIdx = 1;
    BigIntegerToken newToken = new BigIntegerToken("21267647932558653966460912964485513216");
    BigIntegerToken[] tokens = initTokens();
    BigIntegerToken[] tokensAfterMove = initTokensAfterMove(tokens, movingNodeIdx, newToken);
    Pair<Set<Range<Token>>, Set<Range<Token>>> ranges = calculateStreamAndFetchRanges(tokens, tokensAfterMove, movingNodeIdx);
    assertEquals(ranges.left.iterator().next().left, tokensAfterMove[movingNodeIdx]);
    assertEquals(ranges.left.iterator().next().right, tokens[movingNodeIdx]);
    assertEquals("No data should be fetched", ranges.right.size(), 0);
}
Also used : Set(java.util.Set) BigIntegerToken(org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken) BigIntegerToken(org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken) Token(org.apache.cassandra.dht.Token) Test(org.junit.Test)

Aggregations

Token (org.apache.cassandra.dht.Token)308 Range (org.apache.cassandra.dht.Range)137 Test (org.junit.Test)117 InetAddressAndPort (org.apache.cassandra.locator.InetAddressAndPort)68 SSTableReader (org.apache.cassandra.io.sstable.format.SSTableReader)52 ArrayList (java.util.ArrayList)42 UUID (java.util.UUID)40 TokenMetadata (org.apache.cassandra.locator.TokenMetadata)39 IPartitioner (org.apache.cassandra.dht.IPartitioner)36 RangesAtEndpoint (org.apache.cassandra.locator.RangesAtEndpoint)34 BigIntegerToken (org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken)33 InetAddress (java.net.InetAddress)32 ColumnFamilyStore (org.apache.cassandra.db.ColumnFamilyStore)29 Keyspace (org.apache.cassandra.db.Keyspace)29 HashSet (java.util.HashSet)27 Replica (org.apache.cassandra.locator.Replica)27 Set (java.util.Set)22 EndpointsForToken (org.apache.cassandra.locator.EndpointsForToken)22 Map (java.util.Map)21 List (java.util.List)18