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());