Re: Long gen_server init question (not about order of messages :)
Leonard B <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CAKj1m=+HvS9VQ090m4odrSmBMeesrJd=XeYLroWOLGDUBOOC0g@mail.gmail.com> |
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? >