Hello,

I am reading through getRangeSlice() in StorageProxy, and I am trying to
do roughly the same thing for a join operation I am trying to implement in
Cassandra.

I see that getRangeSlice() loops through all available ranges, and for
each range, it sends a request to the applicable nodes and then handles
their answer *before* advancing to the next range. That may be fine for
getRangeSlice(), but I'd like to send requests for all ranges at once and
collect and handle the responses asynchronoysly (when they arrive).

I tried the following (pseudocode mixed with code):

<create a list of handlers>

for (AbstractBounds range : ranges)
{
    <create handler for this range>

    for (InetAddress endpoint : entry.getValue())
    {
        MessagingService.instance.sendRR(message, endpoint, handler);
    }

    handlers.add(handler);
}

for(QRH handler : handlers)
{
    List<ByteBuffer> response = handler.get();
}

However my client gets a TimedOutException and I think Cassandra blocks
during the resolve() in get().

I am using 0.7.0rc1, however I don't think this code would have changed much.

Any ideas?

Alexander

Reply via email to