From 07e799e422c2d4705b5b0a1182896287a1e2487e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=99=9F=20Wu=20Sheng?= Date: Wed, 31 Oct 2018 23:11:52 +0800 Subject: [PATCH] Fix bugs (#1854) * Avoid service inventory object concurrency situation. * Fix concurrency for minute persistence and others * Fix document todo. * Update license. Fix package with dirty agent plugin jar files. * Fixed not combine error in persistence register worker. --- apm-dist/release-docs/LICENSE | 8 ++++---- apm-sniffer/apm-agent/pom.xml | 1 + docs/en/setup/backend/backend-cluster.md | 4 ---- .../core/analysis/worker/IndicatorTransWorker.java | 10 +++++++--- .../oap/server/core/register/ServiceInventory.java | 14 ++++++++++++++ .../register/service/ServiceInventoryRegister.java | 1 + .../register/worker/RegisterPersistentWorker.java | 4 +++- 7 files changed, 30 insertions(+), 12 deletions(-) diff --git a/apm-dist/release-docs/LICENSE b/apm-dist/release-docs/LICENSE index c7c4cf568b..9dc3f5344a 100644 --- a/apm-dist/release-docs/LICENSE +++ b/apm-dist/release-docs/LICENSE @@ -225,15 +225,15 @@ Apache 2.0 licenses The following components are provided under the Apache License. See project link for details. The text of each license is the standard Apache 2.0 license. - raphw (byte-buddy) 1.7.9: http://bytebuddy.net/ , Apache 2.0 - Google: grpc 1.8.0: https://grpc.io/ , Apache 2.0 - Google: gprc-java 1.8.0: https://github.com/grpc/grpc-java, Apache 2.0 + raphw (byte-buddy) 1.9.2: http://bytebuddy.net/ , Apache 2.0 + Google: grpc 1.10.0: https://grpc.io/ , Apache 2.0 + Google: gprc-java 1.10.0: https://github.com/grpc/grpc-java, Apache 2.0 Google: guava 19.0: https://github.com/google/guava , Apache 2.0 Google: gson 2.8.1: https://github.com/google/gson , Apache 2.0 Google: opencensus-java 0.8.0: https://github.com/census-instrumentation/opencensus-java , Apache 2.0 Google: proto-google-common-protos 0.1.9: https://github.com/googleapis/googleapis , Apache 2.0 Google: jsr305 3.0.0: http://central.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.0/jsr305-3.0.0.pom , Apache 2.0 - Elasticsearch BV (Elasticsearch) 5.5.0: https://www.elastic.co/products/elasticsearch , Apache 2.0 + Elasticsearch BV (Elasticsearch) 6.3.2: https://www.elastic.co/products/elasticsearch , Apache 2.0 lang-mustache-client 5.5.0: https://github.com/elastic/elasticsearch/tree/master/modules/lang-mustache , Apache 2.0 parent-join-client 5.5.0: https://github.com/elastic/elasticsearch/tree/master/modules/parent-join , Apache 2.0 reindex-client 5.5.0: https://github.com/elastic/elasticsearch/tree/master/modules/reindex , Apache 2.0 diff --git a/apm-sniffer/apm-agent/pom.xml b/apm-sniffer/apm-agent/pom.xml index e92d933ddf..9094e3e80e 100644 --- a/apm-sniffer/apm-agent/pom.xml +++ b/apm-sniffer/apm-agent/pom.xml @@ -103,6 +103,7 @@ + diff --git a/docs/en/setup/backend/backend-cluster.md b/docs/en/setup/backend/backend-cluster.md index cf4cd607d2..8d7d00642d 100644 --- a/docs/en/setup/backend/backend-cluster.md +++ b/docs/en/setup/backend/backend-cluster.md @@ -38,7 +38,3 @@ cluster: labelSelector: app=collector,release=skywalking uidEnvName: SKYWALKING_COLLECTOR_UID ``` - -TODO @hanahmily - -settings descriptions. \ No newline at end of file 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 b49814cd8e..537d6a4579 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 { } @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 { 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 c2c219975c..8e75fbdb23 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,6 +76,20 @@ public class ServiceInventory extends RegisterSource { return result; } + public ServiceInventory getClone() { + ServiceInventory inventory = new ServiceInventory(); + inventory.setSequence(getSequence()); + inventory.setRegisterTime(getRegisterTime()); + inventory.setHeartbeatTime(getHeartbeatTime()); + inventory.setName(name); + inventory.setIsAddress(isAddress); + inventory.setAddressId(addressId); + inventory.setMappingLastUpdateTime(mappingLastUpdateTime); + inventory.setMappingServiceId(mappingServiceId); + + return inventory; + } + @Override public boolean equals(Object obj) { if (this == obj) return true; 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 531d3f15cf..24d0c92e01 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,6 +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.getClone(); serviceInventory.setMappingServiceId(mappingServiceId); serviceInventory.setMappingLastUpdateTime(System.currentTimeMillis()); diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java index dc6a6a77a0..57c663d8bf 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/worker/RegisterPersistentWorker.java @@ -22,7 +22,7 @@ import java.util.*; import org.apache.skywalking.apm.commons.datacarrier.DataCarrier; import org.apache.skywalking.apm.commons.datacarrier.consumer.IConsumer; import org.apache.skywalking.oap.server.core.analysis.data.EndOfBatchContext; -import org.apache.skywalking.oap.server.core.register.*; +import org.apache.skywalking.oap.server.core.register.RegisterSource; import org.apache.skywalking.oap.server.core.source.Scope; import org.apache.skywalking.oap.server.core.storage.*; import org.apache.skywalking.oap.server.core.worker.AbstractWorker; @@ -63,6 +63,8 @@ public class RegisterPersistentWorker extends AbstractWorker { private void onWork(RegisterSource registerSource) { if (!sources.containsKey(registerSource)) { sources.put(registerSource, registerSource); + } else { + sources.get(registerSource).combine(registerSource); } if (registerSource.getEndOfBatchContext().isEndOfBatch()) { -- GitLab