Correctly track last num vcpus in xenstat_plugin (#8720)
Rushikesh Jadhav committed
May 26, 2020 at 01:33 UTC
c77539436203fd2646a9ac4de7f51d58a9cd4ea1
1 file changed
+8
-6
collectors/xenstat.plugin/xenstat_plugin.c
+8
-6
@@ -137,6 +137,7 @@ struct domain_metrics {
137
unsigned int shutdown;
138
unsigned int crashed;
139
unsigned int dying;
140
+ unsigned int cur_vcpus;
141
142
unsigned long long cpu_ns;
143
unsigned long long cur_mem;
@@ -247,23 +248,18 @@ static struct domain_metrics *domain_metrics_free(struct domain_metrics *d) {
248
}
249
250
static int vcpu_metrics_collect(struct domain_metrics *d, xenstat_domain *domain) {
250
- static unsigned int last_num_vcpus = 0;
251
unsigned int num_vcpus = 0;
252
xenstat_vcpu *vcpu = NULL;
253
struct vcpu_metrics *vcpu_m = NULL, *last_vcpu_m = NULL;
254
255
num_vcpus = xenstat_domain_num_vcpus(domain);
256
- if(unlikely(num_vcpus != last_num_vcpus)) {
257
- d->num_vcpus_changed = 1;
258
- last_num_vcpus = num_vcpus;
259
- }
256
257
for(vcpu_m = d->vcpu_root; vcpu_m ; vcpu_m = vcpu_m->next)
258
vcpu_m->updated = 0;
259
260
vcpu_m = d->vcpu_root;
261
266
- unsigned int i;
262
+ unsigned int i, num_online_vcpus=0;
263
for(i = 0; i < num_vcpus; i++) {
264
if(unlikely(!vcpu_m)) {
265
vcpu_m = callocz(1, sizeof(struct vcpu_metrics));
@@ -282,6 +278,7 @@ static int vcpu_metrics_collect(struct domain_metrics *d, xenstat_domain *domain
278
}
279
280
vcpu_m->online = xenstat_vcpu_online(vcpu);
281
+ if(likely(vcpu_m->online)) { num_online_vcpus++; }
282
vcpu_m->ns = xenstat_vcpu_ns(vcpu);
283
284
vcpu_m->updated = 1;
@@ -290,6 +287,11 @@ static int vcpu_metrics_collect(struct domain_metrics *d, xenstat_domain *domain
287
vcpu_m = vcpu_m->next;
288
}
289
290
+ if(unlikely(num_online_vcpus != d->cur_vcpus)) {
291
+ d->num_vcpus_changed = 1;
292
+ d->cur_vcpus = num_online_vcpus;
293
+ }
294
+
295
return 0;
296
}
297