Long gen_server init question (not about order of messages :)

Stanislav Ledenev s.ledenev@REDACTED
Sun May 16 07:53:19 CEST 2021


I know about hanle_continue but my question is not about long init()
function.
To make it simpler it is about long-running functions inside of
handle_continue.
It may be possible to spawn those functions in different processes but it
is not
desirable because of requirements.

mod_func is quite general (general like a library) and should not know
about
anything specific outside of it. Passing to mod_func something like
'reply_to' reference
could be possible but it is fragile - response side could be not ready at
the
 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
other side.

вс, 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,
> Leonard
>
>
> On Sat, May 15, 2021, 14:55 Stanislav Ledenev <s.ledenev@REDACTED> wrote:
>
>> 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?
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20210516/b2ff3f6a/attachment.htm>


More information about the erlang-questions mailing list