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
gen_server's
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
specific
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