Yuriy Zhloba 8 лет назад
Родитель
Сommit
7a57f173ff
2 измененных файлов с 16 добавлено и 7 удалено
  1. 11 4
      src/epgsql_pool.erl
  2. 5 3
      test/epgsql_pool_tests.erl

+ 11 - 4
src/epgsql_pool.erl

@@ -105,15 +105,22 @@ do_query(Worker, QueryTuple, Options) when is_pid(Worker) ->
                   undefined -> element(2, application:get_env(epgsql_pool, query_timeout));
                   V -> V
               end,
-    Sock = gen_server:call(Worker, get_sock),
     try
-        gen_server:call(Worker, QueryTuple, Timeout)
+        Sock = gen_server:call(Worker, get_sock),
+        try
+            gen_server:call(Worker, QueryTuple, Timeout)
+        catch
+            exit:{timeout, _} ->
+                error_logger:error_msg("query timeout ~p", [QueryTuple]),
+                epgsql_sock:cancel(Sock),
+                {error, timeout}
+        end
     catch
         exit:{timeout, _} ->
-            error_logger:error_msg("query timeout ~p", [QueryTuple]),
-            epgsql_sock:cancel(Sock),
+            error_logger:error_msg("get_sock timeout ~p", [QueryTuple]),
             {error, timeout}
     end;
+
 do_query(PoolName0, QueryTuple, Options) ->
     PoolName = epgsql_pool_utils:pool_name_to_atom(PoolName0),
     with_worker(

+ 5 - 3
test/epgsql_pool_tests.erl

@@ -13,8 +13,9 @@ get_set_settings_test() ->
                    min_reconnect_timeout => 100,
                    pooler_get_worker_timeout => 10000,
                    pooler_max_queue => 1000,
-                   query_timeout => 10000},
-                 epgsql_pool:get_settings()),
+                   query_timeout => 10000,
+                   transaction_timeout => 20000},
+        epgsql_pool:get_settings()),
 
     ok = epgsql_pool:set_settings(#{aa => bb,
                                     pooler_max_queue => 500,
@@ -30,7 +31,8 @@ get_set_settings_test() ->
                    min_reconnect_timeout => 42,
                    pooler_get_worker_timeout => 10000,
                    pooler_max_queue => 500,
-                   query_timeout => 555},
+                   query_timeout => 555,
+                   transaction_timeout => 20000},
                  epgsql_pool:get_settings()),
 
     ok.