[ClusterLabs] [ClusterLabs Developers] Resource Agent language discussion
mittspamkonto at gmail.com
Tue Aug 11 05:40:55 EDT 2015
I'm butting in here by saying that I don't think that the performance
discussion is very useful. Performance can always be improved, and by that
logic everything should be hand-written in assembly. Correctness and
maintainability should be of much higher importance. Premature
optimization.... Besides, Bash isn't exactly the fastest choice out there.
On Tue, Aug 11, 2015 at 11:15 AM, Fabio M. Di Nitto <fabbione at fabbione.net>
> On 8/11/2015 11:01 AM, Jehan-Guillaume de Rorthais wrote:
> > On Tue, 11 Aug 2015 06:42:37 +0200
> > "Fabio M. Di Nitto" <fabbione at fabbione.net> wrote:
> >> On 8/7/2015 5:14 PM, Jehan-Guillaume de Rorthais wrote:
> >>> Hi Jan,
> >>> On Fri, 7 Aug 2015 15:36:57 +0200
> >>> Jan Pokorný <jpokorny at redhat.com> wrote:
> >>>> On 07/08/15 12:09 +0200, Jehan-Guillaume de Rorthais wrote:
> >>>>> Now, I would like to discuss about the language used to write a RA in
> >>>>> Pacemaker. I never seen discussion or page about this so far.
> >>>> it wasn't in such a "heretic :)" tone, but I tried to show that it
> >>>> is extremely hard (if not impossible in some instances) to write
> >>>> bullet-proof code in bash (or POSIX shell, for that matter) because
> >>>> it's so cumbersome to move from "whitespace-delimited words as
> >>>> a single argument" and "words as standalone arguments" back and forth,
> >>>> connected with quotation-desired/-counterproductive madness
> >>>> (what if one wants to indeed pass quotation marks as legitimate
> >>>> characters within the passed value, etc.) few months back:
> >>>> http://clusterlabs.org/pipermail/users/2015-May/000403.html
> >>>> (even on developers list, but with fewer replies and broken threading:
> >>>> http://clusterlabs.org/pipermail/developers/2015-May/000023.html).
> >>> Thanks for the links and history. You add some more argument to my
> points :)
> >>>>> HINT: I don't want to discuss (neither troll about) what is the best
> >>>>> language. I would like to know why **ALL** the RA are written in
> >>>>> bash
> >>>> I would expect the original influence were the init scripts (as RAs
> >>>> are mostly just enriched variants to support more flexible
> >>>> configuration and better diagnostics back to the cluster stack),
> >>>> which in turn were born having simplicity and ease of debugging
> >>>> (maintainability) in mind.
> >>> That sounds legitimate. And bash is still appropriate for some simple
> >>> But for the same ease of code debugging and maintainability arguments
> >>> many others), complexe RA shouldn't use shell as language.
> >> so beside the language you can/want to use, from a development
> >> perspective you guys are probably right that in some cases, more complex
> >> languages could be a better fit.
> >> But you forgot to position yourself as end user and the reason why we
> >> currently use bash/shell.
> >> first of all, our end user is not necessarily a developer. Most of them
> >> are in fact sysadmins and one common that sysadmins have is that they
> >> know bash/shell.
> > I understand that. However, most sysadmins know the basics of bash,
> maybe some
> > advanced bash, to interact with the system. But how many of them are
> > doing proper **development** in bash? Use arrays, escape parameters,
> > against unwanted globing, use substitutions instead of
> > cut/sed/awk/grep/whatever, check their return code, declare "typed"
> > mess with their scope, ...?
> > Sysadmins are happy with bash for simple tasks/scripts or just doing
> > When it comes to development, they turn to perl or python nowadays. If
> > want to open and debug a RA, this is not some sysadmin anymore, this is
> > development. At least, I would expect published RA to be well tested and
> > "production" ready, not having trivial bug easy to fix.
> >> If needs arise to debug a RA, shell is pretty much the only common
> >> denominator with our user base.
> > But as a sysadmin who tries to write robust bash script and as a
> PostgreSQL DBA,
> > if I open the pgsql RA agent, I become a bit nervous. Try to run
> shellcheck on
> > the pgsql and mysql RA.
> > Proper and robust bash development often require to use syntaxes,
> > and cautions a lot of people will not be familiar with. Worst, sometime
> > must stick outside of good practices: consider some optional args to a
> > command you must not quote as instance... It just becomes quickly a
> > So all-in-all, as a sysadmin, watching at some RA code (not all of them)
> > give me much more confidence about them. And reading the discussions
> pointed by
> > Jan earlier in this thread confirm this feeling.
> >> The other problem i see in using other languages is how they operate
> >> under extreme conditions (memory pressure, disk I/O etc).
> >> Just for the fun of it,
> > [...]
> >> Granted, it´s an incredibly small test et all, but all I am trying to
> >> say is that Cluster is supposed to be as reliable as possible under
> >> extreme conditions.
> > Ok, I understand this argument. Bash is reliable and lighter, so better
> fit for
> > extreme condition. But then, I would expect the project to provide a C
> > library as well. I'm not kidding, I understand bash is a good
> compromise. But
> > as far as I can read the code and debug if needed, whatever the language.
> > Again, this is development tasks.
> > If I pick the PostgreSQL project, the engine can be extended using SQL,
> > PL/PgSQL, python, perl, C, and many other languages (even shell), to add
> > operators, types, functions/procedures, background worker (C only), ...
> > extending or using external modules are responsible to test and validate
> > Sometime, when such a module is really useful, they are swallowed in the
> > PostgreSQL core officialy (xml, autovacuum, FTS(tsearch), ...). But at
> > PostgreSQL provides API and libraries for these languages.
> > Considering robustness and extreme condition, database and clustering
> > share the same needs and attention.
> > Note that 3 RA are using perl from bash for some more complex (though
> > simple) tasks: apache-conf.sh, nginx and pgsql. As long as perl has been
> > why not writing the whole RA in perl? ;-)
> >> In most systems, all commands required to execute a RA in shell are
> >> already cached in ram and requirements to re-run them are minimal (and
> >> could save a system).
> >> with Perl, there was no caching that I could see (even executing the
> >> command several times), with lots of I/O to load modules from disks.
> > If hitting 10MB on memory or disk is a problem on your server, your RA is
> > probably not your main problem by this time.
> That is a bad assumption that shouldn´t be done either directions.
> We could argue the other way around :)
> If loading 10MB of $fancy_language_script fails to stop a service that
> is driving the server bad, vs loading 500k of shell that saves the node
> to be fenced, then the language become a problem.
> >> So given that, is it worth rewriting the RA in another language (and
> >> what defines a "simple" vs "complex" ras from above)? or wouldn´t it
> >> better to just fix the current ones for stuff like escapes and handling
> >> of spaces in the options?
> Users mailing list: Users at clusterlabs.org
> Project Home: http://www.clusterlabs.org
> Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
> Bugs: http://bugs.clusterlabs.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Users