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 <[email protected]>
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());