Spaces:
Sleeping
Sleeping
Scott Hiett
commited on
Commit
·
c2de526
1
Parent(s):
db4111e
Handler now directly talks to allocated worker node, so the Client is no longer locked up by all redis commands
Browse files
lib/srh/http/command_handler.ex
CHANGED
|
@@ -2,6 +2,7 @@ defmodule Srh.Http.CommandHandler do
|
|
| 2 |
alias Srh.Http.RequestValidator
|
| 3 |
alias Srh.Auth.TokenResolver
|
| 4 |
alias Srh.Redis.Client
|
|
|
|
| 5 |
|
| 6 |
def handle_command(conn, token) do
|
| 7 |
case RequestValidator.validate_redis_body(conn.body_params) do
|
|
@@ -26,7 +27,8 @@ defmodule Srh.Http.CommandHandler do
|
|
| 26 |
case GenRegistry.lookup_or_start(Client, srh_id, [max_connections, connection_info]) do
|
| 27 |
{:ok, pid} ->
|
| 28 |
# Run the command
|
| 29 |
-
case Client.
|
|
|
|
| 30 |
{:ok, res} ->
|
| 31 |
{:ok, %{result: res}}
|
| 32 |
{:error, error} ->
|
|
|
|
| 2 |
alias Srh.Http.RequestValidator
|
| 3 |
alias Srh.Auth.TokenResolver
|
| 4 |
alias Srh.Redis.Client
|
| 5 |
+
alias Srh.Redis.ClientWorker
|
| 6 |
|
| 7 |
def handle_command(conn, token) do
|
| 8 |
case RequestValidator.validate_redis_body(conn.body_params) do
|
|
|
|
| 27 |
case GenRegistry.lookup_or_start(Client, srh_id, [max_connections, connection_info]) do
|
| 28 |
{:ok, pid} ->
|
| 29 |
# Run the command
|
| 30 |
+
case Client.find_worker(pid)
|
| 31 |
+
|> ClientWorker.redis_command(command_array) do
|
| 32 |
{:ok, res} ->
|
| 33 |
{:ok, %{result: res}}
|
| 34 |
{:error, error} ->
|
lib/srh/redis/client.ex
CHANGED
|
@@ -25,15 +25,15 @@ defmodule Srh.Redis.Client do
|
|
| 25 |
}
|
| 26 |
end
|
| 27 |
|
| 28 |
-
def
|
| 29 |
-
GenServer.call(client, {:
|
| 30 |
end
|
| 31 |
|
| 32 |
-
def handle_call({:
|
| 33 |
when is_pid(registry_pid) do
|
| 34 |
{:ok, worker} = ClientRegistry.find_worker(registry_pid)
|
| 35 |
Process.send(self(), :reset_idle_death, [])
|
| 36 |
-
{:reply,
|
| 37 |
end
|
| 38 |
|
| 39 |
def handle_call(_msg, _from, state) do
|
|
|
|
| 25 |
}
|
| 26 |
end
|
| 27 |
|
| 28 |
+
def find_worker(client) do
|
| 29 |
+
GenServer.call(client, {:find_worker})
|
| 30 |
end
|
| 31 |
|
| 32 |
+
def handle_call({:find_worker}, _from, %{registry_pid: registry_pid} = state)
|
| 33 |
when is_pid(registry_pid) do
|
| 34 |
{:ok, worker} = ClientRegistry.find_worker(registry_pid)
|
| 35 |
Process.send(self(), :reset_idle_death, [])
|
| 36 |
+
{:reply, worker, state}
|
| 37 |
end
|
| 38 |
|
| 39 |
def handle_call(_msg, _from, state) do
|