[erlang-questions] ETS tables and pubsub

akonsu akonsu@REDACTED
Tue Nov 12 19:38:49 CET 2013

I have a pubsub system which has a single publisher process that maintains
all its subscriber processes' Pid's in an ETS table.

The publisher monitors its subscribers and when the publisher receives DOWN
message, it removes the subscriber Pid from the table.

The table entries are tuples of the form {MonitorRef, SubscriberPid}, and
the MonitorRef is used as the key.

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.

The problem is that I do not know how to handle transfer of the table from
the heir to the publisher:

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.

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?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20131112/eba5d30d/attachment.htm>

More information about the erlang-questions mailing list