From 5d064ced5f820a51dcc000341858ebe3b4416da5 Mon Sep 17 00:00:00 2001 From: Jared Tan Date: Tue, 19 Nov 2019 17:26:30 +0800 Subject: [PATCH] make topN worker report period configurable. (#3892) --- .../apache/skywalking/oap/server/core/CoreModuleConfig.java | 1 + .../skywalking/oap/server/core/CoreModuleProvider.java | 2 ++ .../server/core/analysis/worker/TopNStreamProcessor.java | 5 ++++- .../oap/server/core/analysis/worker/TopNWorker.java | 6 +++--- oap-server/server-starter/src/main/assembly/application.yml | 1 + .../server-starter/src/main/resources/application.yml | 1 + 6 files changed, 12 insertions(+), 4 deletions(-) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java index e77d59c4a9..df6db62ac4 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleConfig.java @@ -38,6 +38,7 @@ public class CoreModuleConfig extends ModuleConfig { @Setter private int maxConcurrentCallsPerConnection; @Setter private int maxMessageSize; @Setter private boolean enableDatabaseSession; + @Setter private int topNReportPeriod; private final List downsampling; /** * The period of doing data persistence. diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java index 9f58df6dc2..b2ae971827 100755 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/CoreModuleProvider.java @@ -22,6 +22,7 @@ import java.io.IOException; import org.apache.skywalking.oap.server.configuration.api.ConfigurationModule; import org.apache.skywalking.oap.server.core.analysis.*; import org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor; +import org.apache.skywalking.oap.server.core.analysis.worker.TopNStreamProcessor; import org.apache.skywalking.oap.server.core.annotation.AnnotationScan; import org.apache.skywalking.oap.server.core.cache.*; import org.apache.skywalking.oap.server.core.cluster.*; @@ -170,6 +171,7 @@ public class CoreModuleProvider extends ModuleProvider { this.registerServiceImplementation(RemoteClientManager.class, remoteClientManager); MetricsStreamProcessor.getInstance().setEnableDatabaseSession(moduleConfig.isEnableDatabaseSession()); + TopNStreamProcessor.getInstance().setTopNWorkerReportCycle(moduleConfig.getTopNReportPeriod()); } @Override public void start() throws ModuleStartException { diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/TopNStreamProcessor.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/TopNStreamProcessor.java index fcb3a68808..7265d73a31 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/TopNStreamProcessor.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/TopNStreamProcessor.java @@ -20,6 +20,7 @@ package org.apache.skywalking.oap.server.core.analysis.worker; import java.util.*; import lombok.Getter; +import lombok.Setter; import org.apache.skywalking.oap.server.core.*; import org.apache.skywalking.oap.server.core.analysis.*; import org.apache.skywalking.oap.server.core.analysis.record.Record; @@ -41,6 +42,8 @@ public class TopNStreamProcessor implements StreamProcessor { @Getter private List persistentWorkers = new ArrayList<>(); private Map, TopNWorker> workers = new HashMap<>(); + @Setter @Getter private int topNWorkerReportCycle = 10; + @Setter @Getter private int topSize = 50; public static TopNStreamProcessor getInstance() { return PROCESSOR; @@ -63,7 +66,7 @@ public class TopNStreamProcessor implements StreamProcessor { IModelSetter modelSetter = moduleDefineHolder.find(CoreModule.NAME).provider().getService(IModelSetter.class); Model model = modelSetter.putIfAbsent(topNClass, stream.scopeId(), new Storage(stream.name(), true, true, Downsampling.Second), true); - TopNWorker persistentWorker = new TopNWorker(moduleDefineHolder, model, 50, recordDAO); + TopNWorker persistentWorker = new TopNWorker(moduleDefineHolder, model, topSize, topNWorkerReportCycle * 60 * 1000L, recordDAO); persistentWorkers.add(persistentWorker); workers.put(topNClass, persistentWorker); } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/TopNWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/TopNWorker.java index 8ccde84261..b5afabfc5e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/TopNWorker.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/TopNWorker.java @@ -46,7 +46,7 @@ public class TopNWorker extends PersistenceWorker(topNSize); this.recordDAO = recordDAO; @@ -54,8 +54,8 @@ public class TopNWorker extends PersistenceWorker("TopNWorker", 1, 1000); this.dataCarrier.consume(new TopNWorker.TopNConsumer(), 1); this.lastReportTimestamp = System.currentTimeMillis(); - // Top N persistent only works per 10 minutes. - this.reportCycle = 10 * 60 * 1000L; + // Top N persistent works per 10 minutes default. + this.reportCycle = reportCycle; } @Override public void cacheData(TopN data) { diff --git a/oap-server/server-starter/src/main/assembly/application.yml b/oap-server/server-starter/src/main/assembly/application.yml index 83a9926b5b..3bc8ace92f 100644 --- a/oap-server/server-starter/src/main/assembly/application.yml +++ b/oap-server/server-starter/src/main/assembly/application.yml @@ -72,6 +72,7 @@ core: # Cache metric data for 1 minute to reduce database queries, and if the OAP cluster changes within that minute, # the metrics may not be accurate within that minute. enableDatabaseSession: ${SW_CORE_ENABLE_DATABASE_SESSION:true} + topNReportPeriod: ${SW_CORE_TOPN_REPORT_PERIOD:10} # top_n record worker report cycle, unit is minute storage: # elasticsearch: # nameSpace: ${SW_NAMESPACE:""} diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml index e23b68666a..2e7c46e0e2 100755 --- a/oap-server/server-starter/src/main/resources/application.yml +++ b/oap-server/server-starter/src/main/resources/application.yml @@ -71,6 +71,7 @@ core: # Cache metric data for 1 minute to reduce database queries, and if the OAP cluster changes within that minute, # the metrics may not be accurate within that minute. enableDatabaseSession: ${SW_CORE_ENABLE_DATABASE_SESSION:true} + topNReportPeriod: ${SW_CORE_TOPN_REPORT_PERIOD:10} # top_n record worker report cycle, unit is minute storage: elasticsearch: nameSpace: ${SW_NAMESPACE:""} -- GitLab