Code

Merge branch 'collectd-4.10' into collectd-5.0
authorFlorian Forster <octo@collectd.org>
Thu, 18 Oct 2012 10:43:30 +0000 (12:43 +0200)
committerFlorian Forster <octo@collectd.org>
Thu, 18 Oct 2012 10:46:59 +0000 (12:46 +0200)
Conflicts:
src/utils_db_query.c
src/utils_db_query.h

1  2 
src/disk.c
src/network.c
src/utils_db_query.c
src/utils_db_query.h

diff --combined src/disk.c
index fde0dcde9abd5112c48633a6dcd588ef8bb0f69b,4a78f1bdbfb060ad1c57109dbe6acaf8c9c4dd2a..7411c22588abd4e409f25027d784bd83b62af62a
@@@ -1,6 -1,6 +1,6 @@@
  /**
   * collectd - src/disk.c
 - * Copyright (C) 2005-2008  Florian octo Forster
 + * Copyright (C) 2005-2010  Florian octo Forster
   * Copyright (C) 2009       Manuel Sanmartin
   *
   * This program is free software; you can redistribute it and/or modify it
@@@ -85,19 -85,19 +85,19 @@@ typedef struct diskstat
        /* This overflows in roughly 1361 years */
        unsigned int poll_count;
  
 -      counter_t read_sectors;
 -      counter_t write_sectors;
 +      derive_t read_sectors;
 +      derive_t write_sectors;
  
 -      counter_t read_bytes;
 -      counter_t write_bytes;
 +      derive_t read_bytes;
 +      derive_t write_bytes;
  
 -      counter_t read_ops;
 -      counter_t write_ops;
 -      counter_t read_time;
 -      counter_t write_time;
 +      derive_t read_ops;
 +      derive_t write_ops;
 +      derive_t read_time;
 +      derive_t write_time;
  
 -      counter_t avg_read_time;
 -      counter_t avg_write_time;
 +      derive_t avg_read_time;
 +      derive_t avg_write_time;
  
        struct diskstats *next;
  } diskstats_t;
@@@ -212,7 -212,7 +212,7 @@@ static int disk_init (void
  
  static void disk_submit (const char *plugin_instance,
                const char *type,
 -              counter_t read, counter_t write)
 +              derive_t read, derive_t write)
  {
        value_t values[2];
        value_list_t vl = VALUE_LIST_INIT;
        if (ignorelist_match (ignorelist, plugin_instance) != 0)
          return;
  
 -      values[0].counter = read;
 -      values[1].counter = write;
 +      values[0].derive = read;
 +      values[1].derive = write;
  
        vl.values = values;
        vl.values_len = 2;
        plugin_dispatch_values (&vl);
  } /* void disk_submit */
  
 -      double avg_time_incr = ((double) interval_g) * avg_time;
