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

Ali Sabil <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <CAFXsykjYqCV3KG9shutiwVaj6XGBpQ4mVJkbDy6geZ4ntziBhg@mail.gmail.com>
Did you consider changing the overall architecture and use 1 process for
each request?

On Sun, 16 May 2021 at 07:53, Stanislav Ledenev <[email protected]> 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 <[email protected]>:
>
>> 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 <[email protected]>
>> 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?
>>>
>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.