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 2019/01/13 12:15:29 UTC

[incubator-skywalking] branch instance-extend updated: Fix a bug and refactor properties update.

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

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


The following commit(s) were added to refs/heads/instance-extend by this push:
     new 62fcabd  Fix a bug and refactor properties update.
62fcabd is described below

commit 62fcabd813e37bda91f722d142ba9c7b1618c56f
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Sun Jan 13 20:15:18 2019 +0800

    Fix a bug and refactor properties update.
---
 .../service/IServiceInventoryRegister.java         |  3 ++-
 .../service/NetworkAddressInventoryRegister.java   | 18 +--------------
 .../register/service/ServiceInventoryRegister.java | 26 +++++++++++++++-------
 .../parser/standardization/SpanIdExchanger.java    | 14 +++++++-----
 .../transform/SpringSleuthSegmentBuilderTest.java  | 23 ++++++-------------
 5 files changed, 37 insertions(+), 47 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInventoryRegister.java
index c4d7ef0..93fdc25 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInventoryRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/IServiceInventoryRegister.java
@@ -19,6 +19,7 @@
 package org.apache.skywalking.oap.server.core.register.service;
 
 import com.google.gson.JsonObject;
+import org.apache.skywalking.oap.server.core.register.NodeType;
 import org.apache.skywalking.oap.server.library.module.Service;
 
 /**
@@ -30,7 +31,7 @@ public interface IServiceInventoryRegister extends Service {
 
     int getOrCreate(int addressId, String serviceName, JsonObject properties);
 
-    void updateProperties(int serviceId, JsonObject properties);
+    void update(int serviceId, NodeType nodeType, JsonObject properties);
 
     void heartbeat(int serviceId, long heartBeatTime);
 
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java
index 3910299..68d43f6 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/register/service/NetworkAddressInventoryRegister.java
@@ -127,27 +127,11 @@ public class NetworkAddressInventoryRegister implements INetworkAddressInventory
 
             InventoryProcess.INSTANCE.in(newNetworkAddress);
         }
-
-        ServiceInventory newServiceInventory = getServiceInventoryCache().get(getServiceInventoryCache().getServiceId(networkAddress.getSequence()));
-        if (!this.compare(newServiceInventory, nodeType)) {
-            newServiceInventory = newServiceInventory.getClone();
-            newServiceInventory.setServiceNodeType(nodeType);
-            newServiceInventory.setHeartbeatTime(System.currentTimeMillis());
-
-            InventoryProcess.INSTANCE.in(newServiceInventory);
-        }
     }
 
     private boolean compare(NetworkAddressInventory newNetworkAddress, NodeType nodeType) {
         if (Objects.nonNull(newNetworkAddress)) {
-            return nodeType == newNetworkAddress.getNetworkAddressNodeType();
-        }
-        return true;
-    }
-
-    private boolean compare(ServiceInventory newServiceInventory, NodeType nodeType) {
-        if (Objects.nonNull(newServiceInventory)) {
-            return nodeType == newServiceInventory.getServiceNodeType();
+            return nodeType.equals(newNetworkAddress.getNetworkAddressNodeType());
         }
         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 5cb6737..7d59776 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
@@ -22,7 +22,7 @@ import com.google.gson.JsonObject;
 import java.util.Objects;
 import org.apache.skywalking.oap.server.core.*;
 import org.apache.skywalking.oap.server.core.cache.ServiceInventoryCache;
-import org.apache.skywalking.oap.server.core.register.ServiceInventory;
+import org.apache.skywalking.oap.server.core.register.*;
 import org.apache.skywalking.oap.server.core.register.worker.InventoryProcess;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.util.BooleanUtils;
@@ -91,16 +91,19 @@ public class ServiceInventoryRegister implements IServiceInventoryRegister {
         return serviceId;
     }
 
-    @Override public void updateProperties(int serviceId, JsonObject properties) {
+    @Override public void update(int serviceId, NodeType nodeType, JsonObject properties) {
         ServiceInventory serviceInventory = getServiceInventoryCache().get(serviceId);
         if (Objects.nonNull(serviceInventory)) {
-            serviceInventory = serviceInventory.getClone();
-            serviceInventory.setProperties(properties);
-            serviceInventory.setMappingLastUpdateTime(System.currentTimeMillis());
-
-            InventoryProcess.INSTANCE.in(serviceInventory);
+            if (properties != null || !compare(serviceInventory, nodeType)) {
+                serviceInventory = serviceInventory.getClone();
+                serviceInventory.setServiceNodeType(nodeType);
+                serviceInventory.setProperties(properties);
+                serviceInventory.setMappingLastUpdateTime(System.currentTimeMillis());
+
+                InventoryProcess.INSTANCE.in(serviceInventory);
+            }
         } else {
-            logger.warn("Service {} properties update, but not found in storage.", serviceId);
+            logger.warn("Service {} nodeType/properties update, but not found in storage.", serviceId);
         }
     }
 
@@ -128,4 +131,11 @@ public class ServiceInventoryRegister implements IServiceInventoryRegister {
             logger.warn("Service {} mapping update, but not found in storage.", serviceId);
         }
     }
+
+    private boolean compare(ServiceInventory newServiceInventory, NodeType nodeType) {
+        if (Objects.nonNull(newServiceInventory)) {
+            return nodeType.equals(newServiceInventory.getServiceNodeType());
+        }
+        return true;
+    }
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanIdExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanIdExchanger.java
index f9bcf9c..dfeeb33 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanIdExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanIdExchanger.java
@@ -78,8 +78,8 @@ public class SpanIdExchanger implements IdExchanger<SpanDecorator> {
             }
         }
 
-        int peerId = 0;
-        if (standardBuilder.getPeerId() == 0 && !Strings.isNullOrEmpty(standardBuilder.getPeer())) {
+        int peerId = standardBuilder.getPeerId();
+        if (peerId == 0 && !Strings.isNullOrEmpty(standardBuilder.getPeer())) {
             peerId = networkAddressInventoryRegister.getOrCreate(standardBuilder.getPeer(), buildServiceProperties(standardBuilder));
 
             if (peerId == Const.NONE) {
@@ -96,19 +96,23 @@ public class SpanIdExchanger implements IdExchanger<SpanDecorator> {
 
         if (peerId != Const.NONE) {
             int spanLayerValue = standardBuilder.getSpanLayerValue();
-            networkAddressInventoryRegister.update(peerId, NodeType.fromSpanLayerValue(spanLayerValue));
+            NodeType nodeType = NodeType.fromSpanLayerValue(spanLayerValue);
+            networkAddressInventoryRegister.update(peerId, nodeType);
 
             /**
              * In some case, conjecture node, such as Database node, could be registered by agents.
              * At here, if the target service properties need to be updated,
              * it will only be updated at the first time for now.
              */
