Custom timer module

Serge Aleynikov serge@REDACTED
Sun Jan 19 15:17:24 CET 2020


There's a project https://github.com/erlware/erlcron that implements jobs
with a timer.  It presently maintains persistence through a crontab config
file, but it looks like you need something more advanced, so you can take a
look at the code, the core of it is just in one module ecrn_agent, and
perhaps add a persistence layer.

Alternatively, switching your existing implementation to store records in a
mnesia disk table would likely be the easiest approach.

Best,

Serge

On Mon, Jan 13, 2020 at 10:33 AM ludovic@REDACTED <ludovic@REDACTED>
wrote:

> Hello,
>
> I'm looking for advice about implementing a timer queue in erlang or
> elixir.
>
> Basically what I need is a queue where I can write a timestamp, a key, and
> a value. When the local time reaches the timestamp, I want to handle the
> key/value (I guess receiving a message with the key and fetch, or receiving
> the key/value).
> The timer must be cancelable as the value is very small but will lead to
> heavy computation. I want to be able to fetch a key from outside of the
> process at any time and run the computation (and then cancel the scheduled
> computation).
>
> This is a subset of the `timer` module. But I need to persist the data to
> disk and reload on application start.
>
> I will have a tiny amount of entries : around 1000.
>
> At the moment I have an ordered_set with `{Timestamp, UserKey} = Key` as
> keys, I lookup for the first key and send_after to self the `Key` with
> `erlang:start_timer(max(TimeStamp, 1), self(), {run_deletion, Key})`,
> which returns a ref that I keep in state so I can ignore timer messages
> with an older ref. Everything is done inside a gen_server where I load the
> table from disk after init. Also I have to write the table to disk after
> each update because it is very important that all events are handled.
>
> I'm about to implement cancellation but the code becomes messy as I do
> both table management and data management in the same module.
>
> I wonder if there are implementations of this pattern in the community ? I
> could use a priority queue, but it seems to me that the implementations use
> a fixed list of priorities, and not arbitrary priorities (like a timestamp).
>
> Thank you
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20200119/31e64674/attachment.htm>


More information about the erlang-questions mailing list