http://git-wip-us.apache.org/repos/asf/cassandra/blob/f2a82ee7/interface/thrift/gen-java/org/apache/cassandra/thrift/cassandraConstants.java ---------------------------------------------------------------------- diff --cc interface/thrift/gen-java/org/apache/cassandra/thrift/cassandraConstants.java index a2c482e,0000000..81b0ffb mode 100644,000000..100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/cassandraConstants.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/cassandraConstants.java @@@ -1,61 -1,0 +1,61 @@@ +/** + * Autogenerated by Thrift Compiler (0.9.1) + * + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * @generated + */ +package org.apache.cassandra.thrift; +/* + * + * 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. + * + */ + + +import org.apache.commons.lang3.builder.HashCodeBuilder; +import org.apache.thrift.scheme.IScheme; +import org.apache.thrift.scheme.SchemeFactory; +import org.apache.thrift.scheme.StandardScheme; + +import org.apache.thrift.scheme.TupleScheme; +import org.apache.thrift.protocol.TTupleProtocol; +import org.apache.thrift.protocol.TProtocolException; +import org.apache.thrift.EncodingUtils; +import org.apache.thrift.TException; +import org.apache.thrift.async.AsyncMethodCallback; +import org.apache.thrift.server.AbstractNonblockingServer.*; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; +import java.util.EnumMap; +import java.util.Set; +import java.util.HashSet; +import java.util.EnumSet; +import java.util.Collections; +import java.util.BitSet; +import java.nio.ByteBuffer; +import java.util.Arrays; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class cassandraConstants { + - public static final String VERSION = "19.38.0"; ++ public static final String VERSION = "19.39.0"; + +}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/f2a82ee7/src/java/org/apache/cassandra/hadoop/AbstractColumnFamilyInputFormat.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/f2a82ee7/src/java/org/apache/cassandra/service/StorageService.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/service/StorageService.java index 18ce97b,b85f478..c341684 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@@ -34,17 -34,13 +34,18 @@@ import javax.management.Notification import javax.management.NotificationBroadcasterSupport; import javax.management.ObjectName; +import static java.nio.charset.StandardCharsets.ISO_8859_1; + +import com.google.common.annotations.VisibleForTesting; + import com.google.common.base.Predicate; import com.google.common.collect.*; - import com.google.common.util.concurrent.AtomicDouble; -import org.apache.cassandra.db.index.SecondaryIndex; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.Uninterruptibles; + +import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Level; -import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@@ -1063,12 -1081,57 +1064,57 @@@ public class StorageService extends Not public Map<Range<Token>, List<InetAddress>> getRangeToAddressMap(String keyspace) { + return getRangeToAddressMap(keyspace, tokenMetadata.sortedTokens()); + } + + public Map<Range<Token>, List<InetAddress>> getRangeToAddressMapInLocalDC(String keyspace) + { + Predicate<InetAddress> isLocalDC = new Predicate<InetAddress>() + { + public boolean apply(InetAddress address) + { + return isLocalDC(address); + } + }; + + Map<Range<Token>, List<InetAddress>> origMap = getRangeToAddressMap(keyspace, getTokensInLocalDC()); + Map<Range<Token>, List<InetAddress>> filteredMap = Maps.newHashMap(); + for (Map.Entry<Range<Token>, List<InetAddress>> entry : origMap.entrySet()) + { + List<InetAddress> endpointsInLocalDC = Lists.newArrayList(Collections2.filter(entry.getValue(), isLocalDC)); + filteredMap.put(entry.getKey(), endpointsInLocalDC); + } + + return filteredMap; + } + + private List<Token> getTokensInLocalDC() + { + List<Token> filteredTokens = Lists.newArrayList(); + for (Token token : tokenMetadata.sortedTokens()) + { + InetAddress endpoint = tokenMetadata.getEndpoint(token); + if (isLocalDC(endpoint)) + filteredTokens.add(token); + } + return filteredTokens; + } + + private boolean isLocalDC(InetAddress targetHost) + { + String remoteDC = DatabaseDescriptor.getEndpointSnitch().getDatacenter(targetHost); + String localDC = DatabaseDescriptor.getEndpointSnitch().getDatacenter(FBUtilities.getBroadcastAddress()); + return remoteDC.equals(localDC); + } + + private Map<Range<Token>, List<InetAddress>> getRangeToAddressMap(String keyspace, List<Token> sortedTokens) + { // some people just want to get a visual representation of things. Allow null and set it to the first - // non-system table. + // non-system keyspace. if (keyspace == null) - keyspace = Schema.instance.getNonSystemTables().get(0); + keyspace = Schema.instance.getNonSystemKeyspaces().get(0); - List<Range<Token>> ranges = getAllRanges(tokenMetadata.sortedTokens()); + List<Range<Token>> ranges = getAllRanges(sortedTokens); return constructRangeToEndpointMap(keyspace, ranges); } @@@ -1109,7 -1173,20 +1156,20 @@@ */ public List<TokenRange> describeRing(String keyspace) throws InvalidRequestException { + return describeRing(keyspace, false); + } + + /** + * The same as {@code describeRing(String)} but considers only the part of the ring formed by nodes in the local DC. + */ + public List<TokenRange> describeLocalRing(String keyspace) throws InvalidRequestException + { + return describeRing(keyspace, true); + } + + private List<TokenRange> describeRing(String keyspace, boolean includeOnlyLocalDC) throws InvalidRequestException + { - if (keyspace == null || Table.open(keyspace).getReplicationStrategy() instanceof LocalStrategy) + if (keyspace == null || Keyspace.open(keyspace).getReplicationStrategy() instanceof LocalStrategy) throw new InvalidRequestException("There is no ring for the keyspace: " + keyspace); List<TokenRange> ranges = new ArrayList<TokenRange>(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/f2a82ee7/src/java/org/apache/cassandra/thrift/CassandraServer.java ----------------------------------------------------------------------