+
+            JsonObject properties = null;
+            ServiceInventory newServiceInventory = serviceInventoryCacheDAO.get(serviceInventoryCacheDAO.getServiceId(peerId));
             if (SpanLayer.Database.equals(standardBuilder.getSpanLayer())) {
-                ServiceInventory newServiceInventory = serviceInventoryCacheDAO.get(serviceInventoryCacheDAO.getServiceId(peerId));
                 if (!newServiceInventory.hasProperties()) {
-                    serviceInventoryRegister.updateProperties(newServiceInventory.getSequence(), buildServiceProperties(standardBuilder));
+                    properties = buildServiceProperties(standardBuilder);
                 }
             }
+            serviceInventoryRegister.update(newServiceInventory.getSequence(), nodeType, properties);
         }
 
         if (standardBuilder.getOperationNameId() == Const.NONE) {
diff --git a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/zipkin/transform/SpringSleuthSegmentBuilderTest.java b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/zipkin/transform/SpringSleuthSegmentBuilderTest.java
index 3457830..9a53885 100644
--- a/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/zipkin/transform/SpringSleuthSegmentBuilderTest.java
+++ b/oap-server/server-receiver-plugin/zipkin-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/zipkin/transform/SpringSleuthSegmentBuilderTest.java
@@ -20,22 +20,14 @@ package org.apache.skywalking.oap.server.receiver.zipkin.transform;
 
 import com.google.gson.JsonObject;
 import java.io.UnsupportedEncodingException;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import org.apache.skywalking.apm.network.language.agent.SpanType;
-import org.apache.skywalking.apm.network.language.agent.v2.SegmentObject;
-import org.apache.skywalking.apm.network.language.agent.v2.SegmentReference;
-import org.apache.skywalking.apm.network.language.agent.v2.SpanObjectV2;
-import org.apache.skywalking.oap.server.core.register.*;
-import org.apache.skywalking.oap.server.core.register.service.IServiceInstanceInventoryRegister;
-import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryRegister;
+import org.apache.skywalking.apm.network.language.agent.v2.*;
+import org.apache.skywalking.oap.server.core.register.NodeType;
+import org.apache.skywalking.oap.server.core.register.service.*;
 import org.apache.skywalking.oap.server.receiver.zipkin.CoreRegisterLinker;
-import org.apache.skywalking.oap.server.receiver.zipkin.data.SkyWalkingTrace;
-import org.apache.skywalking.oap.server.receiver.zipkin.data.ZipkinTrace;
-import org.junit.Assert;
-import org.junit.Test;
+import org.apache.skywalking.oap.server.receiver.zipkin.data.*;
+import org.junit.*;
 import org.powermock.reflect.Whitebox;
 import zipkin2.Span;
 import zipkin2.codec.SpanBytesDecoder;
@@ -75,7 +67,7 @@ public class SpringSleuthSegmentBuilderTest implements SegmentListener {
                 }
             }
 
-            @Override public void updateProperties(int serviceId, JsonObject properties) {
+            @Override public void update(int serviceId, NodeType nodeType, JsonObject properties) {
             }
 
             @Override public void heartbeat(int serviceId, long heartBeatTime) {
@@ -86,7 +78,6 @@ public class SpringSleuthSegmentBuilderTest implements SegmentListener {
 
             }
 
-
         };
 
         IServiceInstanceInventoryRegister instanceIDService = new IServiceInstanceInventoryRegister() {