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 2018/10/30 14:42:41 UTC

[incubator-skywalking] branch fix-concurrency updated: Fix concurrency for minute persistence and others

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

wusheng pushed a commit to branch fix-concurrency
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git


The following commit(s) were added to refs/heads/fix-concurrency by this push:
     new 22a82f5  Fix concurrency for minute persistence and others
22a82f5 is described below

commit 22a82f548ed84e6e5c816b3c6b52ce3aab199f68
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Tue Oct 30 22:42:31 2018 +0800

    Fix concurrency for minute persistence and others
---
 .../oap/server/core/analysis/worker/IndicatorTransWorker.java  | 10 +++++++---
 .../skywalking/oap/server/core/register/ServiceInventory.java  |  3 +--
 .../server/core/register/service/ServiceInventoryRegister.java |  2 +-
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/IndicatorTransWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/IndicatorTransWorker.java
index b49814c..537d6a4 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/IndicatorTransWorker.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/IndicatorTransWorker.java
@@ -48,9 +48,6 @@ public class IndicatorTransWorker extends AbstractWorker<Indicator> {
     }
 
     @Override public void in(Indicator indicator) {
-        if (Objects.nonNull(minutePersistenceWorker)) {
-            minutePersistenceWorker.in(indicator);
-        }
         if (Objects.nonNull(hourPersistenceWorker)) {
             hourPersistenceWorker.in(indicator.toHour());
         }
@@ -60,5 +57,12 @@ public class IndicatorTransWorker extends AbstractWorker<Indicator> {
         if (Objects.nonNull(monthPersistenceWorker)) {
             monthPersistenceWorker.in(indicator.toMonth());
         }
+        /**
+         * Minute persistent must be at the end of all time dimensionalities
+         * Because #toHour, #toDay, #toMonth include clone inside, which could avoid concurrency situation.
+         */
+        if (Objects.nonNull(minutePersistenceWorker)) {
+            minutePersistenceWorker.in(indicator);
+        }
     }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java
index 7699918..8e75fbd 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/ServiceInventory.java
@@ -76,8 +76,7 @@ public class ServiceInventory extends RegisterSource {
         return result;
     }
 
-    @Override
-    public ServiceInventory clone() {
+    public ServiceInventory getClone() {
         ServiceInventory inventory = new ServiceInventory();
         inventory.setSequence(getSequence());
         inventory.setRegisterTime(getRegisterTime());
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java
index 8bc2ac3..24d0c92 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/ServiceInventoryRegister.java
@@ -103,7 +103,7 @@ public class ServiceInventoryRegister implements IServiceInventoryRegister {
     @Override public void updateMapping(int serviceId, int mappingServiceId) {
         ServiceInventory serviceInventory = getServiceInventoryCache().get(serviceId);
         if (Objects.nonNull(serviceInventory)) {
-            serviceInventory = serviceInventory.clone();
+            serviceInventory = serviceInventory.getClone();
             serviceInventory.setMappingServiceId(mappingServiceId);
             serviceInventory.setMappingLastUpdateTime(System.currentTimeMillis());