From 4e4e31df22b27668fb9c13db30b598e7606ec1d4 Mon Sep 17 00:00:00 2001 From: Jaroslaw Bojar Date: Sat, 1 Mar 2014 01:59:27 +0100 Subject: [PATCH] Better support for virtual nodes (many ranges on same cassandra instance) --- .../apache/cassandra/hadoop/cql3/CqlRecordWriter.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java index d08e08a8f0bb..5d9b1bdd75f7 100644 --- a/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java +++ b/src/java/org/apache/cassandra/hadoop/cql3/CqlRecordWriter.java @@ -67,7 +67,7 @@ final class CqlRecordWriter extends AbstractColumnFamilyRecordWriter clients; + private final Map, RangeClient> clients; // host to prepared statement id mappings private ConcurrentHashMap preparedStatements = new ConcurrentHashMap(); @@ -100,7 +100,7 @@ final class CqlRecordWriter extends AbstractColumnFamilyRecordWriter(); + this.clients = new HashMap, RangeClient>(); try { @@ -165,13 +165,14 @@ public void write(Map keyColumns, List values) t Range range = ringCache.getRange(getPartitionKey(keyColumns)); // get the client for the given range, or create a new one - RangeClient client = clients.get(range); + final List endpoints = ringCache.getEndpoint(range); + RangeClient client = clients.get(endpoints); if (client == null) { // haven't seen keys for this range: create new client - client = new RangeClient(ringCache.getEndpoint(range)); + client = new RangeClient(endpoints); client.start(); - clients.put(range, client); + clients.put(endpoints, client); } // add primary key columns to the bind variables