code: public synchronized void put(String path, long value, String taskId) {
      Point p;
      int last = windowNum - 1;
      if (value == RECOVERY_FAIL) {
        p = new Point(value, path, System.currentTimeMillis(), taskId);
        AtomicInteger counter = failedRecoveredFiles.get(path);
        if (counter == null) {
          counter = new AtomicInteger(0);
          failedRecoveredFiles.put(path, counter);
        }
        if (counter.incrementAndGet() == 1) {
          totalFailedPaths.get(last).incrementAndGet();
        }
      } else {
        value /= dividend;
        p = new Point(value, path, System.currentTimeMillis(), taskId);
        CounterArray counters = histo.get(value);
        if (counters == null) {
          counters = new CounterArray(windowNum);
          histo.put(value, counters);
        }
        counters.incrementAndGet(last);
        totalPoints.incrementAndGet(last);
      }
      points.add(p);
      InjectionHandler.processEvent(InjectionEvent.RAID_SEND_RECOVERY_TIME, this, path, 
          value, taskId);
    }
docs: /*
  If value is RECOVERY_FAIL, we consider it as recovery failure