Re: Long gen_server init question (not about order of messages :)
Stanislav Ledenev <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CAOkK=AKeg1ce+A-Bbw7AcAu2WH2W=iJHMjoc+BkN3rJS5f+xpQ@mail.gmail.com> |
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? >> >