You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by da...@apache.org on 2021/06/21 08:09:37 UTC

[skywalking] 01/01: eliminate `now` error at a fixed rate schedule executor

This is an automated email from the ASF dual-hosted git repository.

daming pushed a commit to branch dmsolr-patch-1
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 426a4a40bb7d60189a626a14529caf1c498e818d
Author: Daming <zt...@foxmail.com>
AuthorDate: Mon Jun 21 16:09:15 2021 +0800

    eliminate `now` error at a fixed rate schedule executor
---
 .../prometheus/provider/PrometheusFetcherProvider.java        | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/oap-server/server-fetcher-plugin/prometheus-fetcher-plugin/src/main/java/org/apache/skywalking/oap/server/fetcher/prometheus/provider/PrometheusFetcherProvider.java b/oap-server/server-fetcher-plugin/prometheus-fetcher-plugin/src/main/java/org/apache/skywalking/oap/server/fetcher/prometheus/provider/PrometheusFetcherProvider.java
index 2549f13..447c4c7 100644
--- a/oap-server/server-fetcher-plugin/prometheus-fetcher-plugin/src/main/java/org/apache/skywalking/oap/server/fetcher/prometheus/provider/PrometheusFetcherProvider.java
+++ b/oap-server/server-fetcher-plugin/prometheus-fetcher-plugin/src/main/java/org/apache/skywalking/oap/server/fetcher/prometheus/provider/PrometheusFetcherProvider.java
@@ -121,17 +121,22 @@ public class PrometheusFetcherProvider extends ModuleProvider {
         }
         final MeterSystem service = getManager().find(CoreModule.NAME).provider().getService(MeterSystem.class);
         rules.forEach(r -> {
+            final long period = Duration.parse(r.getFetcherInterval()).getSeconds() * 1000;
+
             ses.scheduleAtFixedRate(new Runnable() {
 
                 private final PrometheusMetricConverter converter = new PrometheusMetricConverter(r, service);
+                private long nextCycleTime = System.currentTimeMillis();
 
-                @Override public void run() {
+                @Override
+                public void run() {
+                    final long now = nextCycleTime;
+                    nextCycleTime += period;
                     try (HistogramMetrics.Timer ignored = histogram.createTimer()) {
                         if (Objects.isNull(r.getStaticConfig())) {
                             return;
                         }
                         StaticConfig sc = r.getStaticConfig();
-                        long now = System.currentTimeMillis();
                         converter.toMeter(sc.getTargets().stream()
                                 .map(CheckedFunction1.liftTry(target -> {
                                     URI url = new URI(target.getUrl());
@@ -170,7 +175,7 @@ public class PrometheusFetcherProvider extends ModuleProvider {
                         log.error(e.getMessage(), e);
                     }
                 }
-            }, 0L, Duration.parse(r.getFetcherInterval()).getSeconds(), TimeUnit.SECONDS);
+            }, 0L, period, TimeUnit.MILLISECONDS);
         });
     }