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;