[erlang-questions] wildcarded resource counters in Gproc

Ulf Wiger ulf@REDACTED
Thu Dec 1 22:14:30 CET 2016


Hi Garrett,

Thanks for playing. ;-)

In the case I have in mind, a given process may need to register multiple
instances of a resource, where the key is basically {ServiceName, Route}.
The resource count should keep track of instances of ServiceName, and
especially trigger when the count reaches 0 (service no longer available).

While one could add an extra function that creates a resource, also
updating a wildcarded resource count, this opens up for possible bugs where
the wrong function is used to create a resource, throwing the count out of
sync.

The proposed change was the most lightweight way I could think of to extend
the 'rc' type, essentially adding one more layer of abstraction to it. But
if there is another way, efficient and elegant, I'm wide open to
suggestions.

BR,
Ulf W

2016-12-01 19:11 GMT+01:00 Garrett Smith <g@REDACTED>:

> This doesn't feel right to me - it strikes me as edge case support
> that's impacting what's otherwise a very simple feature.
>
> If this is generally useful, would it make sense to implement it as a
> new function call, which made the additional update explicit?
>
> On Thu, Dec 1, 2016 at 11:11 AM, Ulf Wiger <ulf@REDACTED> wrote:
> > There's a new PR on Gproc, adding support for limited wildcard matching
> in
> > resource counters.
> >
> > https://github.com/uwiger/gproc/pull/128
> >
> > I don't know how many people use resource counters ('rc'), but thought
> I'd
> > ask.
> >
> > The operation of registering (or unregistering) a resource now makes one
> > extra update_counter() protected by a try ... catch. My assumption is
> that
> > this extra overhead will be insignificant to just about all use cases,
> but
> > ... does anyone out there want to disagree?
> >
> > Briefly, when registering a resource ('r') object, gproc would try to
> > perform an update_counter on the corresponding 'rc' object - an operation
> > that might fail if the 'rc' object doesn't exist. Now, if the name of the
> > resource is a tuple, it also tries to update an 'rc' object with the last
> > element of the name tuple replaced with '\\_'. This make it possible to
> > count resources whose names differ in only the last tuple element. For
> > non-tuple resource names, it works just like before.
> >
> > BR,
> > Ulf W
> >
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20161201/cd4d8987/attachment.htm>


More information about the erlang-questions mailing list