Re: Long gen_server init question (not about order of messages :)
Stanislav Ledenev <[email protected]>
| Newsgroups | gmane.comp.lang.erlang.general |
|---|---|
| Message-ID | <CAOkK=A+wfVXqgEA65gDgXVzpptC0cd7MDbH2Se7A99EKHNhr1g@mail.gmail.com> |
Thank you for your response. Option with some kind of middle-man (proxy) is one of the implementations I was thinking about. I'd like to clarify the option with an unregistered server. It is very interesting, especially due to the fact that it is used in production ( some variant of it). But it sounds like that unregistered server starts outside of the supervision tree. Or maybe without OTP at all. Is it so? вт, 18 мая 2021 г. в 11:10, Roger Lipscombe <[email protected]>: > Assumptions: > > - The server is a singleton (within the node). > - While the server is initializing, a caller should get 'not_ready'. > It should not block. > > I can see two ways to do this, both involving an extra process: > > 1. The proxy starts up the server, passing self(). When the server is > ready, it notifies the proxy. If the proxy receives a request while > the server's not ready, it replies with 'not_ready'. If the server's > ready, the proxy passes the request on. > 2. The server starts in 'not_ready' mode, and starts a worker. The > worker does the initialization, and when it's done, it sends the > resulting state to the server. From that point, the server can reply > to requests. > > If you want to do this without an extra process: > > - The server starts. It's initially unregistered. Any calls to the > server look up the registration. If it's not registered, the call > returns 'not_ready'. When it's ready, the server registers itself, > meaning that calls can find the pid and make the call. > > We use a variant of this in production. > > >