perl plugin: Renamed and documented "RegisterLegacyFlush" option.
authorPavel Rochnyack <pavel2000@ngs.ru>
Fri, 16 Sep 2016 02:58:44 +0000 (08:58 +0600)
committerPavel Rochnyack <pavel2000@ngs.ru>
Fri, 16 Sep 2016 04:46:26 +0000 (10:46 +0600)
src/collectd-perl.pod
src/perl.c

index f1913b8..9af3c0c 100644 (file)
@@ -75,6 +75,20 @@ Adds I<Dir> to the B<@INC> array. This is the same as using the B<-IDir>
 command line option or B<use lib Dir> in the source code. Please note that it
 only has effect on plugins loaded after this option.
 
+=item B<RegisterLegacyFlush> I<true|false>
+
+The C<Perl plugin> used to register one flush callback (called B<"perl">) and
+call all Perl-based flush handlers when this callback was called. Newer versions
+of the plugin wrap the Perl flush handlers and register them directly with the
+daemon I<in addition> to the legacy B<"perl"> callback. This allows to call
+specific Perl flush handlers, but has the downside that flushing I<all> plugins
+now calls the Perl flush handlers twice (once directly and once via the legacy
+callback). Unfortunately, removing the B<"perl"> callback would break backwards
+compatibility.
+
+This option allows you to disable the legacy B<"perl"> flush callback if you care
+about the double call and don't call the B<"perl"> callback in your setup.
+
 =back
 
 =head1 WRITING YOUR OWN PLUGINS
index 3f430bd..4a11d6c 100644 (file)
@@ -185,7 +185,7 @@ extern char **environ;
  * private variables
  */
 
-static int flush_callback_registered = 0;
+static _Bool register_legacy_flush = 1;
 
 /* if perl_threads != NULL perl_threads->head must
  * point to the "base" thread */
@@ -1699,8 +1699,8 @@ static void _plugin_register_generic_userdata (pTHX, int type, const char *desc)
                ret = plugin_register_notification(pluginname, perl_notify, &userdata);
        }
        else if (PLUGIN_FLUSH == type) {
-               if (0 == flush_callback_registered) { /* For collectd-5.6 only, #1731 */
-                       flush_callback_registered++;
+               if (1 == register_legacy_flush) { /* For collectd-5.7 only, #1731 */
+                       register_legacy_flush = 0;
                        ret = plugin_register_flush("perl", perl_flush, /* user_data = */ NULL);
                }
 
@@ -2806,8 +2806,8 @@ static int perl_config (oconfig_item_t *ci)
                        current_status = perl_config_includedir (aTHX_ c);
                else if (0 == strcasecmp (c->key, "Plugin"))
                        current_status = perl_config_plugin (aTHX_ c);
-               else if (0 == strcasecmp (c->key, "DisableOldFlush"))
-                       flush_callback_registered++;
+               else if (0 == strcasecmp (c->key, "RegisterLegacyFlush"))
+                       cf_util_get_boolean (c, &register_legacy_flush);
                else
                {
                        log_warn ("Ignoring unknown config key \"%s\".", c->key);