<div dir="ltr">I have a pubsub system which has a single publisher process that maintains all its subscriber processes' Pid's in an ETS table.<div><br></div><div>The publisher monitors its subscribers and when the publisher receives DOWN message, it removes the subscriber Pid from the table.</div>
<div><br></div><div>The table entries are tuples of the form {MonitorRef, SubscriberPid}, and the MonitorRef is used as the key.</div><div><br></div><div>Now I would like to make sure that if the publisher dies, and gets restarted by its supervisor, the subscriber table is preserved. So I created a process that creates the ETS table, sets the table's heir to self(), and then gives away the table to the publisher.</div>
<div><br></div><div>The problem is that I do not know how to handle transfer of the table from the heir to the publisher:</div><div><br></div><div>when publisher receives the table, the table contains a list of tuples {MonitorRef, SubscriberPid}, but the MonitorRefs were created by the previous publisher instance, so when the new publisher receives ETS_TRANSFER it needs to monitor all these SubscriberPids again.</div>
<div><br></div><div>what is the best way to do it? Loop over all ETS entries, attach a monitor to each and reenter the new MonitorRefs into the table? This might be slow, no? Maybe my architecture can be improved? Any advice?</div>
<div><br></div><div>thanks</div><div>Konstantin</div></div>