55-export ([start_link /3 ,
66 is_ready /1 ,
77 pick /2 ,
8+ pick /3 ,
89 add_endpoints /2 ,
910 remove_endpoints /3 ,
1011 stop /1 ,
@@ -57,11 +58,19 @@ is_ready(Name) ->
5758 gen_statem :call (? CHANNEL (Name ), is_ready ).
5859
5960% % @doc Picks a subchannel from a pool using the configured strategy.
60- -spec pick (name (), unary | stream ) -> {ok , {pid (), grpcbox_client :interceptor () | undefined }} |
61- {error , undefined_channel | no_endpoints }.
61+ -spec pick (name (), unary | stream ) ->
62+ {ok , {pid (), grpcbox_client :interceptor () | undefined }} |
63+ {error , undefined_channel | no_endpoints }.
6264pick (Name , CallType ) ->
65+ pick (Name , CallType , undefined ).
66+
67+ % % @doc Picks a subchannel from a pool using the configured strategy.
68+ -spec pick (name (), unary | stream , term () | undefined ) ->
69+ {ok , {pid (), grpcbox_client :interceptor () | undefined }} |
70+ {error , undefined_channel | no_endpoints }.
71+ pick (Name , CallType , Key ) ->
6372 try
64- case gproc_pool : pick_worker (Name ) of
73+ case pick_worker (Name , Key ) of
6574 false -> {error , no_endpoints };
6675 Pid when is_pid (Pid ) ->
6776 {ok , {Pid , interceptor (Name , CallType )}}
@@ -71,6 +80,11 @@ pick(Name, CallType) ->
7180 {error , undefined_channel }
7281 end .
7382
83+ pick_worker (Name , undefined ) ->
84+ gproc_pool :pick_worker (Name );
85+ pick_worker (Name , Key ) ->
86+ gproc_pool :pick_worker (Name , Key ).
87+
7488add_endpoints (Name , Endpoints ) ->
7589 gen_statem :call (? CHANNEL (Name ), {add_endpoints , Endpoints }).
7690
@@ -123,9 +137,9 @@ connected({call, From}, is_ready, _Data) ->
123137 {keep_state_and_data , [{reply , From , true }]};
124138connected ({call , From }, {add_endpoints , Endpoints },
125139 Data = # data {pool = Pool ,
126- stats_handler = StatsHandler ,
127- encoding = Encoding ,
128- endpoints = TotalEndpoints }) ->
140+ stats_handler = StatsHandler ,
141+ encoding = Encoding ,
142+ endpoints = TotalEndpoints }) ->
129143 NewEndpoints = lists :subtract (Endpoints , TotalEndpoints ),
130144 NewTotalEndpoints = lists :umerge (TotalEndpoints , Endpoints ),
131145 start_workers (Pool , StatsHandler , Encoding , NewEndpoints ),
@@ -197,8 +211,8 @@ insert_stream_interceptor(Name, _Type, Interceptors) ->
197211start_workers (Pool , StatsHandler , Encoding , Endpoints ) ->
198212 [begin
199213 gproc_pool :add_worker (Pool , Endpoint ),
200- { ok , Pid } = grpcbox_subchannel : start_link ( Endpoint ,
201- Pool , Endpoint , Encoding , StatsHandler ),
214+ gproc_pool : add_worker ({ Pool , active }, Endpoint ) ,
215+ { ok , Pid } = grpcbox_subchannel : start_link ( Endpoint , Pool , Endpoint , Encoding , StatsHandler ),
202216 Pid
203217 end || Endpoint <- Endpoints ].
204218
0 commit comments