prevent invalid compression ratio values
Costa Tsaousis (ktsaou) committed
Jun 1, 2016 at 10:23 UTC
6f126a88387c8614bd891479271c6e0c46cdfa2f
1 file changed
+7
-5
src/plugin_proc.c
+7
-5
@@ -351,17 +351,19 @@ void *proc_main(void *ptr)
351
}
352
else rrdset_next(stcompression);
353
354
- unsigned long long gcontent_size = global_statistics.content_size;
354
+ // since we don't lock here to read the global statistics
355
+ // read the smaller value first
356
unsigned long long gcompressed_content_size = global_statistics.compressed_content_size;
357
+ unsigned long long gcontent_size = global_statistics.content_size;
358
357
- unsigned long long content_size = gcontent_size - old_content_size;
359
unsigned long long compressed_content_size = gcompressed_content_size - old_compressed_content_size;
360
+ unsigned long long content_size = gcontent_size - old_content_size;
361
360
- old_content_size = gcontent_size;
362
old_compressed_content_size = gcompressed_content_size;
363
+ old_content_size = gcontent_size;
364
363
- if(content_size)
364
- compression_ratio = (content_size - compressed_content_size) * 100 * 1000 / content_size;
365
+ if(content_size && content_size >= compressed_content_size)
366
+ compression_ratio = ((content_size - compressed_content_size) * 100 * 1000) / content_size;
367
368
if(compression_ratio != -1)
369
rrddim_set(stcompression, "savings", compression_ratio);