@@ -17,22 +17,25 @@ defmodule Cache.Registry do
1717 end
1818 end
1919
20- def create_coalescer ( key ) do
21- GenServer . call ( __MODULE__ , { :start_coalesce , key } )
20+ def get_or_create_coalescer ( key ) do
21+ GenServer . call ( __MODULE__ , { :get_or_create_coalescer , key } )
2222 end
2323
2424 def get_coalesce_pid ( key ) do
25- GenServer . call ( __MODULE__ , { :get_coalesce , key } )
25+ IO . inspect ( key , label: "Getting coalesce" )
26+
27+ case GenServer . call ( __MODULE__ , { :get_coalesce , key } )
28+ |> IO . inspect ( label: "got return value" ) do
29+ { :ok , response } -> response
30+ { :not_found } -> nil
31+ end
2632 end
2733
2834 def remove_coalesce_key ( key ) do
2935 GenServer . call ( __MODULE__ , { :remove_coalesce , key } )
3036 end
3137
3238 def store ( { _method , _full_path , _get_params , _allowed_groups } = key , response ) do
33- # IO.puts "Going to store new content"
34- # IO.inspect( key, label: "Key to store under" )
35- # IO.inspect( response, label: "Response to save" )
3639 GenServer . call ( __MODULE__ , { :store , key , response } )
3740 end
3841
@@ -53,18 +56,18 @@ defmodule Cache.Registry do
5356 { :ok , % { cache: % { } , caches_by_key: % { } , coalesce_handlers: % { } } }
5457 end
5558
59+ def handle_call ( { :get_or_create_coalescer , key } , _from , state ) do
60+ case Map . get ( state . coalesce_handlers , key , nil ) do
61+ nil ->
62+ { :ok , pid } = Coalesce.Registry . start ( % { } )
63+ new_state = put_in ( state [ :coalesce_handlers ] [ key ] , pid )
64+ { :reply , { :created , pid } , new_state }
5665
57- def handle_call ( { :start_coalesce , key } , _from , state ) do
58- if Map . has_key? ( state . coalesce_handlers , key ) do
59- { :reply , { :alread_started } , state }
60- else
61- { :ok , pid } = Coalesce.Registry . start ( % { } )
62- new_state = put_in ( state [ :coalesce_handlers ] [ key ] , pid )
63- { :reply , { :ok , pid } , new_state }
66+ pid ->
67+ { :reply , { :attach , pid } , state }
6468 end
6569 end
6670
67-
6871 def handle_call ( { :get_coalesce , key } , _from , state ) do
6972 if Map . has_key? ( state . coalesce_handlers , key ) do
7073 { :reply , { :ok , Map . get ( state . coalesce_handlers , key ) } , state }
@@ -73,10 +76,8 @@ defmodule Cache.Registry do
7376 end
7477 end
7578
76-
7779 def handle_call ( { :remove_coalesce , key } , _from , state ) do
7880 if Map . has_key? ( state . coalesce_handlers , key ) do
79- handlers = Map . pop ( state . coalesce_handlers , key )
8081 { _ , new_state } = pop_in ( state [ :coalesce_handlers ] [ key ] )
8182 { :reply , { :ok } , new_state }
8283 else
@@ -85,23 +86,21 @@ defmodule Cache.Registry do
8586 end
8687
8788 def handle_call ( { :find_cache , key } , _from , state ) do
88- if Map . has_key? ( state . cache , key ) do
89+ if has_key? ( state , key ) do
8990 { :reply , { :ok , Map . get ( state . cache , key ) } , state }
9091 else
9192 { :reply , { :not_found } , state }
9293 end
9394 end
9495
9596 def handle_call ( { :store , request_key , response } , _from , state ) do
96-
9797 % { cache_keys: cache_keys , clear_keys: clear_keys } = response
9898
9999 state =
100100 state
101101 # update state for clear_keys
102102 |> clear_keys! ( clear_keys )
103103
104-
105104 if cache_keys == [ ] do
106105 { :reply , :ok , state }
107106 else
@@ -135,6 +134,7 @@ defmodule Cache.Registry do
135134 cache =
136135 Enum . reduce ( clear_keys , cache , fn clear_key , cache ->
137136 keys_to_remove = Map . get ( caches_by_key , clear_key , [ ] )
137+
138138 cache = Map . drop ( cache , keys_to_remove )
139139 cache
140140 end )
0 commit comments