I would guess that sending a bunch of range requests simultaneously
overwhelms the targets (range scans are expensive), so you're timing
out simply because it couldn't finish all of them within rpc_timeout.

Solution: don't do that, or increase rpc_timeout.

On Wed, Jan 12, 2011 at 3:03 AM,  <alta...@ceid.upatras.gr> wrote:
> 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
>



-- 
Jonathan Ellis
Project Chair, Apache Cassandra
co-founder of Riptano, the source for professional Cassandra support
http://riptano.com

Reply via email to