Stanislav Ledenev
2021-05-15 18:55:17 UTC
Hi!
Need advice from an experienced community about synchronizing long
initializing gen_server with other parts of application.
Let's say we have 4 gen_servers:
* mod_api - accept requests;
* mod_func - real job;
* mod_x, mod_y - users of mod_func.
mod_api accepts requests and transforms them to calls to mod_x, mod_y.
mod_func is crucial for the application but it needs a time consuming
procedure
of initialization. IRL it is some cryptography related stuff.
While mod_func is in the initialization state, mod_api must return
'not_ready' for all requests.
While mod_func initializing it is not available for any requests.
I was thinking about options of notification mechanism implementation and
see two of them:
1. Some kind of polling from mod_api to mod_func with gen_server:call with
timeout: mod_api after initialization begin send_after loop with timeout
call to mod_func;
2. gen_event based solution. Run up gen_event and wait for notification
about readiness of mod_func.
Am I missing something? Are there any better solutions for such a task?
Need advice from an experienced community about synchronizing long
initializing gen_server with other parts of application.
Let's say we have 4 gen_servers:
* mod_api - accept requests;
* mod_func - real job;
* mod_x, mod_y - users of mod_func.
mod_api accepts requests and transforms them to calls to mod_x, mod_y.
mod_func is crucial for the application but it needs a time consuming
procedure
of initialization. IRL it is some cryptography related stuff.
While mod_func is in the initialization state, mod_api must return
'not_ready' for all requests.
While mod_func initializing it is not available for any requests.
I was thinking about options of notification mechanism implementation and
see two of them:
1. Some kind of polling from mod_api to mod_func with gen_server:call with
timeout: mod_api after initialization begin send_after loop with timeout
call to mod_func;
2. gen_event based solution. Run up gen_event and wait for notification
about readiness of mod_func.
Am I missing something? Are there any better solutions for such a task?