virt plugin: Properly reset the lists
authorFrancesco Romani <fromani@redhat.com>
Thu, 24 Nov 2016 15:09:41 +0000 (16:09 +0100)
committerFrancesco Romani <fromani@redhat.com>
Wed, 30 Nov 2016 09:27:00 +0000 (10:27 +0100)
If all the libvirt domains are shutdown between two refresh cycles,
the code failed to clean the lists.
Thus, the last detected libvirt domains are kept forever, leading
to failures in the data collection.
This leads to messages like

Nov 24 15:34:57 benji.rokugan.lan collectd[15083]: libvirt: QEMU Driver
error : Domain not found: no domain with matching uuid
'bc324fee-5707-4ac6-a650-6037562d4632' (nano_C010)

In the logs.
This bug was also present in collectd 5.6.1.

Signed-off-by: Francesco Romani <fromani@redhat.com>
src/virt.c

index 7cb90b7..6afd239 100644 (file)
@@ -836,6 +836,8 @@ static int refresh_lists(struct lv_read_instance *inst) {
     return -1;
   }
 
+  lv_clean_read_state(state);
+
   if (n > 0) {
     int *domids;
 
@@ -853,8 +855,6 @@ static int refresh_lists(struct lv_read_instance *inst) {
       return -1;
     }
 
-    lv_clean_read_state(state);
-
     /* Fetch each domain and add it to the list, unless ignore. */
     for (int i = 0; i < n; ++i) {
       virDomainPtr dom = NULL;