[Pacemaker] can we update an attribute with cmpxchg "atomic compare and exchange" semantics?
Lars Ellenberg
lars.ellenberg at linbit.com
Tue Sep 30 13:31:11 UTC 2014
On Tue, Sep 30, 2014 at 01:51:21PM +1000, Andrew Beekhof wrote:
>
> On 30 Sep 2014, at 6:22 am, Lars Ellenberg <Lars.Ellenberg at linbit.com> wrote:
>
> > On Wed, Sep 10, 2014 at 11:50:58AM +0200, Lars Ellenberg wrote:
> >>
> >> Hi Andrew (and others).
> >>
> >> For a certain use case (yes, I'm talking about DRBD "peer-fencing" on
> >> loss of replication link), it would be nice to be able to say:
> >>
> >> update some_attribute=some_attribute+1 where some_attribute >= 0
> >>
> >> delete some_attribute where some_attribute=0
> >>
> >> Ok, that's not the classic cmpxchg(), more of an atomic_add();
> >> or similar enough. With hopefully just a single cib roundrip.
> >>
> >>
> >> Let me rephrase:
> >> Update attribute "this_is_pink" (for node-X with ID attr-ID):
> >>
> >> fail if said attr-ID exists elsewhere (not as the intended attribute
> >> at the intended place in the xml tree)
> >> (this comes for free already, I think)
> >>
> >> if it does not exist at all, assume it was present with current value 0
> >>
> >> if the current (or assumed current) value is >= 0, add 1
> >>
> >> if the current value is < 0, fail
> >>
> >> (optionally: return new value? old value?)
> >
> > Did anyone read this?
>
> Yep, but it requires a non-trivial answer so it got deferred :)
>
> Its a reasonable request, we've spoken about something similar in the past and its clear that at some point attrd needs to grow some extra capabilities.
> Exactly when it will bubble up to the top of the todo list is less certain, though I would happily coach someone with the necessary motivation.
>
> The other thing to mention is that currently the only part that wont work is "if the current value is < 0, fail".
> Setting value="value++" will do the rest.
Nice.
> So my question would be... how important is the 'lt 0' case?
>
> Actually, come to think of it, it's not a bad default behaviour.
> Certainly failing value++ if value=-INFINITY would be logically consistent with the existing code.
> Would that be sufficient?
>
I need to think about that some more.
I may need to actually try this out and try to implement my scenario.
--
: Lars Ellenberg
: LINBIT | Your Way to High Availability
: DRBD/HA support and consulting http://www.linbit.com
DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.
More information about the Pacemaker
mailing list