Nagios implied and additive inheritance; possible bug?

Thomas Guyot-Sionnest dermoth at aei.ca
Thu Mar 29 07:48:54 CEST 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

On 12-03-28 01:46 PM, Jochen Bern wrote:
> 
> I tried that myself a while back, and dug into the (3.2.x) code when it
> didn't work for me, either. (I'll assume that the relevant code is still
> the same in 3.3.1.) The fact of the matter is that in
> xdata/xodtemplate.c:xodtemplate_read_config_data(), you have calls - in
> this order - to
> 
> 1. xodtemplate_resolve_objects(), which calls
>    xodtemplate_resolve_service() on all service objects, which applies
>    all templates, using xodtemplate_get_inherited_string() *IFF* both
>    service and template have the corresponding config setting, which
>    does the additive inheritance,
> 
> 2. xodtemplate_clean_additive_strings(), which silently removes any
>    surviving "+" from contacts and contact groups settings of all
>    objects except host and service escalations, and
> 
> 3. xodtemplate_inherit_object_properties(), which does the host-to-
>    service inheritance.
> 
> They're not sitting *next* to each other, though - in particular, most
> of the "recombombulation" stuff intervenes between 2. and 3. - and
> turning things around would introduce a behavioral change for identical
> configs (= bad), anyway, so I never even tried to write a patch.

I've noticed this annoying issue a while back, but I didn't look much
into the logic there - that's a very nice overview of the issue.

So indeed changing things around isn't going to work, however there
might be another way to fix it. In #1,
xodtemplate_get_inherited_string() basically concatenate strings
together starting from the template. This meand that the order is
preserved, and if I get this right, in the end the + sign at the
beginning of the string is meaningful.

In #2, remove the +'es *except the first one* for anything that will be
processed by xodtemplate_inherit_object_properties()

#3a. contact* still have the + around, so inherit if NULL or [0] == '+',
so we inherit. User Happy!

#3b. process the inherited strings again with
xodtemplate_clean_additive_strings()


It will obviously change the behavior - anyone that end up with a + in
the begining of the strings will inherit - however I think it's limited
and can be fixed by first inheriting an empty contact group. It might be
possible to also add a switch to detect such errors when upgrading so
people using inheritance could see warnings in the verification pass.

What do you think?

- -- 
Thomas
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk9z98AACgkQ6dZ+Kt5Bchb/qQCgsCz6kvRCpNOX5L/ZutDdwzFO
96UAoM/SF85/nWMRKtfWqy3MHKYzrjAV
=R78b
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure




More information about the Developers mailing list