<div dir="ltr"><div dir="ltr">Thank you for your response. </div><div dir="ltr">Option with some kind of middle-man (proxy) is one of the implementations I was thinking about. <br><br>I'd like to clarify the option with an unregistered server. </div><div dir="ltr">It is very interesting, especially due to the fact that it is used in production ( some variant of it). </div><div dir="ltr">But it sounds like that unregistered server starts outside of the supervision tree. </div><div dir="ltr">Or maybe without OTP at all. Is it so?<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">вт, 18 мая 2021 г. в 11:10, Roger Lipscombe <<a href="mailto:roger@differentpla.net">roger@differentpla.net</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Assumptions:<br>
<br>
- The server is a singleton (within the node).<br>
- While the server is initializing, a caller should get 'not_ready'.<br>
It should not block.<br>
<br>
I can see two ways to do this, both involving an extra process:<br>
<br>
1. The proxy starts up the server, passing self(). When the server is<br>
ready, it notifies the proxy. If the proxy receives a request while<br>
the server's not ready, it replies with 'not_ready'. If the server's<br>
ready, the proxy passes the request on.<br>
2. The server starts in 'not_ready' mode, and starts a worker. The<br>
worker does the initialization, and when it's done, it sends the<br>
resulting state to the server. From that point, the server can reply<br>
to requests.<br>
<br>
If you want to do this without an extra process:<br>
<br>
- The server starts. It's initially unregistered. Any calls to the<br>
server look up the registration. If it's not registered, the call<br>
returns 'not_ready'. When it's ready, the server registers itself,<br>
meaning that calls can find the pid and make the call.<br>
<br>
We use a variant of this in production.<br>
<br><br>
</blockquote></div></div>