[ClusterLabs Developers] Resource Agent language discussion

Andrew Beekhof andrew at beekhof.net
Fri Aug 28 00:10:43 EDT 2015


> On 21 Aug 2015, at 2:21 am, Jehan-Guillaume de Rorthais <jgdr at dalibo.com> wrote:
> 
> On Thu, 20 Aug 2015 15:05:24 +1000
> Andrew Beekhof <andrew at beekhof.net> wrote:
> 
>> 
>>> On 19 Aug 2015, at 6:59 pm, Jehan-Guillaume de Rorthais <jgdr at dalibo.com>
>>> wrote:
>>> 
>>> On Mon, 17 Aug 2015 09:42:35 +1000
>>> Andrew Beekhof <andrew at beekhof.net> wrote:
>>> 
>>>>> On 11 Aug 2015, at 5:34 pm, Jehan-Guillaume de Rorthais <jgdr at dalibo.com>
>>>>> wrote:
>>>>> 
>>>>> On Tue, 11 Aug 2015 11:30:03 +1000
>>>>> Andrew Beekhof <andrew at beekhof.net> wrote:
>>> [...]
>>>>>> You can and should use whatever language you like for your own private
>>>>>> RAs. But if you want it accepted and maintained by the resource-agents
>>>>>> project, you would be advised to use the language they have standardised
>>>>>> on.
>>>>> 
>>>>> Well, let's imagine our RA was written in bash (in fact, we have a bash
>>>>> version pretty close to the current perl version we abandoned). I wonder
>>>>> if it would be accepted in the resource-agents project anyway as another
>>>>> one already exists there. I can easily list the reasons we rewrote a new
>>>>> one, but this is not the subject here.
>>>>> 
>>>>> The discussion here is more about the language, if I should extract a
>>>>> ocf-perl-module from my RA and if there is any chance the resource-agents
>>>>> project would accept it.
>>>> 
>>>> Well, it depends on the reasons you didn’t list :-)
>>> 
>>> Ok, let's answer the questions then :)
>>> 
>>>> The first questions any maintainer is going to ask are:
>>>> - why did you write a new one?
>>> 
>>> About the existing pgsql RA:
>>> * it supports stateless AND multistate pgsql resource. It makes the code
>>>   bigger, more complexe, hard to follow and understand
>>> * some params are for multistate usage only, some other for stateless only,
>>>   some for both, making the configuration harder to understand
>>> * some params are required for multistate where a recent PostgreSQL can
>>> live without them (restore_command)
>>> * it achieves operations a RA should not take care of (switching from
>>>   synchronous to asynchronous replication on the master if slaves are gone,
>>>   killing all existing xact)
>>> * ...and this makes the code even bigger and complexe again
>>> * it supports too many options and has some conventions the DBA should care
>>>   themselves. This make it way too complex and touchy to setup and maintain
>>> * it does not support demote, making the code lying about the real
>>>   state of the resource to Pacemaker. This was because demote/switchover
>>> was unsafe for postgresql < 9.3.
>>> 
>>> What we tried to achieve with a new pgsql RA:
>>> * multistate only (we already have a stateless RA, in bash)
>>> * should have a simple code: easier to understand, to maintain, achieve one
>>>   goal at a time
>>> * be simple to setup
>>> * should not substitute itself to the DBA
>>> * support safe ("cold") demote/switchover
>>> 
>>>> - can we merge this with the old one?
>>> 
>>> Well, it would make the code even bigger, maybe conflicting and harder to
>>> understand. I already can hear questions about such a frankenstein RA
>>> ("why am I able to setup two different multistate architecture?" "why this
>>> one does not supports this parameter?" "should I create my recovery.conf or
>>> not?")
>>> 
>>> Some of our ideas could be merged to the old one though, we could discuss
>>> and help maintainers if they are interested and have time. But we only have
>>> a limited R&D time and have no time to lead such a development.
>>> 
>>>> - can the new one replace the old one? (ie. full superset)
>>> 
>>> No. It does not support stateless resource, does not mess with replication
>>> synchronism, does not kill queries if all the slaves are gone, does not
>>> "lock" an instance when it failed, only promote the resource using "pg_ctl
>>> promote" (with no restart), ...
>>> 
>>>> Because if both are included, then they will forevermore be answering the
>>>> question “which one should I use?”.
>>> 
>>> True.
>>> 
>>>> Basically, if you want it accepted upstream, then yes, you probably want to
>>>> ditch the perl bit. But not having seen the agent or knowing why it exists,
>>>> its hard to say.
>>> 
>>> Well, it seems our RA will not make it to the upstream repository,
>> 
>> You made a fairly reasonable argument for separate stateless and stateful
>> variants.
> 
> BTW, how other official RA are dealing with this?

They’re not, but in this case it seems there could be good reasons to separate them

> A quick look at RA names
> seems to reveal no service have dedicated stateless and stateful RA scripts.
> 
> [...]
>>> What I was discussing here was:
>>> 
>>> * if not using bash, is there any trap we should avoid that are already
>>>   addressed in the ocf-shellfuncs library?
>> 
>> No, you just might have to re-implement some things.
>> Particularly logging.
> 
> Ok, that was my conclusion so far. I'll have a look at the logging funcs then.
> 
>>> * is there a chance a perl version of such library would be accepted
>>> upstream?
>> 
>> Depends if you’re volunteering to maintain it too :)
> 
> I do. I'll have to do it on my own for my RA anyway. 





More information about the Developers mailing list