diff --git a/lib/resty/cassandra/cluster.lua b/lib/resty/cassandra/cluster.lua index 20b6dcd..e11ac7a 100644 --- a/lib/resty/cassandra/cluster.lua +++ b/lib/resty/cassandra/cluster.lua @@ -954,7 +954,10 @@ local function handle_error(self, err, cql_code, coordinator, request) elseif err == 'timeout' then coordinator:close() if self.retry_on_timeout then - return self:send_retry(request, 'timeout') + local should_retry = self.retry_policy:on_connect_timeout(request) + if should_retry then + return self:send_retry(request, 'timeout') + end end else -- host seems down? diff --git a/lib/resty/cassandra/policies/retry/init.lua b/lib/resty/cassandra/policies/retry/init.lua index c143868..522f816 100644 --- a/lib/resty/cassandra/policies/retry/init.lua +++ b/lib/resty/cassandra/policies/retry/init.lua @@ -6,6 +6,7 @@ function _M.new_policy(name) on_unavailable = function() error('on_unavailable() not implemented') end, on_read_timeout = function() error('on_read_timeout() not implemented') end, on_write_timeout = function() error('on_write_timeout() not implemented') end, + on_connect_timeout = function() error('on_connect_timeout() not implemented') end, } retry_mt.__index = retry_mt diff --git a/lib/resty/cassandra/policies/retry/simple.lua b/lib/resty/cassandra/policies/retry/simple.lua index 185afa8..57c671a 100644 --- a/lib/resty/cassandra/policies/retry/simple.lua +++ b/lib/resty/cassandra/policies/retry/simple.lua @@ -47,4 +47,8 @@ function _M:on_write_timeout(request) return request.retries < self.max_retries end +function _M:on_connect_timeout(request) + return request.retries < self.max_retries +end + return _M