Long gen_server init question (not about order of messages :)
Sun May 16 07:53:19 CEST 2021
I know about hanle_continue but my question is not about long init()
To make it simpler it is about long-running functions inside of
It may be possible to spawn those functions in different processes but it
desirable because of requirements.
mod_func is quite general (general like a library) and should not know
anything specific outside of it. Passing to mod_func something like
could be possible but it is fragile - response side could be not ready at
moment of replying and this *single* notification would just vanish.
So notification from mod_func to mod_api is the same problem but from the
вс, 16 мая 2021 г. в 02:50, Leonard B <leonard.boyce@REDACTED>:
> Why not notify mod_api from mod_func once it's initialized. If you wanted
> mod_func initialization to be non-blocking you could use handle_continue.
> Kind regards,
> On Sat, May 15, 2021, 14:55 Stanislav Ledenev <s.ledenev@REDACTED> wrote:
>> 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
>> 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?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions