token_metadata: Implement pending_endpoints_for
It is used in storage_proxy::create_write_response_handler. The second argument should be keyspace name instead of the keyspace class. Refs: #539
This commit is contained in:
@@ -489,6 +489,19 @@ void token_metadata::add_moving_endpoint(token t, inet_address endpoint) {
|
||||
_moving_endpoints[t] = endpoint;
|
||||
}
|
||||
|
||||
std::vector<gms::inet_address> token_metadata::pending_endpoints_for(const token& token, const sstring& keyspace_name) {
|
||||
std::vector<gms::inet_address> endpoints;
|
||||
auto ranges = get_pending_ranges(keyspace_name);
|
||||
for (auto& x : ranges) {
|
||||
if (x.first.contains(token, dht::token_comparator())) {
|
||||
for (auto& addr : x.second) {
|
||||
endpoints.push_back(addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
return endpoints;
|
||||
}
|
||||
|
||||
/////////////////// class topology /////////////////////////////////////////////
|
||||
inline void topology::clear() {
|
||||
_dc_endpoints.clear();
|
||||
|
||||
@@ -882,25 +882,7 @@ public:
|
||||
return sb.toString();
|
||||
}
|
||||
#endif
|
||||
std::vector<gms::inet_address> pending_endpoints_for(const token& token, const keyspace& ks)
|
||||
{
|
||||
// FIXME: implement it
|
||||
return std::vector<gms::inet_address>();
|
||||
#if 0
|
||||
Map<Range<Token>, Collection<InetAddress>> ranges = getPendingRanges(keyspaceName);
|
||||
if (ranges.isEmpty())
|
||||
return Collections.emptyList();
|
||||
|
||||
Set<InetAddress> endpoints = new HashSet<InetAddress>();
|
||||
for (Map.Entry<Range<Token>, Collection<InetAddress>> entry : ranges.entrySet())
|
||||
{
|
||||
if (entry.getKey().contains(token))
|
||||
endpoints.addAll(entry.getValue());
|
||||
}
|
||||
|
||||
return endpoints;
|
||||
#endif
|
||||
}
|
||||
std::vector<gms::inet_address> pending_endpoints_for(const token& token, const sstring& keyspace_name);
|
||||
#if 0
|
||||
/**
|
||||
* @deprecated retained for benefit of old tests
|
||||
|
||||
@@ -760,10 +760,12 @@ storage_proxy::mutate_locally(std::vector<mutation> mutations) {
|
||||
*/
|
||||
storage_proxy::response_id_type
|
||||
storage_proxy::create_write_response_handler(const mutation& m, db::consistency_level cl, db::write_type type) {
|
||||
keyspace& ks = _db.local().find_keyspace(m.schema()->ks_name());
|
||||
auto keyspace_name = m.schema()->ks_name();
|
||||
keyspace& ks = _db.local().find_keyspace(keyspace_name);
|
||||
auto& rs = ks.get_replication_strategy();
|
||||
std::vector<gms::inet_address> natural_endpoints = rs.get_natural_endpoints(m.token());
|
||||
std::vector<gms::inet_address> pending_endpoints = get_local_storage_service().get_token_metadata().pending_endpoints_for(m.token(), ks);
|
||||
std::vector<gms::inet_address> pending_endpoints =
|
||||
get_local_storage_service().get_token_metadata().pending_endpoints_for(m.token(), keyspace_name);
|
||||
|
||||
auto all = boost::range::join(natural_endpoints, pending_endpoints);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user