]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/common/DecayCounter.cc
update sources to 12.2.7
[ceph.git] / ceph / src / common / DecayCounter.cc
index 67a129ccd0965e470f9096772704122869dafb30..26a552d439c8e71b4356676e591525896dfe2665 100644 (file)
@@ -62,21 +62,23 @@ void DecayCounter::generate_test_instances(list<DecayCounter*>& ls)
 
 void DecayCounter::decay(utime_t now, const DecayRate &rate)
 {
-  utime_t el = now;
-  el -= last_decay;
+  if (now >= last_decay) {
+    double el = (double)(now - last_decay);
+    if (el >= 1.0) {
+      // calculate new value
+      double newval = (val+delta) * exp(el * rate.k);
+      if (newval < .01)
+       newval = 0.0;
 
-  if (el.sec() >= 1) {
-    // calculate new value
-    double newval = (val+delta) * exp((double)el * rate.k);
-    if (newval < .01)
-      newval = 0.0;
+      // calculate velocity approx
+      vel += (newval - val) * el;
+      vel *= exp(el * rate.k);
 
-    // calculate velocity approx
-    vel += (newval - val) * (double)el;
-    vel *= exp((double)el * rate.k);
-
-    val = newval;
-    delta = 0;
-    last_decay = now;
+      val = newval;
+      delta = 0;
+      last_decay = now;
+    }
+  } else {
+      last_decay = now;
   }
 }