Skip to content

Commit 520786a

Browse files
committed
Create session outside of SessionServer
It is not a bottleneck anymore
1 parent 811b3e5 commit 520786a

File tree

1 file changed

+21
-24
lines changed

1 file changed

+21
-24
lines changed

lib/hound/session_server.ex

+21-24
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,25 @@ defmodule Hound.SessionServer do
3535

3636

3737
def change_current_session_for_pid(pid, session_name, opts) do
38-
{:ok, session_id} =
39-
GenServer.call(@name, {:change_session, pid, session_name, opts}, 60000)
38+
{:ok, driver_info} = Hound.driver_info
39+
40+
sessions =
41+
case :ets.lookup(@name, pid) do
42+
[{^pid, _session_id, sessions}] ->
43+
sessions
44+
[] -> %{}
45+
end
46+
47+
{session_id, sessions} =
48+
case Map.fetch(sessions, session_name) do
49+
{:ok, session_id} ->
50+
{session_id, sessions}
51+
:error ->
52+
session_id = create_session(driver_info, opts)
53+
{session_id, Map.put(sessions, session_name, session_id)}
54+
end
55+
56+
:ok = GenServer.call(@name, {:register, pid, session_id, sessions}, 60000)
4057
session_id
4158
end
4259

@@ -66,29 +83,9 @@ defmodule Hound.SessionServer do
6683
end
6784

6885

69-
def handle_call({:change_session, pid, session_name, opts}, _from, state) do
70-
{:ok, driver_info} = Hound.driver_info
71-
72-
sessions =
73-
case :ets.lookup(@name, pid) do
74-
[{^pid, _session_id, sessions}] ->
75-
sessions
76-
[] -> %{}
77-
end
78-
79-
{session_id, sessions} =
80-
case Map.fetch(sessions, session_name) do
81-
{:ok, session_id} ->
82-
{session_id, sessions}
83-
:error ->
84-
session_id = create_session(driver_info, opts)
85-
{session_id, Map.put(sessions, session_name, session_id)}
86-
end
87-
86+
def handle_call({:register, pid, session_id, sessions}, _from, state) do
8887
:ets.insert(@name, {pid, session_id, sessions})
89-
{:reply, {:ok, session_id}, monitor_session(pid, state)}
90-
rescue
91-
error -> {:reply, {:error, error}, state}
88+
{:reply, :ok, monitor_session(pid, state)}
9289
end
9390

9491
def handle_call({:destroy_sessions, pid}, _from, state) do

0 commit comments

Comments
 (0)