com.codahale.metrics.Timer для выполнения метода синхронизации с CompleteableFuture - PullRequest
1 голос
/ 26 июня 2019

Мы используем com.codahale.metrics.Timer для определения времени, необходимого для завершения метода completeableFuture.

У нас есть этот код:

import com.codahale.metrics.Timer;
import com.codahale.metrics.MetricRegistry;
...

Timer timer = MetricsRegistry.timer("older-Cat-latency");
Timer.Context context = timer.time();
DeferredResult<OlderCat> deferredResult = new DeferredResult<>();

catService.getOlderCat(catName)
            .handle((result, err) -> {
                if(err != null){
                    deferredResult.setErrorResult(new OlderCat(...));
                    return null;
                }
                context.stop();  <----  // here we stop the timer
                deferredResult.setResult(result);
                return null;
            });

return deferredResult;

Теоретически этот код должен бытьХорошо, но при проверке времени в Prometheus мы видим очень низкую задержку синхронизации, которая, кажется, не соответствует фактическим результатам, которые мы получаем (например, 15 миллисекунд измеряются таймером, по сравнению с фактическими 2 секундами, которые мы измеряем«от руки»)

Таким образом, кажется, есть два варианта:

  • Код выше не синхронизируется правильно
  • Код синхронизируется правильно, нографики в Графане как-то вводят в заблуждение.

Знаете ли вы, правильный ли временной код?

...