Просмотр исходного кода

fix bug with starting pool without connection params

Yuriy Zhloba 9 лет назад
Родитель
Сommit
713ea5ca21

+ 8 - 7
src/epgsql_pool.erl

@@ -17,13 +17,14 @@
 -spec start(pool_name(), integer(), integer()) -> {ok, pid()} | {error, term()}.
 start(PoolName0, InitCount, MaxCount) ->
     PoolName = epgsql_pool_utils:pool_name_to_atom(PoolName0),
-    PoolConfig = [
-                  {name, PoolName},
-                  {init_count, InitCount},
-                  {max_count, MaxCount},
-                  {start_mfa, {epgsql_pool_worker, start_link, [PoolName]}}
-                 ],
-    pooler:new_pool(PoolConfig).
+    case epgsql_pool_settings:get_connection_params(PoolName) of
+        {ok, _} -> PoolConfig = [{name, PoolName},
+                                 {init_count, InitCount},
+                                 {max_count, MaxCount},
+                                 {start_mfa, {epgsql_pool_worker, start_link, [PoolName]}}],
+                   pooler:new_pool(PoolConfig);
+        {error, not_found} -> {error, connection_params_not_found}
+    end.
 
 
 -spec stop(pool_name()) -> ok | {error, term()}.

+ 3 - 3
src/epgsql_pool_settings.erl

@@ -18,12 +18,12 @@ start_link() ->
     gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
 
 
--spec get_connection_params(epgsql_pool:pool_name()) -> #epgsql_connection_params{}.
+-spec get_connection_params(epgsql_pool:pool_name()) -> {ok, #epgsql_connection_params{}} | {error, not_found}.
 get_connection_params(PoolName) ->
     Key = {connection, epgsql_pool_utils:pool_name_to_atom(PoolName)},
     case ets:lookup(?MODULE, Key) of
-        [] -> throw({connection_params_not_found, PoolName});
-        [{{connection, PoolName}, ConnectionParams}] -> ConnectionParams
+        [] -> {error, not_found};
+        [{{connection, PoolName}, ConnectionParams}] -> {ok, ConnectionParams}
     end.
 
 

+ 1 - 1
src/epgsql_pool_utils.erl

@@ -13,7 +13,7 @@
 open_connection(PoolName, undefined) ->
     open_connection(PoolName, #epgsql_connection{});
 open_connection(PoolName, Connection0) ->
-    Params = epgsql_pool_settings:get_connection_params(PoolName),
+    {ok,Params} = epgsql_pool_settings:get_connection_params(PoolName),
     #epgsql_connection_params{host = Host, port = Port, username = Username,
                               password = Password, database = Database} = Params,
     ConnectionTimeout = epgsql_pool_settings:get(connection_timeout),

+ 3 - 4
test/epgsql_pool_settings_tests.erl

@@ -30,8 +30,7 @@ get_set_test() ->
 connection_params_test() ->
     epgsql_pool_settings:start_link(),
 
-    ?assertThrow({connection_params_not_found, some_pool},
-                 epgsql_pool_settings:get_connection_params(some_pool)),
+    ?assertEqual({error, not_found}, epgsql_pool_settings:get_connection_params(some_pool)),
 
     Params1 = #epgsql_connection_params{host = "localhost", port = 5432,
                                         username="user", password="123",
@@ -43,8 +42,8 @@ connection_params_test() ->
                                         database="somedb"},
     epgsql_pool_settings:set_connection_params(pool_2, Params2),
 
-    ?assertEqual(Params1, epgsql_pool_settings:get_connection_params(pool_1)),
-    ?assertEqual(Params2, epgsql_pool_settings:get_connection_params(pool_2)),
+    ?assertEqual({ok, Params1}, epgsql_pool_settings:get_connection_params(pool_1)),
+    ?assertEqual({ok, Params2}, epgsql_pool_settings:get_connection_params(pool_2)),
 
     epgsql_pool_settings ! stop,
     ok.