diff --git a/src/eredis_cluster.erl b/src/eredis_cluster.erl index 5420458..5051077 100644 --- a/src/eredis_cluster.erl +++ b/src/eredis_cluster.erl @@ -372,6 +372,7 @@ query_noreply(Command, PoolKey) -> Transaction = fun(Worker) -> qw_noreply(Worker, Command) end, {Pool, _Version} = eredis_cluster_monitor:get_pool_by_slot(Slot), eredis_cluster_pool:transaction(Pool, Transaction), + %% TODO: Retry if pool is full? ok. query(_, _, ?REDIS_CLUSTER_REQUEST_TTL) -> @@ -407,6 +408,10 @@ handle_transaction_result(Result, Version) -> {error, tcp_closed} -> retry; + %% Pool is full + {error, full} -> + retry; + %% Other TCP issues %% See reasons: https://erlang.org/doc/man/inet.html#type-posix {error, Reason} when is_atom(Reason) -> diff --git a/src/eredis_cluster_pool_worker.erl b/src/eredis_cluster_pool_worker.erl index 4c42d26..77fad43 100644 --- a/src/eredis_cluster_pool_worker.erl +++ b/src/eredis_cluster_pool_worker.erl @@ -36,6 +36,8 @@ init(Args) -> {ok, #state{conn=Conn}}. +query(full, _Commands) -> + {error, full}; query(Worker, Commands) -> gen_server:call(Worker, {'query', Commands}).