From b7bd7ec071a9150943c5b709af88fcdf5d7c0294 Mon Sep 17 00:00:00 2001 From: Shamis Shukoor Date: Mon, 13 Mar 2017 13:24:56 +0100 Subject: [PATCH 1/4] killing session properly #14 --- src/erlocipool_worker.erl | 7 +++---- test/erlocipool_test.erl | 2 -- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/erlocipool_worker.erl b/src/erlocipool_worker.erl index 7fc071d..d0d0447 100644 --- a/src/erlocipool_worker.erl +++ b/src/erlocipool_worker.erl @@ -186,7 +186,7 @@ handle_cast({kill, #session{ try true = demonitor(OciMon, [flush]), OciPort = {oci_port, PortPid}, - ok = OciPort:close() + OciPort:close() catch _:Reason -> ?DBG("handle_cast(kill)", "error ~p~n~p", @@ -230,10 +230,9 @@ handle_cast(_Request, State) -> handle_info({check_reduce, ToClose}, #state{sessions = - [#session{ssn = OciSession, - openStmts = 0} | Sessions]} = State) + [#session{openStmts = 0} = Session | Sessions]} = State) when ToClose > 0 -> - gen_server:cast(self(), {kill, OciSession}), + gen_server:cast(self(), {kill, Session}), self() ! {check_reduce, ToClose - 1}, {noreply, State#state{sessions = sort_sessions(Sessions)}}; handle_info({check_reduce, _}, State) -> diff --git a/test/erlocipool_test.erl b/test/erlocipool_test.erl index 556ad13..f82cf66 100644 --- a/test/erlocipool_test.erl +++ b/test/erlocipool_test.erl @@ -227,8 +227,6 @@ bad_conn_recover({Pool, _OciPort, OciSession, SessBefore}) -> ?assertMatch({error, _}, S:exec_stmt()), %% Pool replenished with new sessions ?assertMatch([#{closed_stmts := 0, open_stmts := 0}, - #{closed_stmts := 0, open_stmts := 0}, - #{closed_stmts := 0, open_stmts := 0}, #{closed_stmts := 0, open_stmts := 0}], Pool:get_stats()). %------------------------ From e55a56e1745706d72734cd8724b6cd63f528dd38 Mon Sep 17 00:00:00 2001 From: Shamis Shukoor Date: Mon, 13 Mar 2017 15:56:14 +0100 Subject: [PATCH 2/4] response of ping compared with pong --- src/erlocipool_worker.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/erlocipool_worker.erl b/src/erlocipool_worker.erl index d0d0447..8c0d5a2 100644 --- a/src/erlocipool_worker.erl +++ b/src/erlocipool_worker.erl @@ -218,7 +218,7 @@ handle_cast({check, {PortPid, OciSessnHandle, _OciStmtHandle}}, State) -> %?DBG("OciSession:ping()", "session ~p", % [{PortPid, OciSessnHandle}]), case catch OciSession:ping() of - ok -> ok; + pong -> ok; _Error -> kill(Self, PortPid, OciSessnHandle, State#state.sessions) From 1daa29dcdd6ddd4999812cdd4d7f5a206a8bf7f5 Mon Sep 17 00:00:00 2001 From: Shamis Shukoor Date: Mon, 13 Mar 2017 16:23:05 +0100 Subject: [PATCH 3/4] Creating a session in the pool when killing a session --- src/erlocipool_worker.erl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/erlocipool_worker.erl b/src/erlocipool_worker.erl index 8c0d5a2..7bc00d9 100644 --- a/src/erlocipool_worker.erl +++ b/src/erlocipool_worker.erl @@ -220,6 +220,7 @@ handle_cast({check, {PortPid, OciSessnHandle, _OciStmtHandle}}, State) -> case catch OciSession:ping() of pong -> ok; _Error -> + self() ! {build_pool, 1}, kill(Self, PortPid, OciSessnHandle, State#state.sessions) end From 63322a90b8b71700cdbedce5fabf1afaa034dbee Mon Sep 17 00:00:00 2001 From: Shamis Shukoor Date: Mon, 13 Mar 2017 17:25:47 +0100 Subject: [PATCH 4/4] Not creating session on normal error --- src/erlocipool_worker.erl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/erlocipool_worker.erl b/src/erlocipool_worker.erl index 7bc00d9..8c0d5a2 100644 --- a/src/erlocipool_worker.erl +++ b/src/erlocipool_worker.erl @@ -220,7 +220,6 @@ handle_cast({check, {PortPid, OciSessnHandle, _OciStmtHandle}}, State) -> case catch OciSession:ping() of pong -> ok; _Error -> - self() ! {build_pool, 1}, kill(Self, PortPid, OciSessnHandle, State#state.sessions) end