|
23 | 23 |
|
24 | 24 | -export([ |
25 | 25 | read_key/3, |
26 | | - read_key/4 |
| 26 | + read_key/4, |
| 27 | + wait_for_start/1 |
27 | 28 | ]). |
28 | 29 |
|
29 | 30 | -export([ |
@@ -69,6 +70,17 @@ read_key(Reader, Key, Limits) -> |
69 | 70 | read_key(Reader, Key, Limits, Fold) -> |
70 | 71 | do_read_key(Reader, Key, Limits, Fold). |
71 | 72 |
|
| 73 | +-spec wait_for_start(ecpool:pool_name()) -> ok | no_such_reader. |
| 74 | +wait_for_start(Reader) -> |
| 75 | + case ecpool:get_client(Reader) of |
| 76 | + Pid when is_pid(Pid) -> ok; |
| 77 | + false -> |
| 78 | + timer:sleep(100), |
| 79 | + wait_for_start(Reader); |
| 80 | + no_such_pool -> |
| 81 | + no_such_reader |
| 82 | + end. |
| 83 | + |
72 | 84 | %%------------------------------------------------------------------------------------------------- |
73 | 85 | %% ecpool part |
74 | 86 |
|
@@ -138,22 +150,26 @@ code_change(_OldVsn, State, _Extra) -> |
138 | 150 | %%------------------------------------------------------------------------------------------------- |
139 | 151 |
|
140 | 152 | do_read_key(Reader, Key, Limits, {FoldFun, InitAcc}) -> |
141 | | - LookupClient = ecpool_request(Reader, get_lookup_client), |
142 | | - case ?MEASURE({lookup_key, self(), Key}, hstreamdb_client:lookup_key(LookupClient, Key)) of |
143 | | - {ok, {_Host, _Port} = Addr} -> |
144 | | - case ecpool_request(Reader, {get_key_gstream, Key, Addr}) of |
145 | | - {ok, Stream, GStream} -> |
146 | | - ?MEASURE( |
147 | | - {fold_key_read_gstream, Stream, Key}, |
148 | | - hstreamdb_client:fold_key_read_gstream( |
149 | | - GStream, Stream, Key, Limits, FoldFun, InitAcc |
150 | | - ) |
151 | | - ); |
| 153 | + case ecpool_request(Reader, get_lookup_client) of |
| 154 | + {error, _} = Error -> |
| 155 | + Error; |
| 156 | + LookupClient -> |
| 157 | + case ?MEASURE({lookup_key, self(), Key}, hstreamdb_client:lookup_key(LookupClient, Key)) of |
| 158 | + {ok, {_Host, _Port} = Addr} -> |
| 159 | + case ecpool_request(Reader, {get_key_gstream, Key, Addr}) of |
| 160 | + {ok, Stream, GStream} -> |
| 161 | + ?MEASURE( |
| 162 | + {fold_key_read_gstream, Stream, Key}, |
| 163 | + hstreamdb_client:fold_key_read_gstream( |
| 164 | + GStream, Stream, Key, Limits, FoldFun, InitAcc |
| 165 | + ) |
| 166 | + ); |
| 167 | + {error, _} = Error -> |
| 168 | + Error |
| 169 | + end; |
152 | 170 | {error, _} = Error -> |
153 | 171 | Error |
154 | | - end; |
155 | | - {error, _} = Error -> |
156 | | - Error |
| 172 | + end |
157 | 173 | end. |
158 | 174 |
|
159 | 175 | do_get_key_gstream( |
@@ -198,5 +214,7 @@ fold_stream_key_fun(Key) -> |
198 | 214 | ecpool_request(Reader, Request) -> |
199 | 215 | ecpool:with_client( |
200 | 216 | Reader, |
201 | | - fun(Pid) -> gen_server:call(Pid, Request) end |
| 217 | + fun(Pid) -> |
| 218 | + gen_server:call(Pid, Request) |
| 219 | + end |
202 | 220 | ). |
0 commit comments