Skip to content

Commit 387c0b2

Browse files
committed
fix: filter session struct
1 parent 90e68a5 commit 387c0b2

4 files changed

Lines changed: 20 additions & 21 deletions

File tree

config/config.exs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ config :logger, :default_formatter,
1010
format: "[$level] $message $metadata\n",
1111
metadata: [:mcp_server, :mcp_client, :mcp_client_name, :mcp_transport]
1212

13+
if System.get_env("ENABLE_SESSION_STORE") == "true" do
14+
config :anubis_mcp, :session_store,
15+
enabled: true,
16+
adapter: Anubis.Server.Session.Store.Redis,
17+
redis_url: System.get_env("REDIS_URL", "redis://localhost:6379"),
18+
pool_size: String.to_integer(System.get_env("REDIS_POOL_SIZE", "10")),
19+
ttl: String.to_integer(System.get_env("SESSION_TTL", "1800000")),
20+
namespace: System.get_env("SESSION_NAMESPACE", "anubis:sessions"),
21+
connection_name: :anubis_redis
22+
end
23+
1324
# Session store configuration - disabled by default
1425
# To enable Redis persistence, uncomment and configure:
1526
# config :anubis_mcp, :session_store,

config/dev.exs

Lines changed: 0 additions & 13 deletions
This file was deleted.

lib/anubis/server/session.ex

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,12 +213,11 @@ defmodule Anubis.Server.Session do
213213
if store = Anubis.get_session_store_adapter() do
214214
Logging.log(:debug, "Persisting session #{inspect(state.id)} to store", [])
215215

216-
# Convert struct to mapand remove runtime fields
217216
state_map =
218217
state
219218
|> Map.from_struct()
220-
# Don't persist process names
221219
|> Map.delete(:name)
220+
|> dbg()
222221

223222
case store.save(state.id, state_map, []) do
224223
:ok ->

lib/anubis/server/session/store/redis.ex

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,20 +108,17 @@ if Code.ensure_loaded?(Redix) do
108108
pool_size = Keyword.get(opts, :pool_size, 10)
109109
namespace = Keyword.get(opts, :namespace, @default_namespace)
110110
ttl = Keyword.get(opts, :ttl, @default_ttl)
111-
# Strip :name from custom opts to preserve internal pool naming
111+
112112
custom_redix_opts =
113113
opts
114114
|> Keyword.get(:redix_opts, [])
115115
|> validate_redix_opts()
116116
|> Keyword.delete(:name)
117117

118-
# Start Redix connection pool with anubis_ prefix to avoid conflicts
119118
children =
120119
for i <- 1..pool_size do
121120
child_id = :"anubis_#{conn_name}_#{i}"
122121

123-
# Default Redix options, merged with custom options (custom takes precedence)
124-
# Note: :name is always set internally to maintain pool integrity
125122
redix_opts =
126123
Keyword.merge([name: child_id, sync_connect: false, exit_on_disconnection: false], custom_redix_opts)
127124

@@ -131,10 +128,8 @@ if Code.ensure_loaded?(Redix) do
131128
}
132129
end
133130

134-
# Use anubis_ prefix for supervisor name
135131
supervisor_name = :"anubis_#{conn_name}_supervisor"
136132

137-
# Start connections under a supervisor
138133
case Supervisor.start_link(children, strategy: :one_for_one, name: supervisor_name) do
139134
{:ok, _pid} ->
140135
state = %State{
@@ -335,9 +330,16 @@ if Code.ensure_loaded?(Redix) do
335330
div(milliseconds, 1000)
336331
end
337332

333+
defp filter_data(data) do
334+
data
335+
|> Map.from_struct()
336+
|> Map.delete(:name)
337+
end
338+
338339
defp encode_and_save(state, key, data, ttl) do
339340
conn = get_connection(state)
340341
ttl_seconds = ms_to_seconds(ttl)
342+
data = filter_data(data)
341343

342344
case json_encode(data) do
343345
{:ok, json} ->

0 commit comments

Comments
 (0)