You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2019/06/03 03:19:20 UTC
[skywalking] branch config-API updated: Add database slow statement
dynamic setting.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch config-API
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/config-API by this push:
new 7992d4d Add database slow statement dynamic setting.
7992d4d is described below
commit 7992d4d9c7c705e27d6c86a20409a0357c3b6db9
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Mon Jun 3 11:19:11 2019 +0800
Add database slow statement dynamic setting.
---
.../configuration/api/ConfigChangeWatcher.java | 4 +-
.../configuration/api/ConfigWatcherRegister.java | 4 +-
.../api/ConfigWatcherRegisterTest.java | 4 +-
.../trace/provider/DBLatencyThresholds.java | 51 --------------
.../provider/DBLatencyThresholdsAndWatcher.java | 78 ++++++++++++++++++++++
.../trace/provider/TraceModuleProvider.java | 10 ++-
.../trace/provider/TraceServiceModuleConfig.java | 2 +-
.../listener/endpoint/MultiScopesSpanListener.java | 2 +-
8 files changed, 94 insertions(+), 61 deletions(-)
diff --git a/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigChangeWatcher.java b/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigChangeWatcher.java
index 7a30be2..1623332 100644
--- a/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigChangeWatcher.java
+++ b/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigChangeWatcher.java
@@ -28,11 +28,11 @@ import org.apache.skywalking.oap.server.library.module.*;
*/
@Getter
public abstract class ConfigChangeWatcher {
- private final ModuleDefine module;
+ private final String module;
private final ModuleProvider provider;
private final String itemName;
- public ConfigChangeWatcher(ModuleDefine module, ModuleProvider provider, String itemName) {
+ public ConfigChangeWatcher(String module, ModuleProvider provider, String itemName) {
this.module = module;
this.provider = provider;
this.itemName = itemName;
diff --git a/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java b/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java
index 3e3428c..7bc1e09 100644
--- a/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java
+++ b/oap-server/server-configuration/configuration-api/src/main/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegister.java
@@ -123,7 +123,7 @@ public abstract class ConfigWatcherRegister implements DynamicConfigurationServi
register.forEach((key, holder) -> {
ConfigChangeWatcher watcher = holder.getWatcher();
registerTableDescription.append("key:").append(key)
- .append(" module:").append(watcher.getModule().name())
+ .append(" module:").append(watcher.getModule())
.append(" provider:").append(watcher.getProvider().name())
.append(" value(current):").append(watcher.value())
.append(LINE_SEPARATOR);
@@ -139,7 +139,7 @@ public abstract class ConfigWatcherRegister implements DynamicConfigurationServi
public WatcherHolder(ConfigChangeWatcher watcher) {
this.watcher = watcher;
- this.key = String.join(".", watcher.getModule().name(), watcher.getProvider().name(), watcher.getItemName());
+ this.key = String.join(".", watcher.getModule(), watcher.getProvider().name(), watcher.getItemName());
}
}
}
diff --git a/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java b/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java
index 2cb9a8d..159837e 100644
--- a/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java
+++ b/oap-server/server-configuration/configuration-api/src/test/java/org/apache/skywalking/oap/server/configuration/api/ConfigWatcherRegisterTest.java
@@ -42,7 +42,7 @@ public class ConfigWatcherRegisterTest {
public void testInit() {
final String[] newValue = new String[1];
- register.registerConfigChangeWatcher(new ConfigChangeWatcher(new MockModule(), new MockProvider(), "prop2") {
+ register.registerConfigChangeWatcher(new ConfigChangeWatcher("MockModule", new MockProvider(), "prop2") {
@Override public void notify(ConfigChangeEvent value) {
newValue[0] = value.getNewValue();
}
@@ -59,7 +59,7 @@ public class ConfigWatcherRegisterTest {
@Test
public void testRegisterTableLog() {
- register.registerConfigChangeWatcher(new ConfigChangeWatcher(new MockModule(), new MockProvider(), "prop2") {
+ register.registerConfigChangeWatcher(new ConfigChangeWatcher("MockModule", new MockProvider(), "prop2") {
@Override public void notify(ConfigChangeEvent value) {
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/DBLatencyThresholds.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/DBLatencyThresholds.java
deleted file mode 100644
index a0fbbec..0000000
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/DBLatencyThresholds.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.oap.server.receiver.trace.provider;
-
-import java.util.*;
-
-/**
- * @author wusheng
- */
-public class DBLatencyThresholds {
- private Map<String, Integer> thresholds;
-
- DBLatencyThresholds(String config) {
- thresholds = new HashMap<>();
- String[] settings = config.split(",");
- for (String setting : settings) {
- String[] typeValue = setting.split(":");
- if (typeValue.length == 2) {
- thresholds.put(typeValue[0].trim().toLowerCase(), Integer.parseInt(typeValue[1].trim()));
- }
- }
- if (!thresholds.containsKey("default")) {
- thresholds.put("default", 10000);
- }
- }
-
- public int getThreshold(String type) {
- type = type.toLowerCase();
- if (thresholds.containsKey(type)) {
- return thresholds.get(type);
- } else {
- return thresholds.get("default");
- }
- }
-}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/DBLatencyThresholdsAndWatcher.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/DBLatencyThresholdsAndWatcher.java
new file mode 100644
index 0000000..a2b2dc3
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/DBLatencyThresholdsAndWatcher.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.receiver.trace.provider;
+
+import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
+import org.apache.skywalking.oap.server.configuration.api.ConfigChangeWatcher;
+import org.apache.skywalking.oap.server.receiver.trace.module.TraceModule;
+
+/**
+ * @author wusheng
+ */
+public class DBLatencyThresholdsAndWatcher extends ConfigChangeWatcher {
+ private AtomicReference<Map<String, Integer>> thresholds;
+ private AtomicReference<String> settingsString;
+
+ DBLatencyThresholdsAndWatcher(String config, TraceModuleProvider provider) {
+ super(TraceModule.NAME, provider, "slowDBAccessThreshold");
+ thresholds = new AtomicReference(new HashMap<>());
+ settingsString = new AtomicReference<>("");
+
+ activeSetting(config);
+ }
+
+ private void activeSetting(String config) {
+ Map<String, Integer> newThresholds = new HashMap<>();
+ String[] settings = config.split(",");
+ for (String setting : settings) {
+ String[] typeValue = setting.split(":");
+ if (typeValue.length == 2) {
+ newThresholds.put(typeValue[0].trim().toLowerCase(), Integer.parseInt(typeValue[1].trim()));
+ }
+ }
+ if (!newThresholds.containsKey("default")) {
+ newThresholds.put("default", 10000);
+ }
+
+ thresholds.set(newThresholds);
+ settingsString.set(config);
+ }
+
+ public int getThreshold(String type) {
+ type = type.toLowerCase();
+ if (thresholds.get().containsKey(type)) {
+ return thresholds.get().get(type);
+ } else {
+ return thresholds.get().get("default");
+ }
+ }
+
+ @Override public void notify(ConfigChangeEvent value) {
+ if (EventType.DELETE.equals(value.getEventType())) {
+ activeSetting("");
+ } else {
+ activeSetting(value.getNewValue());
+ }
+ }
+
+ @Override public String value() {
+ return settingsString.get();
+ }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
index a47ec32..c548408 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceModuleProvider.java
@@ -19,6 +19,7 @@
package org.apache.skywalking.oap.server.receiver.trace.provider;
import java.io.IOException;
+import org.apache.skywalking.oap.server.configuration.api.*;
import org.apache.skywalking.oap.server.core.CoreModule;
import org.apache.skywalking.oap.server.core.server.*;
import org.apache.skywalking.oap.server.library.module.*;
@@ -42,6 +43,7 @@ public class TraceModuleProvider extends ModuleProvider {
private final TraceServiceModuleConfig moduleConfig;
private SegmentParse.Producer segmentProducer;
private SegmentParseV2.Producer segmentProducerV2;
+ private DBLatencyThresholdsAndWatcher thresholds;
public TraceModuleProvider() {
this.moduleConfig = new TraceServiceModuleConfig();
@@ -60,7 +62,9 @@ public class TraceModuleProvider extends ModuleProvider {
}
@Override public void prepare() throws ServiceNotProvidedException {
- moduleConfig.setDbLatencyThresholds(new DBLatencyThresholds(moduleConfig.getSlowDBAccessThreshold()));
+ thresholds = new DBLatencyThresholdsAndWatcher(moduleConfig.getSlowDBAccessThreshold(), this);
+
+ moduleConfig.setDbLatencyThresholdsAndWatcher(thresholds);
SegmentParserListenerManager listenerManager = new SegmentParserListenerManager();
if (moduleConfig.isTraceAnalysis()) {
@@ -84,9 +88,11 @@ public class TraceModuleProvider extends ModuleProvider {
}
@Override public void start() throws ModuleStartException {
+ DynamicConfigurationService dynamicConfigurationService = getManager().find(ConfigurationModule.NAME).provider().getService(DynamicConfigurationService.class);
GRPCHandlerRegister grpcHandlerRegister = getManager().find(SharingServerModule.NAME).provider().getService(GRPCHandlerRegister.class);
JettyHandlerRegister jettyHandlerRegister = getManager().find(SharingServerModule.NAME).provider().getService(JettyHandlerRegister.class);
try {
+ dynamicConfigurationService.registerConfigChangeWatcher(thresholds);
grpcHandlerRegister.addHandler(new TraceSegmentServiceHandler(segmentProducer));
grpcHandlerRegister.addHandler(new TraceSegmentReportServiceHandler(segmentProducerV2, getManager()));
@@ -111,6 +117,6 @@ public class TraceModuleProvider extends ModuleProvider {
}
@Override public String[] requiredModules() {
- return new String[] {TelemetryModule.NAME, CoreModule.NAME, SharingServerModule.NAME};
+ return new String[] {TelemetryModule.NAME, CoreModule.NAME, SharingServerModule.NAME, ConfigurationModule.NAME};
}
}
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java
index 13ceabe..0c322b2 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/TraceServiceModuleConfig.java
@@ -38,7 +38,7 @@ public class TraceServiceModuleConfig extends ModuleConfig {
* The threshold used to check the slow database access. Unit, millisecond.
*/
@Setter @Getter private String slowDBAccessThreshold = "default:200";
- @Setter @Getter private DBLatencyThresholds dbLatencyThresholds;
+ @Setter @Getter private DBLatencyThresholdsAndWatcher dbLatencyThresholdsAndWatcher;
/**
* Analysis trace status.
*
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
index 55f0959..48a0c56 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
@@ -165,7 +165,7 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
} else if (SpanTags.DB_TYPE.equals(tag.getKey())) {
String dbType = tag.getValue();
- DBLatencyThresholds thresholds = config.getDbLatencyThresholds();
+ DBLatencyThresholdsAndWatcher thresholds = config.getDbLatencyThresholdsAndWatcher();
int threshold = thresholds.getThreshold(dbType);
if (sourceBuilder.getLatency() > threshold) {
isSlowDBAccess = true;