On Tue, Jul 24, 2012 at 8:48 PM, Julian <jpell...@gmail.com> wrote: > I'm using riakc_pb_socket to queue up several requests and rely on the > built-in queueing, which should hopefully eventually service all requests. > However I have a scenario in which a couple processes that queue a request > are never terminating the call on the socket...even though a request issued > subsequently gets through.
Hi, Julian. I have one possible answer for you. Could you please try wrapping your call to riakc_pb_socket:search/5 in a try-catch block? Deep inside riakc_pb_socket, that call becomes a gen_server:call to the socket server. If that call times out (or encounters a few other errors), the calling process (your code) exits with an exception. A timeout here should be a rare occurrence, because the socket server should be normally be unblocked, ready to handle (enqueue) requests, but it's possible, and there are other errors that can trigger the same behavior. So, try setting things up as: populate_instance(InstanceBin, State) -> error_logger:info_msg(binary_to_list(InstanceBin) ++ " about to wait"), try riakc_pb_socket:search(...) of {ok, MapredResult} -> error_logger:info_msg(binary_to_list(InstanceBin) ++ " done waiting"), ...process MapredResult...; {error, _} -> error_logger:info_msg(binary_to_list(InstanceBin) ++ " encountered error") catch exit:_ -> error_logger:info_msg(binary_to_list(InstanceBin) ++ " failed call, retrying..."), populate_instance(InstanceBin, State) end. (obviously needs some safety valves to prevent infinite retries, etc., but you get the idea) I consider this a little bit of a long shot, since your timeout is so long, but it's the only way I've been able to recreate such a situation so far. -Bryan _______________________________________________ riak-users mailing list riak-users@lists.basho.com http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com