Search in sources :

Example 51 with Token

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

the class NoReplicationTokenAllocator method createTokenInfos.

/**
     * Construct the token ring as a CircularList of TokenInfo,
     * and populate the ownership of the UnitInfo's provided
     */
private TokenInfo<Unit> createTokenInfos(Map<Unit, UnitInfo<Unit>> units) {
    if (units.isEmpty())
        return null;
    // build the circular list
    TokenInfo<Unit> prev = null;
    TokenInfo<Unit> first = null;
    for (Map.Entry<Token, Unit> en : sortedTokens.entrySet()) {
        Token t = en.getKey();
        UnitInfo<Unit> ni = units.get(en.getValue());
        TokenInfo<Unit> ti = new TokenInfo<>(t, ni);
        first = ti.insertAfter(first, prev);
        prev = ti;
    }
    TokenInfo<Unit> curr = first;
    tokensInUnits.clear();
    sortedUnits.clear();
    do {
        populateTokenInfoAndAdjustUnit(curr);
        curr = curr.next;
    } while (curr != first);
    for (UnitInfo<Unit> unitInfo : units.values()) {
        sortedUnits.add(new Weighted<UnitInfo>(unitInfo.ownership, unitInfo));
    }
    return first;
}
Also used : Token(org.apache.cassandra.dht.Token) NavigableMap(java.util.NavigableMap) Map(java.util.Map)

Example 52 with Token

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

the class ReplicationAwareTokenAllocator method createTokenInfos.

/**
     * Construct the token ring as a CircularList of TokenInfo,
     * and populate the ownership of the UnitInfo's provided
     */
private TokenInfo<Unit> createTokenInfos(Map<Unit, UnitInfo<Unit>> units, GroupInfo newUnitGroup) {
    // build the circular list
    TokenInfo<Unit> prev = null;
    TokenInfo<Unit> first = null;
    for (Map.Entry<Token, Unit> en : sortedTokens.entrySet()) {
        Token t = en.getKey();
        UnitInfo<Unit> ni = units.get(en.getValue());
        TokenInfo<Unit> ti = new TokenInfo<>(t, ni);
        first = ti.insertAfter(first, prev);
        prev = ti;
    }
    TokenInfo<Unit> curr = first;
    do {
        populateTokenInfoAndAdjustUnit(curr, newUnitGroup);
        curr = curr.next;
    } while (curr != first);
    return first;
}
Also used : Token(org.apache.cassandra.dht.Token)

Example 53 with Token

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

the class SSTableLoader method stream.

public StreamResultFuture stream(Set<InetAddress> toIgnore, StreamEventHandler... listeners) {
    client.init(keyspace);
    outputHandler.output("Established connection to initial hosts");
    StreamPlan plan = new StreamPlan("Bulk Load", 0, connectionsPerHost, false, false, false, null).connectionFactory(client.getConnectionFactory());
    Map<InetAddress, Collection<Range<Token>>> endpointToRanges = client.getEndpointToRangesMap();
    openSSTables(endpointToRanges);
    if (sstables.isEmpty()) {
        // return empty result
        return plan.execute();
    }
    outputHandler.output(String.format("Streaming relevant part of %sto %s", names(sstables), endpointToRanges.keySet()));
    for (Map.Entry<InetAddress, Collection<Range<Token>>> entry : endpointToRanges.entrySet()) {
        InetAddress remote = entry.getKey();
        if (toIgnore.contains(remote))
            continue;
        List<StreamSession.SSTableStreamingSections> endpointDetails = new LinkedList<>();
        // references are acquired when constructing the SSTableStreamingSections above
        for (StreamSession.SSTableStreamingSections details : streamingDetails.get(remote)) {
            endpointDetails.add(details);
        }
        plan.transferFiles(remote, endpointDetails);
    }
    plan.listeners(this, listeners);
    return plan.execute();
}
Also used : Token(org.apache.cassandra.dht.Token) InetAddress(java.net.InetAddress)

Example 54 with Token

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

