Hello,

Now, when thinking about a "reconfig" operation, most plugins will
probably de-configure and re-read the new configuration (possibly
leaving some caches or certain state-information in place). Obviously, this would not work if there are more than one <Plugin> blocks. I.e., a
plugin would behave differently when being configured and when being
re-configured.

Some do not read more than one config block (I don't remember which one I found recently). About this, I have a question (that should maybe be discussed in another thread) : I have a generic config file. How do I do with specific configurations ?

One solution is to have a centralized configuration (and deploy it with puppet or some similar tool).

Another solution would be to have a generic configuration file and another file that override the definitions of the generic one. Why do I say that here ? Because the "Include" directive already exists, and if you decide to take into account one and only one <plugin> block (and define if you take the first or the last one), this should be the solution to my problem. I "include" the specific configuration file at the right place (first or last line in the configuration file) and any <plugin> block in the included file will override the block in the generic one.

Yes, if possible, make that only one <plugin> block is read for one plugin.


The question is if this should be considered at all (after all, it's not
officially supported). However, by splitting the "reconfig" into
"deconfig" and "reconfig" (or "config"), we could easily handle this
situation as well. So, I suggest the following:

 - typedef int (*deconfig_cb) (void);

 - typedef int (*reconfig_cb) (oconfig_item_t *);

That is, 'deconfig' would use the same signature as 'shutdown' and
'reconfig' would use the same signature as 'config'. This would allow to
use the appropriate callbacks twice, which in most cases should be
sufficient (probably plus some checks for current settings).

I understand what a a deconfig_cb would do, is useful to distinguish the 2 sections <free the memory> and <allocate memory for configuration items>. But what do you want to do with a deconfig_cb() without a reconfig_cb() ?

And what is the difference between the config_cb() (the one that already exists) and reconfig_cb() ?


Any thoughts, comments on this?

As a second step we could then think about also implementing a "reload" action. This would mean unloading and reloading the shared object of a
plugin and then doing a "reconfigure".

In fact, thinking about this again, I think that a global reload should not unload and re-load the shared objects (but possibly unload plugins that are no longer used and load new plugins). Else, it's gonna be hard
to keep plugin-global information (caches, etc.) in place.

Right.
About the local allocated memory, how can you ensure that everything is freed at unload time ? Only on the developer's responsibility ?

However, a second operation (available through the 'unixsock' plugin and similar) could be used for that case if anybody comes up with a use-case
for that.

Thinking about my recent jsonrpc plugin (already usable but not yet finished), do you think that it will share functions with unixsock ? Like deconfig/reconfig, unload/reload... ?
https://github.com/collectd/collectd/pull/154

Regards,
Yves

--
- Homepage - http://ymettier.free.fr - - GPG key - http://ymettier.free.fr/gpg.txt - - C en action - http://ymettier.free.fr/livres/C_en_action_ed2.html - - Guide Survie C - http://www.pearson.fr/livre/?GCOI=27440100673730 -

_______________________________________________
collectd mailing list
collectd@verplant.org
http://mailman.verplant.org/listinfo/collectd

Reply via email to