+ #if KERNEL_LINUX
+ static counter_t disk_calc_time_incr (counter_t delta_time, counter_t delta_ops)
+ {
+       double avg_time = ((double) delta_time) / ((double) delta_ops);
++      double avg_time_incr = CDTIME_T_TO_DOUBLE (interval_g) * avg_time;
+       return ((counter_t) (avg_time_incr + .5));
+ }
+ #endif
  #if HAVE_IOKIT_IOKITLIB_H
  static signed long long dict_get_value (CFDictionaryRef dict, const char *key)
  {
@@@ -428,15 -438,15 +438,15 @@@ static int disk_read (void
  
        int minor = 0;
  
 -      counter_t read_sectors  = 0;
 -      counter_t write_sectors = 0;
 +      derive_t read_sectors  = 0;
 +      derive_t write_sectors = 0;
  
 -      counter_t read_ops      = 0;
 -      counter_t read_merged   = 0;
 -      counter_t read_time     = 0;
 -      counter_t write_ops     = 0;
 -      counter_t write_merged  = 0;
 -      counter_t write_time    = 0;
 +      derive_t read_ops      = 0;
 +      derive_t read_merged   = 0;
 +      derive_t read_time     = 0;
 +      derive_t write_ops     = 0;
 +      derive_t write_merged  = 0;
 +      derive_t write_time    = 0;
        int is_disk = 0;
  
        diskstats_t *ds, *pre_ds;
                }
  
                {
 -                      counter_t diff_read_sectors;
 -                      counter_t diff_write_sectors;
 +                      derive_t diff_read_sectors;
 +                      derive_t diff_write_sectors;
  
                /* If the counter wraps around, it's only 32 bits.. */
                        if (read_sectors < ds->read_sectors)
                /* Calculate the average time an io-op needs to complete */
                if (is_disk)
                {
 -                      counter_t diff_read_ops;
 -                      counter_t diff_write_ops;
 -                      counter_t diff_read_time;
 -                      counter_t diff_write_time;
 +                      derive_t diff_read_ops;
 +                      derive_t diff_write_ops;
 +                      derive_t diff_read_time;
 +                      derive_t diff_write_time;
  
                        if (read_ops < ds->read_ops)
                                diff_read_ops = 1 + read_ops
                                        + (UINT_MAX - ds->read_ops);
                        else
                                diff_read_ops = read_ops - ds->read_ops;
 -                      DEBUG ("disk plugin: disk_name = %s; read_ops = %llu; "
 -                                      "ds->read_ops = %llu; diff_read_ops = %llu;",
 +                      DEBUG ("disk plugin: disk_name = %s; read_ops = %"PRIi64"; "
 +                                      "ds->read_ops = %"PRIi64"; diff_read_ops = %"PRIi64";",
                                        disk_name,
                                        read_ops, ds->read_ops, diff_read_ops);
  
                                diff_write_time = write_time - ds->write_time;
  
                        if (diff_read_ops != 0)
-                               ds->avg_read_time += (diff_read_time
-                                               + (diff_read_ops / 2))
-                                       / diff_read_ops;
+                               ds->avg_read_time += disk_calc_time_incr (
+                                               diff_read_time, diff_read_ops);
                        if (diff_write_ops != 0)
-                               ds->avg_write_time += (diff_write_time
-                                               + (diff_write_ops / 2))
-                                       / diff_write_ops;
+                               ds->avg_write_time += disk_calc_time_incr (
+                                               diff_write_time, diff_write_ops);
  
                        ds->read_ops = read_ops;
                        ds->read_time = read_time;
  /* #endif defined(HAVE_LIBSTATGRAB) */
  
  #elif defined(HAVE_PERFSTAT)
 -      counter_t read_sectors;
 -      counter_t write_sectors;
 -      counter_t read_time;
 -      counter_t write_time;
 -      counter_t read_ops;
 -      counter_t write_ops;
 +      derive_t read_sectors;
 +      derive_t write_sectors;
 +      derive_t read_time;
 +      derive_t write_time;
 +      derive_t read_ops;
 +      derive_t write_ops;
        perfstat_id_t firstpath;
        int rnumdisk;
        int i;
diff --combined src/network.c
index 0b299d62aa2645f550150fb60ad9f785c0013651,570b9d4f552cf4757a0b240bebbffcada7dd8a9e..3cf222744262796d4ce964cf3c76d4c690202d49
@@@ -1,6 -1,6 +1,6 @@@
  /**
   * collectd - src/network.c
 - * Copyright (C) 2005-2009  Florian octo Forster
 + * Copyright (C) 2005-2010  Florian octo Forster
   * Copyright (C) 2009       Aman Gupta
   *
   * This program is free software; you can redistribute it and/or modify it
  
  #if HAVE_LIBGCRYPT
  # include <pthread.h>
+ # if defined __APPLE__
+ /* default xcode compiler throws warnings even when deprecated functionality
+  * is not used. -Werror breaks the build because of erroneous warnings.
+  * http://stackoverflow.com/questions/10556299/compiler-warnings-with-libgcrypt-v1-5-0/12830209#12830209
+  */
+ #  pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+ # endif
  # include <gcrypt.h>
+ # if defined __APPLE__
+ /* Re enable deprecation warnings */
+ #  pragma GCC diagnostic warning "-Wdeprecated-declarations"
+ # endif
  GCRY_THREAD_OPTION_PTHREAD_IMPL;
  #endif
  
@@@ -260,8 -271,7 +271,8 @@@ typedef struct receive_list_entry_s rec
   * Private variables
   */
  static int network_config_ttl = 0;
 -static size_t network_config_packet_size = 1024;
 +/* Ethernet - (IPv6 + UDP) = 1500 - (40 + 8) = 1452 */
 +static size_t network_config_packet_size = 1452;
  static int network_config_forward = 0;
  static int network_config_stats = 0;
  
@@@ -298,14 -308,14 +309,14 @@@ static pthread_mutex_t  send_buffer_loc
   * example). Only if neither is true, the stats_lock is acquired. The counters
   * are always read without holding a lock in the hope that writing 8 bytes to
   * memory is an atomic operation. */
 -static uint64_t stats_octets_rx  = 0;
 -static uint64_t stats_octets_tx  = 0;
 -static uint64_t stats_packets_rx = 0;
 -static uint64_t stats_packets_tx = 0;
 -static uint64_t stats_values_dispatched = 0;
 -static uint64_t stats_values_not_dispatched = 0;
 -static uint64_t stats_values_sent = 0;
 -static uint64_t stats_values_not_sent = 0;
 +static derive_t stats_octets_rx  = 0;
 +static derive_t stats_octets_tx  = 0;
 +static derive_t stats_packets_rx = 0;
 +static derive_t stats_packets_tx = 0;
 +static derive_t stats_values_dispatched = 0;
 +static derive_t stats_values_not_dispatched = 0;
 +static derive_t stats_values_sent = 0;
 +static derive_t stats_values_not_sent = 0;
  static pthread_mutex_t stats_lock = PTHREAD_MUTEX_INITIALIZER;
  
  /*
@@@ -322,30 -332,30 +333,30 @@@ static _Bool check_receive_okay (const 
    /* This is a value we already sent. Don't allow it to be received again in
     * order to avoid looping. */
    if ((status == 0) && (time_sent >= ((uint64_t) vl->time)))
 -    return (false);
 +    return (0);
  
 -  return (true);
 +  return (1);
  } /* }}} _Bool check_receive_okay */
  
  static _Bool check_send_okay (const value_list_t *vl) /* {{{ */
  {
 -  _Bool received = false;
 +  _Bool received = 0;
    int status;
  
    if (network_config_forward != 0)
 -    return (true);
 +    return (1);
  
    if (vl->meta == NULL)
 -    return (true);
 +    return (1);
  
    status = meta_data_get_boolean (vl->meta, "network:received", &received);
    if (status == -ENOENT)
 -    return (true);
 +    return (1);
    else if (status != 0)
    {
      ERROR ("network plugin: check_send_okay: meta_data_get_boolean failed "
        "with status %i.", status);
 -    return (true);
 +    return (1);
    }
  
    /* By default, only *send* value lists that were not *received* by the
@@@ -423,7 -433,7 +434,7 @@@ static int network_dispatch_values (val
      return (-ENOMEM);
    }
  
 -  status = meta_data_add_boolean (vl->meta, "network:received", true);
 +  status = meta_data_add_boolean (vl->meta, "network:received", 1);
    if (status != 0)
    {
      ERROR ("network plugin: meta_data_add_boolean failed.");
@@@ -662,7 -672,7 +673,7 @@@ static int write_part_number (char **re
  
        part_header_t pkg_head;
        uint64_t pkg_value;
-       
        int offset;
  
        packet_len = sizeof (pkg_head) + sizeof (pkg_value);
@@@ -1441,19 -1451,8 +1452,19 @@@ static int parse_packet (sockent_t *se
                                        &tmp);
                        if (status == 0)
                        {
 -                              vl.time = (time_t) tmp;
 -                              n.time = (time_t) tmp;
 +                              vl.time = TIME_T_TO_CDTIME_T (tmp);
 +                              n.time  = TIME_T_TO_CDTIME_T (tmp);
 +                      }
 +              }
 +              else if (pkg_type == TYPE_TIME_HR)
 +              {
 +                      uint64_t tmp = 0;
 +                      status = parse_part_number (&buffer, &buffer_size,
 +                                      &tmp);
 +                      if (status == 0)
 +                      {
 +                              vl.time = (cdtime_t) tmp;
 +                              n.time  = (cdtime_t) tmp;
                        }
                }
                else if (pkg_type == TYPE_INTERVAL)
                        status = parse_part_number (&buffer, &buffer_size,
                                        &tmp);
                        if (status == 0)
 -                              vl.interval = (int) tmp;
 +                              vl.interval = TIME_T_TO_CDTIME_T (tmp);
 +              }
 +              else if (pkg_type == TYPE_INTERVAL_HR)
 +              {
 +                      uint64_t tmp = 0;
 +                      status = parse_part_number (&buffer, &buffer_size,
 +                                      &tmp);
 +                      if (status == 0)
 +                              vl.interval = (cdtime_t) tmp;
                }
                else if (pkg_type == TYPE_HOST)
                {
@@@ -2671,7 -2662,7 +2682,7 @@@ static int add_to_buffer (char *buffer
  
        if (vl_def->time != vl->time)
        {
 -              if (write_part_number (&buffer, &buffer_size, TYPE_TIME,
 +              if (write_part_number (&buffer, &buffer_size, TYPE_TIME_HR,
                                        (uint64_t) vl->time))
                        return (-1);
                vl_def->time = vl->time;
  
        if (vl_def->interval != vl->interval)
        {
 -              if (write_part_number (&buffer, &buffer_size, TYPE_INTERVAL,
 +              if (write_part_number (&buffer, &buffer_size, TYPE_INTERVAL_HR,
                                        (uint64_t) vl->interval))
                        return (-1);
                vl_def->interval = vl->interval;
                        return (-1);
                sstrncpy (vl_def->type_instance, vl->type_instance, sizeof (vl_def->type_instance));
        }
-       
        if (write_part_values (&buffer, &buffer_size, ds, vl) != 0)
                return (-1);
  
@@@ -3141,6 -3132,8 +3152,6 @@@ static int network_config (oconfig_item
        network_config_set_boolean (child, &network_config_forward);
      else if (strcasecmp ("ReportStats", child->key) == 0)
        network_config_set_boolean (child, &network_config_stats);
 -    else if (strcasecmp ("CacheFlush", child->key) == 0)
 -      /* no op for backwards compatibility only */;
      else
      {
        WARNING ("network plugin: Option `%s' is not allowed here.",
@@@ -3164,7 -3157,7 +3175,7 @@@ static int network_notification (const 
  
    memset (buffer, 0, sizeof (buffer));
  
 -  status = write_part_number (&buffer_ptr, &buffer_free, TYPE_TIME,
 +  status = write_part_number (&buffer_ptr, &buffer_free, TYPE_TIME_HR,
        (uint64_t) n->time);
    if (status != 0)
      return (-1);
@@@ -3269,15 -3262,15 +3280,15 @@@ static int network_shutdown (void
  
  static int network_stats_read (void) /* {{{ */
  {
 -      uint64_t copy_octets_rx;
 -      uint64_t copy_octets_tx;
 -      uint64_t copy_packets_rx;
 -      uint64_t copy_packets_tx;
 -      uint64_t copy_values_dispatched;
 -      uint64_t copy_values_not_dispatched;
 -      uint64_t copy_values_sent;
 -      uint64_t copy_values_not_sent;
 -      uint64_t copy_receive_list_length;
 +      derive_t copy_octets_rx;
 +      derive_t copy_octets_tx;
 +      derive_t copy_packets_rx;
 +      derive_t copy_packets_tx;
 +      derive_t copy_values_dispatched;
 +      derive_t copy_values_not_dispatched;
 +      derive_t copy_values_sent;
 +      derive_t copy_values_not_sent;
 +      derive_t copy_receive_list_length;
        value_list_t vl = VALUE_LIST_INIT;
        value_t values[2];
  
        sstrncpy (vl.plugin, "network", sizeof (vl.plugin));
  
        /* Octets received / sent */
 -      vl.values[0].counter = (counter_t) copy_octets_rx;
 -      vl.values[1].counter = (counter_t) copy_octets_tx;
 +      vl.values[0].derive = (derive_t) copy_octets_rx;
 +      vl.values[1].derive = (derive_t) copy_octets_tx;
        sstrncpy (vl.type, "if_octets", sizeof (vl.type));
        plugin_dispatch_values_secure (&vl);
  
        /* Packets received / send */
 -      vl.values[0].counter = (counter_t) copy_packets_rx;
 -      vl.values[1].counter = (counter_t) copy_packets_tx;
 +      vl.values[0].derive = (derive_t) copy_packets_rx;
 +      vl.values[1].derive = (derive_t) copy_packets_tx;
        sstrncpy (vl.type, "if_packets", sizeof (vl.type));
        plugin_dispatch_values_secure (&vl);
  
  
  static int network_init (void)
  {
 -      static _Bool have_init = false;
 +      static _Bool have_init = 0;
  
        /* Check if we were already initialized. If so, just return - there's
         * nothing more to do (for now, that is). */
        if (have_init)
                return (0);
 -      have_init = true;
 +      have_init = 1;
  
  #if HAVE_LIBGCRYPT
        gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread);
        return (0);
  } /* int network_init */
  
- /* 
+ /*
   * The flush option of the network plugin cannot flush individual identifiers.
   * All the values are added to a buffer and sent when the buffer is full, the
   * requested value may or may not be in there, it's not worth finding out. We
   * just send the buffer if `flush'  is called - if the requested value was in
   * there, good. If not, well, then there is nothing to flush.. -octo
   */
 -static int network_flush (int timeout,
 -              const char __attribute__((unused)) *identifier,
 -              user_data_t __attribute__((unused)) *user_data)
 +static int network_flush (__attribute__((unused)) cdtime_t timeout,
 +              __attribute__((unused)) const char *identifier,
 +              __attribute__((unused)) user_data_t *user_data)
  {
        pthread_mutex_lock (&send_buffer_lock);
  
diff --combined src/utils_db_query.c
index 7e7504dc9fc2a0bed52000b6da08e7d7dd683663,675272c049d52d671d7bd50a3ebfccc04b77f9f8..aadf9c5ec1d7f6a4879a5701ebe19f2a25d23633
@@@ -39,6 -39,15 +39,6 @@@ struct udb_result_
    char   **values;
    size_t   values_num;
  
 -  /* Legacy data */
 -  int legacy_mode;
 -  size_t legacy_position;
 -  /* When in legacy mode:
 -   * - type/ds hold the format of the data
 -   * - instance_prefix is used as type-instance if non-NULL
 -   * - legacy_position holds the index of the column to use as value.
 -   */
 -
    udb_result_t *next;
  }; /* }}} */
  
@@@ -48,6 -57,8 +48,6 @@@ struct udb_query_s /* {{{ *
    char *statement;
    void *user_data;
  
 -  int legacy_mode;
 -
    unsigned int min_version;
    unsigned int max_version;
  
@@@ -73,7 -84,7 +73,7 @@@ struct udb_query_preparation_area_s /* 
    char *plugin;
    char *db_name;
  
 -  int interval;
 +  cdtime_t interval;
  
    udb_result_preparation_area_t *result_prep_areas;
  }; /* }}} */
@@@ -179,17 -190,185 +179,17 @@@ static int udb_config_set_uint (unsigne
    return (0);
  } /* }}} int udb_config_set_uint */
  
 -/*
 - * Legacy result private functions
 - */
 -static void udb_legacy_result_finish_result (udb_result_t const *r, /* {{{ */
 -    udb_result_preparation_area_t *prep_area)
 -{
 -  if ((r == NULL) || (prep_area))
 -    return;
 -
 -  assert (r->legacy_mode == 1);
 -
 -  prep_area->ds = NULL;
 -} /* }}} void udb_legacy_result_finish_result */
 -
 -static int udb_legacy_result_handle_result (udb_result_t *r, /* {{{ */
 -    udb_query_preparation_area_t *q_area,
 -    udb_result_preparation_area_t *r_area,
 -    udb_query_t const *q, char **column_values)
 -{
 -  value_list_t vl = VALUE_LIST_INIT;
 -  value_t value;
 -  char *value_str;
 -
 -  assert (r->legacy_mode == 1);
 -  assert (r_area->ds != NULL);
 -  assert (r_area->ds->ds_num == 1);
 -
 -  vl.values = &value;
 -  vl.values_len = 1;
 -
 -  value_str = column_values[r->legacy_position];
 -  if (0 != parse_value (value_str, &vl.values[0], r_area->ds->ds[0].type))
 -  {
 -    ERROR ("db query utils: udb_legacy_result_handle_result: "
 -        "Parsing `%s' as %s failed.", value_str,
 -        DS_TYPE_TO_STRING (r_area->ds->ds[0].type));
 -    errno = EINVAL;
 -    return (-1);
 -  }
 -
 -  if (q_area->interval > 0)
 -    vl.interval = q_area->interval;
 -
 -  sstrncpy (vl.host, q_area->host, sizeof (vl.host));
 -  sstrncpy (vl.plugin, q_area->plugin, sizeof (vl.plugin));
 -  sstrncpy (vl.plugin_instance, q_area->db_name, sizeof (vl.plugin_instance));
 -  sstrncpy (vl.type, r->type, sizeof (vl.type));
 -
 -  if (r->instance_prefix != NULL)
 -    sstrncpy (vl.type_instance, r->instance_prefix,
 -        sizeof (vl.type_instance));
 -
 -  plugin_dispatch_values (&vl);
 -
 -  return (0);
 -} /* }}} int udb_legacy_result_handle_result */
 -
 -static int udb_legacy_result_prepare_result (udb_result_t const *r, /* {{{ */
 -    udb_result_preparation_area_t *prep_area,
 -    char **column_names, size_t column_num)
 -{
 -  if (r == NULL)
 -    return (-EINVAL);
 -
 -  assert (r->legacy_mode == 1);
 -
 -  /* Make sure previous preparations are cleaned up. */
 -  udb_legacy_result_finish_result (r, prep_area);
 -
 -  if (r->legacy_position >= column_num)
 -  {
 -    ERROR ("db query utils: The legacy configuration specified (at least) "
 -        "%zu `Column's, but the query returned only %zu columns!",
 -        r->legacy_position + 1, column_num);
 -    return (-ENOENT);
 -  }
 -
 -  /* Read `ds' and check number of values {{{ */
 -  prep_area->ds = plugin_get_ds (r->type);
 -  if (prep_area->ds == NULL)
 -  {
 -    ERROR ("db query utils: udb_result_prepare_result: Type `%s' is not "
 -        "known by the daemon. See types.db(5) for details.",
 -        r->type);
 -    return (-1);
 -  }
 -
 -  if (prep_area->ds->ds_num != 1)
 -  {
 -    ERROR ("db query utils: udb_result_prepare_result: The type `%s' "
 -        "requires exactly %i values, but the legacy configuration "
 -        "requires exactly one!",
 -        r->type,
 -        prep_area->ds->ds_num);
 -    return (-1);
 -  }
 -  /* }}} */
 -
 -  return (0);
 -} /* }}} int udb_legacy_result_prepare_result */
 -
 -static int udb_legacy_result_create (const char *query_name, /* {{{ */
 -    udb_result_t **r_head, oconfig_item_t *ci, size_t position)
 -{
 -  udb_result_t *r;
 -
 -  if ((ci->values_num < 1) || (ci->values_num > 2)
 -      || (ci->values[0].type != OCONFIG_TYPE_STRING)
 -      || ((ci->values_num == 2)
 -        && (ci->values[1].type != OCONFIG_TYPE_STRING)))
 -  {
 -    WARNING ("db query utils: The `Column' block needs either one or two "
 -        "string arguments.");
 -    return (-1);
 -  }
 -
 -  r = (udb_result_t *) malloc (sizeof (*r));
 -  if (r == NULL)
 -  {
 -    ERROR ("db query utils: malloc failed.");
 -    return (-1);
 -  }
 -  memset (r, 0, sizeof (*r));
 -
 -  r->legacy_mode = 1;
 -  r->legacy_position = position;
 -
 -  r->type = strdup (ci->values[0].value.string);
 -  if (r->type == NULL)
 -  {
 -    ERROR ("db query utils: strdup failed.");
 -    free (r);
 -    return (-1);
 -  }
 -
 -  r->instance_prefix = NULL;
 -  if (ci->values_num == 2)
 -  {
 -    r->instance_prefix = strdup (ci->values[1].value.string);
 -    if (r->instance_prefix == NULL)
 -    {
 -      ERROR ("db query utils: strdup failed.");
 -      free (r->type);
 -      free (r);
 -      return (-1);
 -    }
 -  }
 -
 -  /* If all went well, add this result to the list of results. */
 -  if (*r_head == NULL)
 -  {
 -    *r_head = r;
 -  }
 -  else
 -  {
 -    udb_result_t *last;
 -
 -    last = *r_head;
 -    while (last->next != NULL)
 -      last = last->next;
 -
 -    last->next = r;
 -  }
 -
 -  return (0);
 -} /* }}} int udb_legacy_result_create */
 -
  /*
   * Result private functions
   */
  static int udb_result_submit (udb_result_t *r, /* {{{ */
      udb_result_preparation_area_t *r_area,
-     const udb_query_t const *q, udb_query_preparation_area_t *q_area)
+     udb_query_t const *q, udb_query_preparation_area_t *q_area)
  {
    value_list_t vl = VALUE_LIST_INIT;
    size_t i;
  
    assert (r != NULL);
 -  assert (r->legacy_mode == 0);
    assert (r_area->ds != NULL);
    assert (((size_t) r_area->ds->ds_num) == r->values_num);
  
    return (0);
  } /* }}} void udb_result_submit */
  
- static void udb_result_finish_result (const udb_result_t const *r, /* {{{ */
+ static void udb_result_finish_result (udb_result_t const *r, /* {{{ */
      udb_result_preparation_area_t *prep_area)
  {
    if ((r == NULL) || (prep_area == NULL))
      return;
  
 -  if (r->legacy_mode == 1)
 -  {
 -    udb_legacy_result_finish_result (r, prep_area);
 -    return;
 -  }
 -
 -  assert (r->legacy_mode == 0);
 -
    prep_area->ds = NULL;
    sfree (prep_area->instances_pos);
    sfree (prep_area->values_pos);
  static int udb_result_handle_result (udb_result_t *r, /* {{{ */
      udb_query_preparation_area_t *q_area,
      udb_result_preparation_area_t *r_area,
-     const udb_query_t const *q, char **column_values)
+     udb_query_t const *q, char **column_values)
  {
    size_t i;
  
    assert (r && q_area && r_area);
  
 -  if (r->legacy_mode == 1)
 -    return (udb_legacy_result_handle_result (r, q_area, r_area,
 -          q, column_values));
 -
 -  assert (r->legacy_mode == 0);
 -
    for (i = 0; i < r->instances_num; i++)
      r_area->instances_buffer[i] = column_values[r_area->instances_pos[i]];
  
    return udb_result_submit (r, r_area, q, q_area);
  } /* }}} int udb_result_handle_result */
  
- static int udb_result_prepare_result (const udb_result_t const *r, /* {{{ */
+ static int udb_result_prepare_result (udb_result_t const *r, /* {{{ */
      udb_result_preparation_area_t *prep_area,
      char **column_names, size_t column_num)
  {
    if ((r == NULL) || (prep_area == NULL))
      return (-EINVAL);
  
 -  if (r->legacy_mode == 1)
 -    return (udb_legacy_result_prepare_result (r, prep_area,
 -          column_names, column_num));
 -
 -  assert (r->legacy_mode == 0);
 -
  #define BAIL_OUT(status) \
    prep_area->ds = NULL; \
    sfree (prep_area->instances_pos); \
@@@ -560,7 -759,7 +560,7 @@@ void udb_query_free_one (udb_query_t *q
   */
  int udb_query_create (udb_query_t ***ret_query_list, /* {{{ */
      size_t *ret_query_list_len, oconfig_item_t *ci,
 -    udb_query_create_callback_t cb, int legacy_mode)
 +    udb_query_create_callback_t cb)
  {
    udb_query_t **query_list;
    size_t        query_list_len;
    int status;
    int i;
  
 -  size_t legacy_position;
 -
    if ((ret_query_list == NULL) || (ret_query_list_len == NULL))
      return (-EINVAL);
    query_list     = *ret_query_list;
      return (-1);
    }
    memset (q, 0, sizeof (*q));
 -  q->legacy_mode = legacy_mode;
    q->min_version = 0;
    q->max_version = UINT_MAX;
  
 -  legacy_position = 0;
 -
    status = udb_config_set_string (&q->name, ci);
    if (status != 0)
    {
      else if (strcasecmp ("MaxVersion", child->key) == 0)
        status = udb_config_set_uint (&q->max_version, child);
  
 -    /* PostgreSQL compatibility code */
 -    else if ((strcasecmp ("Query", child->key) == 0)
 -        && (q->legacy_mode == 1))
 -    {
 -      WARNING ("db query utils: Query `%s': The `Query' option is "
 -          "deprecated. Please use `Statement' instead.",
 -          q->name);
 -      status = udb_config_set_string (&q->statement, child);
 -    }
 -    else if ((strcasecmp ("Column", child->key) == 0)
 -        && (q->legacy_mode == 1))
 -    {
 -      WARNING ("db query utils: Query `%s': The `Column' option is "
 -          "deprecated. Please use the new syntax instead.",
 -          q->name);
 -      status = udb_legacy_result_create (q->name, &q->results, child,
 -          legacy_position);
 -      legacy_position++;
 -    }
 -    else if ((strcasecmp ("MinPGVersion", child->key) == 0)
 -        && (q->legacy_mode == 1))
 -    {
 -      WARNING ("db query utils: Query `%s': The `MinPGVersion' option is "
 -          "deprecated. Please use `MinVersion' instead.",
 -          q->name);
 -      status = udb_config_set_uint (&q->min_version, child);
 -    }
 -    else if ((strcasecmp ("MaxPGVersion", child->key) == 0)
 -        && (q->legacy_mode == 1))
 -    {
 -      WARNING ("db query utils: Query `%s': The `MaxPGVersion' option is "
 -          "deprecated. Please use `MaxVersion' instead.",
 -          q->name);
 -      status = udb_config_set_uint (&q->max_version, child);
 -    }
 -
      /* Call custom callbacks */
      else if (cb != NULL)
      {
@@@ -825,7 -1065,7 +825,7 @@@ int udb_query_check_version (udb_query_
    return (1);
  } /* }}} int udb_query_check_version */
  
- void udb_query_finish_result (const udb_query_t const *q, /* {{{ */
+ void udb_query_finish_result (udb_query_t const *q, /* {{{ */
      udb_query_preparation_area_t *prep_area)
  {
    udb_result_preparation_area_t *r_area;
    sfree (prep_area->plugin);
    sfree (prep_area->db_name);
  
 -  prep_area->interval = -1;
 +  prep_area->interval = 0;
  
    for (r = q->results, r_area = prep_area->result_prep_areas;
        r != NULL; r = r->next, r_area = r_area->next)
    }
  } /* }}} void udb_query_finish_result */
  
- int udb_query_handle_result (const udb_query_t const *q, /* {{{ */
+ int udb_query_handle_result (udb_query_t const *q, /* {{{ */
      udb_query_preparation_area_t *prep_area, char **column_values)
  {
    udb_result_preparation_area_t *r_area;
    return (0);
  } /* }}} int udb_query_handle_result */
  
- int udb_query_prepare_result (const udb_query_t const *q, /* {{{ */
+ int udb_query_prepare_result (udb_query_t const *q, /* {{{ */
      udb_query_preparation_area_t *prep_area,
      const char *host, const char *plugin, const char *db_name,
 -    char **column_names, size_t column_num, int interval)
 +    char **column_names, size_t column_num, cdtime_t interval)
  {
    udb_result_preparation_area_t *r_area;
    udb_result_t *r;
diff --combined src/utils_db_query.h
index 727be03647714e8bc76f6b4d5403508eeca74616,7856bdbed73865dde8f79332bc4d2dbe2ba6fe81..b6f4cea00d6351c8c0edcf97ab44d0a45cfc7e86
@@@ -41,7 -41,7 +41,7 @@@ typedef int (*udb_query_create_callback
   */
  int udb_query_create (udb_query_t ***ret_query_list,
      size_t *ret_query_list_len, oconfig_item_t *ci,
 -    udb_query_create_callback_t cb, int legacy_mode);
 +    udb_query_create_callback_t cb);
  void udb_query_free (udb_query_t **query_list, size_t query_list_len);
  
  int udb_query_pick_from_list_by_name (const char *name,
@@@ -65,13 -65,13 +65,13 @@@ void *udb_query_get_user_data (udb_quer
   */
  int udb_query_check_version (udb_query_t *q, unsigned int version);
  
- int udb_query_prepare_result (const udb_query_t const *q,
+ int udb_query_prepare_result (udb_query_t const *q,
      udb_query_preparation_area_t *prep_area,
      const char *host, const char *plugin, const char *db_name,
 -    char **column_names, size_t column_num, int interval);
 +    char **column_names, size_t column_num, cdtime_t interval);
- int udb_query_handle_result (const udb_query_t const *q,
+ int udb_query_handle_result (udb_query_t const *q,
      udb_query_preparation_area_t *prep_area, char **column_values);
- void udb_query_finish_result (const udb_query_t const *q,
+ void udb_query_finish_result (udb_query_t const *q,
      udb_query_preparation_area_t *prep_area);
  
  udb_query_preparation_area_t *