the class RepairRunnable method runMayThrow.

protected void runMayThrow() throws Exception {
    final TraceState traceState;
    final UUID parentSession = UUIDGen.getTimeUUID();
    final String tag = "repair:" + cmd;
    final AtomicInteger progress = new AtomicInteger();
    // get valid column families, calculate neighbors, validation, prepare for repair + number of ranges to repair
    final int totalProgress = 4 + options.getRanges().size();
    String[] columnFamilies = options.getColumnFamilies().toArray(new String[options.getColumnFamilies().size()]);
    Iterable<ColumnFamilyStore> validColumnFamilies;
    try {
        validColumnFamilies = storageService.getValidColumnFamilies(false, false, keyspace, columnFamilies);
        progress.incrementAndGet();
    } catch (IllegalArgumentException e) {
        logger.error("Repair failed:", e);
        fireErrorAndComplete(tag, progress.get(), totalProgress, e.getMessage());
        return;
    }
    final long startTime = System.currentTimeMillis();
    String message = String.format("Starting repair command #%d (%s), repairing keyspace %s with %s", cmd, parentSession, keyspace, options);
    logger.info(message);
    if (options.isTraced()) {
        StringBuilder cfsb = new StringBuilder();
        for (ColumnFamilyStore cfs : validColumnFamilies) cfsb.append(", ").append(cfs.keyspace.getName()).append(".").append(cfs.name);
        UUID sessionId = Tracing.instance.newSession(Tracing.TraceType.REPAIR);
        traceState = Tracing.instance.begin("repair", ImmutableMap.of("keyspace", keyspace, "columnFamilies", cfsb.substring(2)));
        message = message + " tracing with " + sessionId;
        fireProgressEvent(tag, new ProgressEvent(ProgressEventType.START, 0, 100, message));
        Tracing.traceRepair(message);
        traceState.enableActivityNotification(tag);
        for (ProgressListener listener : listeners) traceState.addProgressListener(listener);
        Thread queryThread = createQueryThread(cmd, sessionId);
        queryThread.setName("RepairTracePolling");
        queryThread.start();
    } else {
        fireProgressEvent(tag, new ProgressEvent(ProgressEventType.START, 0, 100, message));
        traceState = null;
    }
    final Set<InetAddress> allNeighbors = new HashSet<>();
    List<Pair<Set<InetAddress>, ? extends Collection<Range<Token>>>> commonRanges = new ArrayList<>();
    //pre-calculate output of getLocalRanges and pass it to getNeighbors to increase performance and prevent
    //calculation multiple times
    Collection<Range<Token>> keyspaceLocalRanges = storageService.getLocalRanges(keyspace);
    try {
        for (Range<Token> range : options.getRanges()) {
            Set<InetAddress> neighbors = ActiveRepairService.getNeighbors(keyspace, keyspaceLocalRanges, range, options.getDataCenters(), options.getHosts());
            addRangeToNeighbors(commonRanges, range, neighbors);
            allNeighbors.addAll(neighbors);
        }
        progress.incrementAndGet();
    } catch (IllegalArgumentException e) {
        logger.error("Repair failed:", e);
        fireErrorAndComplete(tag, progress.get(), totalProgress, e.getMessage());
        return;
    }
    // Validate columnfamilies
    List<ColumnFamilyStore> columnFamilyStores = new ArrayList<>();
    try {
        Iterables.addAll(columnFamilyStores, validColumnFamilies);
        progress.incrementAndGet();
    } catch (IllegalArgumentException e) {
        fireErrorAndComplete(tag, progress.get(), totalProgress, e.getMessage());
        return;
    }
    String[] cfnames = new String[columnFamilyStores.size()];
    for (int i = 0; i < columnFamilyStores.size(); i++) {
        cfnames[i] = columnFamilyStores.get(i).name;
    }
    SystemDistributedKeyspace.startParentRepair(parentSession, keyspace, cfnames, options);
    long repairedAt;
    try {
        ActiveRepairService.instance.prepareForRepair(parentSession, FBUtilities.getBroadcastAddress(), allNeighbors, options, columnFamilyStores);
        repairedAt = ActiveRepairService.instance.getParentRepairSession(parentSession).getRepairedAt();
        progress.incrementAndGet();
    } catch (Throwable t) {
        SystemDistributedKeyspace.failParentRepair(parentSession, t);
        fireErrorAndComplete(tag, progress.get(), totalProgress, t.getMessage());
        return;
    }
    if (options.isIncremental()) {
        consistentRepair(parentSession, repairedAt, startTime, traceState, allNeighbors, commonRanges, cfnames);
    } else {
        normalRepair(parentSession, startTime, traceState, allNeighbors, commonRanges, cfnames);
    }
}
Also used : Token(org.apache.cassandra.dht.Token) ProgressEvent(org.apache.cassandra.utils.progress.ProgressEvent) Pair(org.apache.cassandra.utils.Pair) TraceState(org.apache.cassandra.tracing.TraceState) Range(org.apache.cassandra.dht.Range) ProgressListener(org.apache.cassandra.utils.progress.ProgressListener) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) ColumnFamilyStore(org.apache.cassandra.db.ColumnFamilyStore) InetAddress(java.net.InetAddress)

