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

wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git


The following commit(s) were added to refs/heads/master by this push:
     new d6fa688ff8 Remove timeout offset and correct `MetricsExtension` 
declarations (#10098)
d6fa688ff8 is described below

commit d6fa688ff8022c766cfaf3681c3b5f9113fc877f
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Tue Dec 6 11:12:42 2022 +0800

    Remove timeout offset and correct `MetricsExtension` declarations (#10098)
    
    * Remove timeout offset and correct `MetricsExtension` declarations
    
    * Fix ProcessRelation topology overlap for nodes communication with 
multiple component IDs.(HTTP and TCP)
    
    * Support component IDs' priority in process relationship metrics.
    
    * Remove abandon logic in MergableBufferedData, which caused unexpected 
no-update.
---
 docs/en/changes/changes.md                         |  4 ++
 .../core/analysis/data/MergableBufferedData.java   |  5 +-
 .../EndpointRelationServerSideMetrics.java         |  2 +
 .../process/ProcessNetworkRelationIDs.java         | 69 ++++++++++++++++++++++
 .../process/ProcessRelationClientSideMetrics.java  | 13 ++--
 .../process/ProcessRelationServerSideMetrics.java  | 12 ++--
 .../service/ServiceRelationClientSideMetrics.java  |  6 +-
 .../service/ServiceRelationServerSideMetrics.java  | 12 +++-
 .../analysis/worker/MetricsPersistentWorker.java   | 10 +---
 9 files changed, 104 insertions(+), 29 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index bf96fcabe7..3e4c16ad61 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -21,6 +21,10 @@
     // for the specific minute of booted successfully, the metrics are 
expected to load from database when
     // it doesn't exist in the cache.
 ```
+* Remove the offset of metric session timeout according to worker creation 
sequence.
+* Correct `MetricsExtension` annotations declarations in manual entities.
+* Support component IDs' priority in process relation metrics.
+* Remove abandon logic in MergableBufferedData, which caused unexpected 
no-update.
 
 #### UI
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/data/MergableBufferedData.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/data/MergableBufferedData.java
index 501135d197..9413137a54 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/data/MergableBufferedData.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/data/MergableBufferedData.java
@@ -51,10 +51,7 @@ public class MergableBufferedData<METRICS extends Metrics> 
implements BufferedDa
         if (existed == null) {
             buffer.put(id, data);
         } else {
-            final boolean isAbandoned = !existed.combine(data);
-            if (isAbandoned) {
-                buffer.remove(id);
-            }
+            existed.combine(data);
         }
     }
 
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointRelationServerSideMetrics.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointRelationServerSideMetrics.java
index 32dba2fb16..6437a71d97 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointRelationServerSideMetrics.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/endpoint/EndpointRelationServerSideMetrics.java
@@ -22,6 +22,7 @@ import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.MetricsExtension;
 import org.apache.skywalking.oap.server.core.analysis.Stream;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import 
org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
@@ -40,6 +41,7 @@ import static 
org.apache.skywalking.oap.server.core.analysis.metrics.Metrics.TIM
 
 @Stream(name = EndpointRelationServerSideMetrics.INDEX_NAME, scopeId = 
DefaultScopeDefine.ENDPOINT_RELATION,
     builder = EndpointRelationServerSideMetrics.Builder.class, processor = 
MetricsStreamProcessor.class)
+@MetricsExtension(supportDownSampling = true, supportUpdate = false, 
timeRelativeID = true)
 @EqualsAndHashCode(of = {
     "entityId"
 }, callSuper = true)
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessNetworkRelationIDs.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessNetworkRelationIDs.java
new file mode 100644
index 0000000000..bb3449f2f4
--- /dev/null
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessNetworkRelationIDs.java
@@ -0,0 +1,69 @@
+/*
+ * 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.core.analysis.manual.relation.process;
+
+import java.util.HashMap;
+
+/**
+ * ProcessNetworkRelationIDs indicates the IDs with the priority for process 
network relation.
+ *
+ * @since 9.4.0
+ */
+public enum ProcessNetworkRelationIDs {
+    HTTPS(129, 4),
+    HTTP(49, 3),
+    TCP_TLS(130, 2),
+    TCP(110, 1);
+
+    /**
+     * ID from component-libraries.yml definition.
+     */
+    private Integer id;
+    /**
+     * The higher the atomic number, the higher the priority
+     */
+    private Integer priority;
+
+    ProcessNetworkRelationIDs(final int id, final int priority) {
+        this.id = id;
+        this.priority = priority;
+    }
+
+    /**
+     * @return true if componentA has higher priority
+     */
+    public static boolean compare(int componentA, int componentB) {
+        final Integer priorityA = (Integer) 
ID_2_PRIORITY.getOrDefault(componentA, 0);
+        final Integer priorityB = (Integer) 
ID_2_PRIORITY.getOrDefault(componentB, 0);
+        return priorityA.compareTo(priorityB) > 0;
+    }
+
+    private static HashMap ID_2_PRIORITY = new HashMap<Integer, Integer>(4);
+
+    static {
+        initMapping(TCP);
+        initMapping(TCP_TLS);
+        initMapping(HTTP);
+        initMapping(HTTPS);
+    }
+
+    private static void initMapping(ProcessNetworkRelationIDs componentId) {
+        ID_2_PRIORITY.put(componentId.id, componentId.priority);
+    }
+}
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationClientSideMetrics.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationClientSideMetrics.java
index bb167c41bb..683c8fff8f 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationClientSideMetrics.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationClientSideMetrics.java
@@ -36,10 +36,11 @@ import 
org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
 
 @Stream(name = ProcessRelationClientSideMetrics.INDEX_NAME, scopeId = 
DefaultScopeDefine.PROCESS_RELATION,
-        builder = ProcessRelationClientSideMetrics.Builder.class, processor = 
MetricsStreamProcessor.class)
+    builder = ProcessRelationClientSideMetrics.Builder.class, processor = 
MetricsStreamProcessor.class)
 @MetricsExtension(supportDownSampling = false, supportUpdate = true, 
timeRelativeID = true)
 @EqualsAndHashCode(of = {
-        "entityId"
+    "entityId",
+    "component_id"
 }, callSuper = true)
 @SQLDatabase.Sharding(shardingAlgorithm = ShardingAlgorithm.NO_SHARDING)
 public class ProcessRelationClientSideMetrics extends Metrics {
@@ -78,10 +79,12 @@ public class ProcessRelationClientSideMetrics extends 
Metrics {
 
     @Override
     public boolean combine(Metrics metrics) {
-        if (this.getTimeBucket() > metrics.getTimeBucket()) {
-            this.setTimeBucket(metrics.getTimeBucket());
+        final ProcessRelationClientSideMetrics 
processRelationClientSideMetrics = (ProcessRelationClientSideMetrics) metrics;
+        if (ProcessNetworkRelationIDs.compare(this.componentId, 
processRelationClientSideMetrics.getComponentId())) {
+            
this.setComponentId(processRelationClientSideMetrics.getComponentId());
+            return true;
         }
-        return true;
+        return false;
     }
 
     @Override
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationServerSideMetrics.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationServerSideMetrics.java
index 5f7225ff73..f3ae9fe867 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationServerSideMetrics.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/process/ProcessRelationServerSideMetrics.java
@@ -36,10 +36,10 @@ import 
org.apache.skywalking.oap.server.core.storage.type.Convert2Storage;
 import org.apache.skywalking.oap.server.core.storage.type.StorageBuilder;
 
 @Stream(name = ProcessRelationServerSideMetrics.INDEX_NAME, scopeId = 
DefaultScopeDefine.PROCESS_RELATION,
-        builder = ProcessRelationServerSideMetrics.Builder.class, processor = 
MetricsStreamProcessor.class)
+    builder = ProcessRelationServerSideMetrics.Builder.class, processor = 
MetricsStreamProcessor.class)
 @MetricsExtension(supportDownSampling = false, supportUpdate = true, 
timeRelativeID = true)
 @EqualsAndHashCode(of = {
-        "entityId"
+    "entityId"
 }, callSuper = true)
 @SQLDatabase.Sharding(shardingAlgorithm = ShardingAlgorithm.NO_SHARDING)
 public class ProcessRelationServerSideMetrics extends Metrics {
@@ -78,10 +78,12 @@ public class ProcessRelationServerSideMetrics extends 
Metrics {
 
     @Override
     public boolean combine(Metrics metrics) {
-        if (this.getTimeBucket() > metrics.getTimeBucket()) {
-            this.setTimeBucket(metrics.getTimeBucket());
+        final ProcessRelationServerSideMetrics 
processRelationServerSideMetrics = (ProcessRelationServerSideMetrics) metrics;
+        if (ProcessNetworkRelationIDs.compare(this.componentId, 
processRelationServerSideMetrics.getComponentId())) {
+            
this.setComponentId(processRelationServerSideMetrics.getComponentId());
+            return true;
         }
-        return true;
+        return false;
     }
 
     @Override
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java
index 95c75ce53d..d559aece29 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationClientSideMetrics.java
@@ -77,11 +77,9 @@ public class ServiceRelationClientSideMetrics extends 
Metrics {
         ServiceRelationClientSideMetrics serviceRelationClientSideMetrics = 
(ServiceRelationClientSideMetrics) metrics;
         if (this.getComponentId() == 0 && 
serviceRelationClientSideMetrics.getComponentId() != 0) {
             this.componentId = 
serviceRelationClientSideMetrics.getComponentId();
+            return true;
         }
-        if (this.getTimeBucket() > metrics.getTimeBucket()) {
-            this.setTimeBucket(metrics.getTimeBucket());
-        }
-        return true;
+        return false;
     }
 
     @Override
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java
index 77b7032690..f767d331f2 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/manual/relation/service/ServiceRelationServerSideMetrics.java
@@ -22,6 +22,7 @@ import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.MetricsExtension;
 import org.apache.skywalking.oap.server.core.analysis.Stream;
 import org.apache.skywalking.oap.server.core.analysis.metrics.Metrics;
 import 
org.apache.skywalking.oap.server.core.analysis.worker.MetricsStreamProcessor;
@@ -40,6 +41,7 @@ import static 
org.apache.skywalking.oap.server.core.analysis.metrics.Metrics.TIM
 
 @Stream(name = ServiceRelationServerSideMetrics.INDEX_NAME, scopeId = 
DefaultScopeDefine.SERVICE_RELATION,
     builder = ServiceRelationServerSideMetrics.Builder.class, processor = 
MetricsStreamProcessor.class)
+@MetricsExtension(supportDownSampling = true, supportUpdate = true, 
timeRelativeID = true)
 @EqualsAndHashCode(of = {
     "entityId"
 }, callSuper = true)
@@ -76,7 +78,12 @@ public class ServiceRelationServerSideMetrics extends 
Metrics {
 
     @Override
     public boolean combine(Metrics metrics) {
-        return true;
+        ServiceRelationServerSideMetrics serviceRelationServerSideMetrics = 
(ServiceRelationServerSideMetrics) metrics;
+        if (this.getComponentId() == 0 && 
serviceRelationServerSideMetrics.getComponentId() != 0) {
+            this.componentId = 
serviceRelationServerSideMetrics.getComponentId();
+            return true;
+        }
+        return false;
     }
 
     @Override
@@ -150,7 +157,8 @@ public class ServiceRelationServerSideMetrics extends 
Metrics {
         }
 
         @Override
-        public void entity2Storage(final ServiceRelationServerSideMetrics 
storageData, final Convert2Storage converter) {
+        public void entity2Storage(final ServiceRelationServerSideMetrics 
storageData,
+                                   final Convert2Storage converter) {
             converter.accept(ENTITY_ID, storageData.getEntityId());
             converter.accept(SOURCE_SERVICE_ID, 
storageData.getSourceServiceId());
             converter.accept(DEST_SERVICE_ID, storageData.getDestServiceId());
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
index 403e2b8c67..dee1994040 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/MetricsPersistentWorker.java
@@ -53,11 +53,6 @@ import 
org.apache.skywalking.oap.server.telemetry.api.MetricsTag;
  */
 @Slf4j
 public class MetricsPersistentWorker extends PersistenceWorker<Metrics> {
-    /**
-     * The counter of MetricsPersistentWorker instance, to calculate session 
timeout offset.
-     */
-    private static long SESSION_TIMEOUT_OFFSITE_COUNTER = 0;
-
     private final Model model;
     private final MetricsSessionCache sessionCache;
     private final IMetricsDAO metricsDAO;
@@ -157,7 +152,6 @@ public class MetricsPersistentWorker extends 
PersistenceWorker<Metrics> {
             "metrics_persistent_cache", "The counter of metrics status, new or 
cached.",
             new MetricsTag.Keys("status"), new MetricsTag.Values("cached")
         );
-        SESSION_TIMEOUT_OFFSITE_COUNTER++;
         serverStatusService = 
moduleDefineHolder.find(CoreModule.NAME).provider().getService(ServerStatusService.class);
     }
 
@@ -176,9 +170,7 @@ public class MetricsPersistentWorker extends 
PersistenceWorker<Metrics> {
              supportUpdate, storageSessionTimeout, metricsDataTTL, kind
         );
         // For a down-sampling metrics, we prolong the session timeout for 4 
times, nearly 5 minutes.
-        // And add offset according to worker creation sequence, to avoid 
context clear overlap,
-        // eventually optimize load of IDs reading.
-        sessionCache.setTimeoutThreshold(storageSessionTimeout * 4 + 
SESSION_TIMEOUT_OFFSITE_COUNTER * 200);
+        sessionCache.setTimeoutThreshold(storageSessionTimeout * 4);
         // The down sampling level worker executes every 4 periods.
         this.persistentMod = 4;
     }

Reply via email to