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

Stanislav Ledenev s.ledenev@REDACTED
Tue May 18 08:56:04 CEST 2021

> Did you consider changing the overall architecture and use 1 process for
> each request?

What part of my message made you think that I have any kind of
 problems with load balancing or something similar? I have not.

In general all I need is a method of notification between multiple
about their readiness to do some work. And this is not about init callback.
It is about their inner process of initialization. For example, some
kinds of cryptography require a lot of calculations and user interactions
for these calculations made possible.

вс, 16 мая 2021 г. в 12:57, Ali Sabil <ali.sabil@REDACTED>:

> Did you consider changing the overall architecture and use 1 process for
> each request?
> On Sun, 16 May 2021 at 07:53, Stanislav Ledenev <s.ledenev@REDACTED>
> wrote:
>> 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/20210518/b489dac4/attachment.htm>

More information about the erlang-questions mailing list