Example 55 with Token

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

the class SystemDistributedKeyspace method startRepairs.

public static void startRepairs(UUID id, UUID parent_id, String keyspaceName, String[] cfnames, Collection<Range<Token>> ranges, Iterable<InetAddress> endpoints) {
    String coordinator = FBUtilities.getBroadcastAddress().getHostAddress();
    Set<String> participants = Sets.newHashSet(coordinator);
    for (InetAddress endpoint : endpoints) participants.add(endpoint.getHostAddress());
    String query = "INSERT INTO %s.%s (keyspace_name, columnfamily_name, id, parent_id, range_begin, range_end, coordinator, participants, status, started_at) " + "VALUES (   '%s',          '%s',              %s, %s,        '%s',        '%s',      '%s',        { '%s' },     '%s',   toTimestamp(now()))";
    for (String cfname : cfnames) {
        for (Range<Token> range : ranges) {
            String fmtQry = format(query, SchemaConstants.DISTRIBUTED_KEYSPACE_NAME, REPAIR_HISTORY, keyspaceName, cfname, id.toString(), parent_id.toString(), range.left.toString(), range.right.toString(), coordinator, Joiner.on("', '").join(participants), RepairState.STARTED.toString());
            processSilent(fmtQry);
        }
    }
}
Also used : Token(org.apache.cassandra.dht.Token) InetAddress(java.net.InetAddress)

Aggregations

Token (org.apache.cassandra.dht.Token)173 Range (org.apache.cassandra.dht.Range)73 InetAddress (java.net.InetAddress)66 Test (org.junit.Test)65 BigIntegerToken (org.apache.cassandra.dht.RandomPartitioner.BigIntegerToken)27 TokenMetadata (org.apache.cassandra.locator.TokenMetadata)27 IPartitioner (org.apache.cassandra.dht.IPartitioner)26 SSTableReader (org.apache.cassandra.io.sstable.format.SSTableReader)23 ArrayList (java.util.ArrayList)16 UUID (java.util.UUID)16 VersionedValue (org.apache.cassandra.gms.VersionedValue)15 StringToken (org.apache.cassandra.dht.OrderPreservingPartitioner.StringToken)14 ColumnFamilyStore (org.apache.cassandra.db.ColumnFamilyStore)9 IOException (java.io.IOException)8 ByteBuffer (java.nio.ByteBuffer)8 BytesToken (org.apache.cassandra.dht.ByteOrderedPartitioner.BytesToken)8 AbstractReplicationStrategy (org.apache.cassandra.locator.AbstractReplicationStrategy)8 Set (java.util.Set)7 LongToken (org.apache.cassandra.dht.Murmur3Partitioner.LongToken)7 HashSet (java.util.HashSet)6