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 2020/02/14 03:26:16 UTC

[skywalking] branch comments created (now 6c68003)

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

wusheng pushed a change to branch comments
in repository https://gitbox.apache.org/repos/asf/skywalking.git.


      at 6c68003  Fill the comments for more classes.

This branch includes the following new commits:

     new 6c68003  Fill the comments for more classes.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[skywalking] 01/01: Fill the comments for more classes.

Posted by wu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch comments
in repository https://gitbox.apache.org/repos/asf/skywalking.git

commit 6c68003c3a959dca9ad18d9ce127c1b895259f2d
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Fri Feb 14 11:26:00 2020 +0800

    Fill the comments for more classes.
---
 .../oap/server/core/analysis/SourceDispatcher.java |  9 +++
 .../oap/server/core/source/SourceReceiver.java     |  4 ++
 .../trace/provider/parser/SegmentParseV2.java      | 64 +++++++++++++++-------
 .../trace/provider/parser/SegmentSource.java       | 12 +++-
 .../provider/parser/decorator/SpanDecorator.java   |  4 ++
 .../provider/parser/decorator/StandardBuilder.java |  6 ++
 .../parser/listener/EntrySpanListener.java         |  3 +
 .../provider/parser/listener/ExitSpanListener.java |  3 +
 .../parser/listener/FirstSpanListener.java         |  3 +
 .../parser/listener/GlobalTraceIdsListener.java    |  4 ++
 .../parser/listener/LocalSpanListener.java         |  3 +
 .../provider/parser/listener/SpanListener.java     | 13 +++++
 .../parser/listener/SpanListenerFactory.java       |  4 ++
 .../listener/endpoint/MultiScopesSpanListener.java | 26 +++++++--
 .../listener/segment/SegmentSpanListener.java      | 16 +++---
 .../ServiceInstanceMappingSpanListener.java        | 49 ++++++++++-------
 .../service/ServiceMappingSpanListener.java        | 45 +++++++++------
 .../parser/standardization/IdExchanger.java        | 14 +++++
 .../standardization/ReferenceIdExchanger.java      | 42 ++++++++++----
 .../parser/standardization/SpanExchanger.java      | 48 +++++++++-------
 20 files changed, 270 insertions(+), 102 deletions(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/SourceDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/SourceDispatcher.java
index 6e85f80..8f52e85 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/SourceDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/SourceDispatcher.java
@@ -20,6 +20,15 @@ package org.apache.skywalking.oap.server.core.analysis;
 
 import org.apache.skywalking.oap.server.core.source.Source;
 
+/**
+ * SourceDispatcher implementation processes different types of the source. There are two kinds of the source
+ * dispatcher. All implementations are doing field values set/get to transfer the data to the streaming process.
+ *
+ * One is hard coded, which could be found through the hierarchy tree. The other is generated by OAL engine based on the
+ * templates insides oal-rt/src/main/resources/code-templates/dispatcher
+ *
+ * @param <SOURCE> the data type of this dispatcher processes.
+ */
 public interface SourceDispatcher<SOURCE extends Source> {
     void dispatch(SOURCE source);
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/SourceReceiver.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/SourceReceiver.java
index de99afb..334e5e4 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/SourceReceiver.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/SourceReceiver.java
@@ -20,6 +20,10 @@ package org.apache.skywalking.oap.server.core.source;
 
 import org.apache.skywalking.oap.server.library.module.Service;
 
+/**
+ * The source receiver implementation delegates to {@link org.apache.skywalking.oap.server.core.analysis.DispatcherManager}
+ * in order to forward source to the suitable real {@link org.apache.skywalking.oap.server.core.analysis.SourceDispatcher}.
+ */
 public interface SourceReceiver extends Service {
     void receive(Source source);
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentParseV2.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentParseV2.java
index af33580..9ccefe4 100755
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentParseV2.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentParseV2.java
@@ -23,6 +23,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.stream.Collectors;
 import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.ProtocolVersion;
 import org.apache.skywalking.apm.network.language.agent.SpanType;
 import org.apache.skywalking.apm.network.language.agent.UniqueId;
@@ -57,12 +58,22 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * SegmentParseV2 is a replication of SegmentParse, but be compatible with v2 trace protocol.
+ * SegmentParseV2 replaced the SegmentParse(V1 is before 6.0.0) to drive the segment analysis. It includes the following
+ * steps
+ *
+ * 1. Register data, name->ID register
+ *
+ * 2. If register unfinished, cache in the local buffer file. And back to (1).
+ *
+ * 3. If register finished, traverse the span and analysis by the given {@link SpanListener}s.
+ *
+ * 4. Notify the build event to all {@link SpanListener}s in order to forward all built sources into dispatchers.
+ *
+ * @since 6.0.0 In the 6.x, the V1 and V2 analysis both exist.
+ * @since 7.0.0 SegmentParse(V1) has been removed permanently.
  */
+@Slf4j
 public class SegmentParseV2 {
-
-    private static final Logger logger = LoggerFactory.getLogger(SegmentParseV2.class);
-
     private final ModuleManager moduleManager;
     private final List<SpanListener> spanListeners;
     private final SegmentParserListenerManager listenerManager;
@@ -76,7 +87,7 @@ public class SegmentParseV2 {
     private volatile static CounterMetrics TRACE_PARSE_ERROR;
 
     private SegmentParseV2(ModuleManager moduleManager, SegmentParserListenerManager listenerManager,
-        TraceServiceModuleConfig config) {
+                           TraceServiceModuleConfig config) {
         this.moduleManager = moduleManager;
         this.listenerManager = listenerManager;
         this.spanListeners = new LinkedList<>();
@@ -90,9 +101,19 @@ public class SegmentParseV2 {
             MetricsCreator metricsCreator = moduleManager.find(TelemetryModule.NAME)
                                                          .provider()
                                                          .getService(MetricsCreator.class);
-            TRACE_BUFFER_FILE_RETRY = metricsCreator.createCounter("v6_trace_buffer_file_retry", "The number of retry trace segment from the buffer file, but haven't registered successfully.", MetricsTag.EMPTY_KEY, MetricsTag.EMPTY_VALUE);
-            TRACE_BUFFER_FILE_OUT = metricsCreator.createCounter("v6_trace_buffer_file_out", "The number of trace segment out of the buffer file", MetricsTag.EMPTY_KEY, MetricsTag.EMPTY_VALUE);
-            TRACE_PARSE_ERROR = metricsCreator.createCounter("v6_trace_parse_error", "The number of trace segment out of the buffer file", MetricsTag.EMPTY_KEY, MetricsTag.EMPTY_VALUE);
+            TRACE_BUFFER_FILE_RETRY = metricsCreator.createCounter(
+                "v6_trace_buffer_file_retry",
+                "The number of retry trace segment from the buffer file, but haven't registered successfully.",
+                MetricsTag.EMPTY_KEY, MetricsTag.EMPTY_VALUE
+            );
+            TRACE_BUFFER_FILE_OUT = metricsCreator.createCounter(
+                "v6_trace_buffer_file_out", "The number of trace segment out of the buffer file", MetricsTag.EMPTY_KEY,
+                MetricsTag.EMPTY_VALUE
+            );
+            TRACE_PARSE_ERROR = metricsCreator.createCounter(
+                "v6_trace_parse_error", "The number of trace segment out of the buffer file", MetricsTag.EMPTY_KEY,
+                MetricsTag.EMPTY_VALUE
+            );
         }
 
         this.serviceInstanceInventoryCache = moduleManager.find(CoreModule.NAME)
@@ -116,15 +137,19 @@ public class SegmentParseV2 {
             // Recheck in case that the segment comes from file buffer
             final int serviceInstanceId = segmentObject.getServiceInstanceId();
             if (serviceInstanceInventoryCache.get(serviceInstanceId) == null) {
-                logger.warn("Cannot recognize service instance id [{}] from cache, segment will be ignored", serviceInstanceId);
+                log.warn(
+                    "Cannot recognize service instance id [{}] from cache, segment will be ignored", serviceInstanceId);
                 return true; // to mark it "completed" thus won't be retried
             }
 
             SegmentDecorator segmentDecorator = new SegmentDecorator(segmentObject);
 
             if (!preBuild(traceIds, segmentDecorator)) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("This segment id exchange not success, write to buffer file, id: {}", segmentCoreInfo.getSegmentId());
+                if (log.isDebugEnabled()) {
+                    log.debug(
+                        "This segment id exchange not success, write to buffer file, id: {}",
+                        segmentCoreInfo.getSegmentId()
+                    );
                 }
 
                 if (source.equals(SegmentSource.Agent)) {
@@ -135,8 +160,8 @@ public class SegmentParseV2 {
                 }
                 return false;
             } else {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("This segment id exchange success, id: {}", segmentCoreInfo.getSegmentId());
+                if (log.isDebugEnabled()) {
+                    log.debug("This segment id exchange success, id: {}", segmentCoreInfo.getSegmentId());
                 }
 
                 notifyListenerToBuild();
@@ -144,7 +169,7 @@ public class SegmentParseV2 {
             }
         } catch (Throwable e) {
             TRACE_PARSE_ERROR.inc();
-            logger.error(e.getMessage(), e);
+            log.error(e.getMessage(), e);
             return true;
         }
     }
@@ -213,7 +238,7 @@ public class SegmentParseV2 {
                 } else if (SpanType.Local.equals(spanDecorator.getSpanType())) {
                     notifyLocalListener(spanDecorator);
                 } else {
-                    logger.error("span type value was unexpected, span type name: {}", spanDecorator.getSpanType()
+                    log.error("span type value was unexpected, span type name: {}", spanDecorator.getSpanType()
                                                                                                     .name());
                 }
             }
@@ -223,8 +248,8 @@ public class SegmentParseV2 {
     }
 
     private void writeToBufferFile(String id, UpstreamSegment upstreamSegment) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("push to segment buffer write worker, id: {}", id);
+        if (log.isDebugEnabled()) {
+            log.debug("push to segment buffer write worker, id: {}", id);
         }
 
         SegmentStandardization standardization = new SegmentStandardization(id);
@@ -279,7 +304,8 @@ public class SegmentParseV2 {
 
     private void createSpanListeners() {
         listenerManager.getSpanListenerFactories()
-                       .forEach(spanListenerFactory -> spanListeners.add(spanListenerFactory.create(moduleManager, config)));
+                       .forEach(
+                           spanListenerFactory -> spanListeners.add(spanListenerFactory.create(moduleManager, config)));
     }
 
     public static class Producer implements DataStreamReader.CallBack<UpstreamSegment> {
@@ -291,7 +317,7 @@ public class SegmentParseV2 {
         private final TraceServiceModuleConfig config;
 
         public Producer(ModuleManager moduleManager, SegmentParserListenerManager listenerManager,
-            TraceServiceModuleConfig config) {
+                        TraceServiceModuleConfig config) {
             this.moduleManager = moduleManager;
             this.listenerManager = listenerManager;
             this.config = config;
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentSource.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentSource.java
index 0b5b87b..eaef1e1 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentSource.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/SegmentSource.java
@@ -18,6 +18,16 @@
 
 package org.apache.skywalking.oap.server.receiver.trace.provider.parser;
 
+/**
+ * The segment source.
+ */
 public enum SegmentSource {
-    Agent, Buffer
+    /**
+     * From the client side agent.
+     */
+    Agent,
+    /**
+     * From the buffer file, because the last time register has not be successful.
+     */
+    Buffer
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/SpanDecorator.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/SpanDecorator.java
index dc07d24..8632ba6 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/SpanDecorator.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/SpanDecorator.java
@@ -26,6 +26,10 @@ import org.apache.skywalking.apm.network.language.agent.v2.SpanObjectV2;
 
 import static java.util.Objects.isNull;
 
+/**
+ * SpanDecorator is used in the metadata register process, and provides an easy access way consistently, no matter
+ * before or after the register.
+ */
 public class SpanDecorator implements StandardBuilder {
     private boolean isOrigin = true;
     private final StandardBuilder standardBuilder;
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/StandardBuilder.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/StandardBuilder.java
index 1dc6932..f9de494 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/StandardBuilder.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/decorator/StandardBuilder.java
@@ -18,6 +18,12 @@
 
 package org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator;
 
+/**
+ * The implementation supports immutable data format to mutable builder transformation.
+ */
 public interface StandardBuilder {
+    /**
+     * Change the status to be mutable if it hasn't. Keep in the mutable status when this is called multiple times.
+     */
     void toBuilder();
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/EntrySpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/EntrySpanListener.java
index 8d1c9ee..2f88ed1 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/EntrySpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/EntrySpanListener.java
@@ -21,6 +21,9 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SegmentCoreInfo;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SpanDecorator;
 
+/**
+ * SpanListener for Entry span.
+ */
 public interface EntrySpanListener extends SpanListener {
     void parseEntry(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo);
 }
\ No newline at end of file
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/ExitSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/ExitSpanListener.java
index da3aea4..17ebf01 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/ExitSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/ExitSpanListener.java
@@ -21,6 +21,9 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SegmentCoreInfo;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SpanDecorator;
 
+/**
+ * SpanListener for exit span.
+ */
 public interface ExitSpanListener extends SpanListener {
     void parseExit(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo);
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/FirstSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/FirstSpanListener.java
index 8d7a289..396c44c 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/FirstSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/FirstSpanListener.java
@@ -21,6 +21,9 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SegmentCoreInfo;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SpanDecorator;
 
+/**
+ * SpanListener for the first span in the segment. The first span means span id is 0.
+ */
 public interface FirstSpanListener extends SpanListener {
     void parseFirst(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo);
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/GlobalTraceIdsListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/GlobalTraceIdsListener.java
index 8a62852..e7bab82 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/GlobalTraceIdsListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/GlobalTraceIdsListener.java
@@ -21,6 +21,10 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener
 import org.apache.skywalking.apm.network.language.agent.UniqueId;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SegmentCoreInfo;
 
+/**
+ * GlobalTraceIdsListener is the first notified listener in the trace analysis. The notifications include the trace is
+ * with other segment core info.
+ */
 public interface GlobalTraceIdsListener extends SpanListener {
     void parseGlobalTraceId(UniqueId uniqueId, SegmentCoreInfo segmentCoreInfo);
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/LocalSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/LocalSpanListener.java
index 6aa2f1e..3c2f9fd 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/LocalSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/LocalSpanListener.java
@@ -21,6 +21,9 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SegmentCoreInfo;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SpanDecorator;
 
+/**
+ * SpanListener for local span
+ */
 public interface LocalSpanListener extends SpanListener {
     void parseLocal(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo);
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SpanListener.java
index 5614d6a..60652f2 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SpanListener.java
@@ -18,11 +18,24 @@
 
 package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener;
 
+/**
+ * SpanListener represents the callback when OAP does the trace segment analysis.
+ */
 public interface SpanListener {
+    /**
+     * The last step of the analysis process. Typically, the implementations forward the analysis results to the source
+     * receiver.
+     */
     void build();
 
+    /**
+     * @return true, if the given point matches the implementation.
+     */
     boolean containsPoint(Point point);
 
+    /**
+     * Analysis point when the analysis core traverses the segment
+     */
     enum Point {
         Entry, Exit, Local, First, TraceIds
     }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SpanListenerFactory.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SpanListenerFactory.java
index 03a69ca..1841503 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SpanListenerFactory.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/SpanListenerFactory.java
@@ -21,6 +21,10 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModuleConfig;
 
+/**
+ * SpanListenerFactory implementation creates the listener instances when required. Every SpanListener could have its
+ * own creation factory.
+ */
 public interface SpanListenerFactory {
     SpanListener create(ModuleManager moduleManager, TraceServiceModuleConfig config);
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
index 41f1b02..97f7fc9 100755
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/endpoint/MultiScopesSpanListener.java
@@ -54,7 +54,9 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.
 import static java.util.Objects.nonNull;
 
 /**
- * Notice, in here, there are following concepts match
+ * MultiScopesSpanListener includes the most segment->source(s) logic.
+ *
+ * This listener traverses the whole segment.
  */
 public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListener, GlobalTraceIdsListener {
 
@@ -98,6 +100,16 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
         return Point.Entry.equals(point) || Point.Exit.equals(point) || Point.TraceIds.equals(point);
     }
 
+    /**
+     * All entry spans are transferred as the Service, Instance and Endpoint related sources. Entry spans are treated on
+     * the behalf of the observability status of the service reported these spans.
+     *
+     * Also, when face the MQ and uninstrumented Gateways, there is different logic to generate the relationship between
+     * services/instances rather than the normal RPC direct call. The reason is the same, we aren't expecting the agent
+     * installed in the MQ server, and Gateway may not have suitable agent. Any uninstrumented service if they have the
+     * capability to forward SkyWalking header through themselves, you could consider the uninstrumented configurations
+     * to make the topology works to be a whole.
+     */
     @Override
     public void parseEntry(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo) {
         this.minuteTimeBucket = segmentCoreInfo.getMinuteTimeBucket();
@@ -118,7 +130,8 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
 
                 if (spanDecorator.getSpanLayer().equals(SpanLayer.MQ) || config.getUninstrumentedGatewaysConfig()
                                                                                .isAddressConfiguredAsGateway(address)) {
-                    int instanceIdByPeerId = instanceInventoryCache.getServiceInstanceId(serviceIdByPeerId, networkAddressId);
+                    int instanceIdByPeerId = instanceInventoryCache.getServiceInstanceId(
+                        serviceIdByPeerId, networkAddressId);
                     sourceBuilder.setSourceServiceInstanceId(instanceIdByPeerId);
                     sourceBuilder.setSourceServiceId(serviceIdByPeerId);
                 } else {
@@ -151,6 +164,10 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
         this.entrySpanDecorator = spanDecorator;
     }
 
+    /**
+     * The exit span should be transferred to the service, instance and relationships from the client side detect
+     * point.
+     */
     @Override
     public void parseExit(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo) {
         if (this.minuteTimeBucket == 0) {
@@ -239,8 +256,9 @@ public class MultiScopesSpanListener implements EntrySpanListener, ExitSpanListe
         }
 
         sourceBuilder.setSourceServiceName(serviceInventoryCache.get(sourceBuilder.getSourceServiceId()).getName());
-        sourceBuilder.setSourceServiceInstanceName(instanceInventoryCache.get(sourceBuilder.getSourceServiceInstanceId())
-                                                                         .getName());
+        sourceBuilder.setSourceServiceInstanceName(
+            instanceInventoryCache.get(sourceBuilder.getSourceServiceInstanceId())
+                                  .getName());
         if (sourceBuilder.getSourceEndpointId() != Const.NONE) {
             sourceBuilder.setSourceEndpointName(endpointInventoryCache.get(sourceBuilder.getSourceEndpointId())
                                                                       .getName());
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/segment/SegmentSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/segment/SegmentSpanListener.java
index 6c9c01a..bbb399b 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/segment/SegmentSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/segment/SegmentSpanListener.java
@@ -19,15 +19,16 @@
 package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.segment;
 
 import java.util.stream.Collectors;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.language.agent.UniqueId;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
 import org.apache.skywalking.oap.server.core.cache.EndpointInventoryCache;
 import org.apache.skywalking.oap.server.core.source.Segment;
 import org.apache.skywalking.oap.server.core.source.SourceReceiver;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.library.util.BooleanUtils;
-import org.apache.skywalking.oap.server.core.analysis.TimeBucket;
 import org.apache.skywalking.oap.server.receiver.trace.provider.TraceServiceModuleConfig;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SegmentCoreInfo;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SpanDecorator;
@@ -36,13 +37,12 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.GlobalTraceIdsListener;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.SpanListener;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.SpanListenerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+/**
+ * SegmentSpanListener forwards the segment raw data to the persistence layer with the query required conditions.
+ */
+@Slf4j
 public class SegmentSpanListener implements FirstSpanListener, EntrySpanListener, GlobalTraceIdsListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(SegmentSpanListener.class);
-
     private final SourceReceiver sourceReceiver;
     private final TraceSegmentSampler sampler;
     private final Segment segment = new Segment();
@@ -113,8 +113,8 @@ public class SegmentSpanListener implements FirstSpanListener, EntrySpanListener
 
     @Override
     public void build() {
-        if (logger.isDebugEnabled()) {
-            logger.debug("segment listener build, segment id: {}", segment.getSegmentId());
+        if (log.isDebugEnabled()) {
+            log.debug("segment listener build, segment id: {}", segment.getSegmentId());
         }
 
         if (sampleStatus.equals(SAMPLE_STATUS.IGNORE)) {
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/service/ServiceInstanceMappingSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/service/ServiceInstanceMappingSpanListener.java
index 4201747..6954b31 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/service/ServiceInstanceMappingSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/service/ServiceInstanceMappingSpanListener.java
@@ -18,8 +18,11 @@
 
 package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.service;
 
+import java.util.ArrayList;
+import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.language.agent.SpanLayer;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
@@ -35,16 +38,15 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.EntrySpanListener;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.SpanListener;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.SpanListenerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
 
+/**
+ * Service Instance mapping basically is as same as the service mapping. The network address fetched from the propagated
+ * context is the alias for the specific service instance. This is just more detailed mapping setup.
+ *
+ * Read {@link ServiceMappingSpanListener}.
+ */
+@Slf4j
 public class ServiceInstanceMappingSpanListener implements EntrySpanListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(ServiceInstanceMappingSpanListener.class);
-
     private final IServiceInstanceInventoryRegister serviceInstanceInventoryRegister;
     private final TraceServiceModuleConfig config;
     private final ServiceInventoryCache serviceInventoryCache;
@@ -71,21 +73,26 @@ public class ServiceInstanceMappingSpanListener implements EntrySpanListener {
 
     @Override
     public void parseEntry(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("service instance mapping listener parse reference");
+        if (log.isDebugEnabled()) {
+            log.debug("service instance mapping listener parse reference");
         }
         if (!spanDecorator.getSpanLayer().equals(SpanLayer.MQ)) {
             if (spanDecorator.getRefsCount() > 0) {
                 for (int i = 0; i < spanDecorator.getRefsCount(); i++) {
                     int networkAddressId = spanDecorator.getRefs(i).getNetworkAddressId();
                     String address = networkAddressInventoryCache.get(networkAddressId).getName();
-                    int serviceInstanceId = serviceInstanceInventoryCache.getServiceInstanceId(serviceInventoryCache.getServiceId(networkAddressId), networkAddressId);
+                    int serviceInstanceId = serviceInstanceInventoryCache.getServiceInstanceId(
+                        serviceInventoryCache.getServiceId(networkAddressId), networkAddressId);
 
                     if (config.getUninstrumentedGatewaysConfig().isAddressConfiguredAsGateway(address)) {
-                        if (logger.isDebugEnabled()) {
-                            logger.debug("{} is configured as gateway, will reset its mapping service instance id", serviceInstanceId);
+                        if (log.isDebugEnabled()) {
+                            log.debug(
+                                "{} is configured as gateway, will reset its mapping service instance id",
+                                serviceInstanceId
+                            );
                         }
-                        ServiceInstanceInventory instanceInventory = serviceInstanceInventoryCache.get(serviceInstanceId);
+                        ServiceInstanceInventory instanceInventory = serviceInstanceInventoryCache.get(
+                            serviceInstanceId);
                         if (instanceInventory.getMappingServiceInstanceId() != Const.NONE && !serviceInstancesToResetMapping
                             .contains(serviceInstanceId)) {
                             serviceInstancesToResetMapping.add(serviceInstanceId);
@@ -104,15 +111,17 @@ public class ServiceInstanceMappingSpanListener implements EntrySpanListener {
     @Override
     public void build() {
         serviceInstanceMappings.forEach(instanceMapping -> {
-            if (logger.isDebugEnabled()) {
-                logger.debug("service instance mapping listener build, service id: {}, mapping service id: {}", instanceMapping
-                    .getServiceInstanceId(), instanceMapping.getMappingServiceInstanceId());
+            if (log.isDebugEnabled()) {
+                log.debug(
+                    "service instance mapping listener build, service id: {}, mapping service id: {}", instanceMapping
+                        .getServiceInstanceId(), instanceMapping.getMappingServiceInstanceId());
             }
-            serviceInstanceInventoryRegister.updateMapping(instanceMapping.getServiceInstanceId(), instanceMapping.getMappingServiceInstanceId());
+            serviceInstanceInventoryRegister.updateMapping(
+                instanceMapping.getServiceInstanceId(), instanceMapping.getMappingServiceInstanceId());
         });
         serviceInstancesToResetMapping.forEach(instanceId -> {
-            if (logger.isDebugEnabled()) {
-                logger.debug("service instance mapping listener build, reset mapping of service id: {}", instanceId);
+            if (log.isDebugEnabled()) {
+                log.debug("service instance mapping listener build, reset mapping of service id: {}", instanceId);
             }
             serviceInstanceInventoryRegister.resetMapping(instanceId);
         });
diff --git a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/service/ServiceMappingSpanListener.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/service/ServiceMappingSpanListener.java
index df42c5c..bcfece1 100755
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/service/ServiceMappingSpanListener.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/listener/service/ServiceMappingSpanListener.java
@@ -18,8 +18,11 @@
 
 package org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.service;
 
+import java.util.ArrayList;
+import java.util.List;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.language.agent.SpanLayer;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
@@ -34,16 +37,13 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.EntrySpanListener;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.SpanListener;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.listener.SpanListenerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.List;
 
+/**
+ * ServiceMappingSpanListener includes the specific logic about the concept of service mapping. Service mapping is the
+ * core idea to make the SkyWalking has good performance and low memory costs, when discovery the big topology.
+ */
+@Slf4j
 public class ServiceMappingSpanListener implements EntrySpanListener {
-
-    private static final Logger logger = LoggerFactory.getLogger(ServiceMappingSpanListener.class);
-
     private final IServiceInventoryRegister serviceInventoryRegister;
     private final TraceServiceModuleConfig config;
     private final ServiceInventoryCache serviceInventoryCache;
@@ -69,10 +69,15 @@ public class ServiceMappingSpanListener implements EntrySpanListener {
         return Point.Entry.equals(point);
     }
 
+    /**
+     * Fetch the network address information used at the client side from the propagated context(headers mostly. Besides
+     * the MQ and uninstrumented services, the the network address will be treated as the alias name of the current
+     * service. The alias mechanism is the service mapping.
+     */
     @Override
     public void parseEntry(SpanDecorator spanDecorator, SegmentCoreInfo segmentCoreInfo) {
-        if (logger.isDebugEnabled()) {
-            logger.debug("service mapping listener parse reference");
+        if (log.isDebugEnabled()) {
+            log.debug("service mapping listener parse reference");
         }
 
         if (!spanDecorator.getSpanLayer().equals(SpanLayer.MQ)) {
@@ -83,11 +88,12 @@ public class ServiceMappingSpanListener implements EntrySpanListener {
                     int serviceId = serviceInventoryCache.getServiceId(networkAddressId);
 
                     if (config.getUninstrumentedGatewaysConfig().isAddressConfiguredAsGateway(address)) {
-                        if (logger.isDebugEnabled()) {
-                            logger.debug("{} is configured as gateway, will reset its mapping service id", serviceId);
+                        if (log.isDebugEnabled()) {
+                            log.debug("{} is configured as gateway, will reset its mapping service id", serviceId);
                         }
                         ServiceInventory serviceInventory = serviceInventoryCache.get(serviceId);
-                        if (serviceInventory.getMappingServiceId() != Const.NONE && !servicesToResetMapping.contains(serviceId)) {
+                        if (serviceInventory.getMappingServiceId() != Const.NONE && !servicesToResetMapping.contains(
+                            serviceId)) {
                             servicesToResetMapping.add(serviceId);
                         }
                     } else {
@@ -104,15 +110,18 @@ public class ServiceMappingSpanListener implements EntrySpanListener {
     @Override
     public void build() {
         serviceMappings.forEach(serviceMapping -> {
-            if (logger.isDebugEnabled()) {
-                logger.debug("service mapping listener build, service id: {}, mapping service id: {}", serviceMapping.getServiceId(), serviceMapping
-                    .getMappingServiceId());
+            if (log.isDebugEnabled()) {
+                log.debug(
+                    "service mapping listener build, service id: {}, mapping service id: {}",
+                    serviceMapping.getServiceId(), serviceMapping
+                        .getMappingServiceId()
+                );
             }
             serviceInventoryRegister.updateMapping(serviceMapping.getServiceId(), serviceMapping.getMappingServiceId());
         });
         servicesToResetMapping.forEach(serviceId -> {
-            if (logger.isDebugEnabled()) {
-                logger.debug("service mapping listener build, reset mapping of service id: {}", serviceId);
+            if (log.isDebugEnabled()) {
+                log.debug("service mapping listener build, reset mapping of service id: {}", serviceId);
             }
             serviceInventoryRegister.resetMapping(serviceId);
         });
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/IdExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/IdExchanger.java
index 59963da..9d5be9d 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/IdExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/IdExchanger.java
@@ -20,6 +20,20 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.standard
 
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.StandardBuilder;
 
+/**
+ * The implementation has details to do String->ID(integer) transformation.
+ */
 public interface IdExchanger<T extends StandardBuilder> {
+    /**
+     * Register all required fields in the builder to get the assigned IDs.
+     *
+     * @param standardBuilder object includes unregistered data.
+     * @param serviceId       service id of this builder.
+     * @return true if all register completed. NOTICE, because the register is in async mode, mostly because this is a
+     * distributed register mechanism, check {@link org.apache.skywalking.oap.server.core.register.worker.InventoryStreamProcessor},
+     * the required ID could be unreachable as the register is still in processing. But in the production environment,
+     * besides the moments of the SkyWalking just being setup or new service/instance/endpoint online, all the registers
+     * should have finished back to when they are accessed at the first time. This register could process very fast.
+     */
     boolean exchange(T standardBuilder, int serviceId);
 }
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/ReferenceIdExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
index d373039..51f9120 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java
@@ -19,6 +19,7 @@
 package org.apache.skywalking.oap.server.receiver.trace.provider.parser.standardization;
 
 import com.google.common.base.Strings;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.oap.server.core.Const;
 import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.cache.ServiceInstanceInventoryCache;
@@ -30,10 +31,15 @@ import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * Register the information inside the segment reference. All of them are downstream(caller) service information.
+ * Reference could include multiple rows, as this span could have multiple downstream, such as batch process, typically
+ * MQ consumer.
+ *
+ * Check the Cross Process Propagation Headers Protocol v2 for the details in the references.
+ */
+@Slf4j
 public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
-
-    private static final Logger logger = LoggerFactory.getLogger(ReferenceIdExchanger.class);
-
     private static ReferenceIdExchanger EXCHANGER;
     private final IEndpointInventoryRegister endpointInventoryRegister;
     private final ServiceInstanceInventoryCache serviceInstanceInventoryCache;
@@ -63,14 +69,18 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
         boolean exchanged = true;
 
         if (standardBuilder.getEntryEndpointId() == 0) {
-            String entryEndpointName = Strings.isNullOrEmpty(standardBuilder.getEntryEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
+            String entryEndpointName = Strings.isNullOrEmpty(
+                standardBuilder.getEntryEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
                 .getEntryEndpointName();
             int entryServiceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId())
                                                               .getServiceId();
             int entryEndpointId = getEndpointId(entryServiceId, entryEndpointName);
             if (entryEndpointId == 0) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("entry endpoint name: {} from service id: {} exchange failed", entryEndpointName, entryServiceId);
+                if (log.isDebugEnabled()) {
+                    log.debug(
+                        "entry endpoint name: {} from service id: {} exchange failed", entryEndpointName,
+                        entryServiceId
+                    );
                 }
 
                 exchanged = false;
@@ -86,15 +96,19 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
         }
 
         if (standardBuilder.getParentEndpointId() == 0) {
-            String parentEndpointName = Strings.isNullOrEmpty(standardBuilder.getParentEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
+            String parentEndpointName = Strings.isNullOrEmpty(
+                standardBuilder.getParentEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
                 .getParentEndpointName();
             int parentServiceId = serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId())
                                                                .getServiceId();
             int parentEndpointId = getEndpointId(parentServiceId, parentEndpointName);
 
             if (parentEndpointId == 0) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("parent endpoint name: {} from service id: {} exchange failed", parentEndpointName, parentServiceId);
+                if (log.isDebugEnabled()) {
+                    log.debug(
+                        "parent endpoint name: {} from service id: {} exchange failed", parentEndpointName,
+                        parentServiceId
+                    );
                 }
 
                 exchanged = false;
@@ -110,11 +124,15 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
         }
 
         if (standardBuilder.getNetworkAddressId() == 0 && !Strings.isNullOrEmpty(standardBuilder.getNetworkAddress())) {
-            int networkAddressId = networkAddressInventoryRegister.getOrCreate(standardBuilder.getNetworkAddress(), null);
+            int networkAddressId = networkAddressInventoryRegister.getOrCreate(
+                standardBuilder.getNetworkAddress(), null);
 
             if (networkAddressId == 0) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("network getAddress: {} from service id: {} exchange failed", standardBuilder.getNetworkAddress(), serviceId);
+                if (log.isDebugEnabled()) {
+                    log.debug(
+                        "network getAddress: {} from service id: {} exchange failed",
+                        standardBuilder.getNetworkAddress(), serviceId
+                    );
                 }
 
                 exchanged = false;
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/SpanExchanger.java b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
index 9d6f534..c0383b2 100644
--- a/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
+++ b/oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/SpanExchanger.java
@@ -20,6 +20,8 @@ package org.apache.skywalking.oap.server.receiver.trace.provider.parser.standard
 
 import com.google.common.base.Strings;
 import com.google.gson.JsonObject;
+import java.util.List;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.skywalking.apm.network.common.KeyStringValuePair;
 import org.apache.skywalking.apm.network.language.agent.SpanLayer;
 import org.apache.skywalking.apm.network.language.agent.SpanType;
@@ -38,15 +40,15 @@ import org.apache.skywalking.oap.server.core.register.service.IServiceInventoryR
 import org.apache.skywalking.oap.server.core.source.DetectPoint;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 import org.apache.skywalking.oap.server.receiver.trace.provider.parser.decorator.SpanDecorator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
 
+/**
+ * SpanExchanger process the segment owner(service/instance) ID register, including operation name and network address.
+ *
+ * @since 6.6.0 only the operation name of entry span is registered as the endpoint, others keep the operation name as
+ * the literal string.
+ */
+@Slf4j
 public class SpanExchanger implements IdExchanger<SpanDecorator> {
-
-    private static final Logger logger = LoggerFactory.getLogger(SpanExchanger.class);
-
     private static SpanExchanger EXCHANGER;
     private final ServiceInventoryCache serviceInventoryCacheDAO;
     private final IServiceInventoryRegister serviceInventoryRegister;
@@ -95,8 +97,9 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
             int componentId = componentLibraryCatalogService.getComponentId(standardBuilder.getComponent());
 
             if (componentId == 0) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("component: {} in service: {} exchange failed", standardBuilder.getComponent(), serviceId);
+                if (log.isDebugEnabled()) {
+                    log.debug(
+                        "component: {} in service: {} exchange failed", standardBuilder.getComponent(), serviceId);
                 }
 
                 exchanged = false;
@@ -109,11 +112,12 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
 
         int peerId = standardBuilder.getPeerId();
         if (peerId == 0 && !Strings.isNullOrEmpty(standardBuilder.getPeer())) {
-            peerId = networkAddressInventoryRegister.getOrCreate(standardBuilder.getPeer(), buildServiceProperties(standardBuilder));
+            peerId = networkAddressInventoryRegister.getOrCreate(
+                standardBuilder.getPeer(), buildServiceProperties(standardBuilder));
 
             if (peerId == Const.NONE) {
-                if (logger.isDebugEnabled()) {
-                    logger.debug("peer: {} in service: {} exchange failed", standardBuilder.getPeer(), serviceId);
+                if (log.isDebugEnabled()) {
+                    log.debug("peer: {} in service: {} exchange failed", standardBuilder.getPeer(), serviceId);
                 }
 
                 exchanged = false;
@@ -135,7 +139,8 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
              * it will only be updated at the first time for now.
              */
             JsonObject properties = null;
-            ServiceInventory newServiceInventory = serviceInventoryCacheDAO.get(serviceInventoryCacheDAO.getServiceId(peerId));
+            ServiceInventory newServiceInventory = serviceInventoryCacheDAO.get(
+                serviceInventoryCacheDAO.getServiceId(peerId));
             if (SpanLayer.Database.equals(standardBuilder.getSpanLayer())) {
                 if (!newServiceInventory.hasProperties()) {
                     properties = buildServiceProperties(standardBuilder);
@@ -143,8 +148,9 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
             }
             serviceInventoryRegister.update(newServiceInventory.getSequence(), nodeType, properties);
 
-            ServiceInstanceInventory newServiceInstanceInventory = serviceInstanceInventoryCacheDAO.get(serviceInstanceInventoryCacheDAO
-                .getServiceInstanceId(newServiceInventory.getSequence(), peerId));
+            ServiceInstanceInventory newServiceInstanceInventory = serviceInstanceInventoryCacheDAO.get(
+                serviceInstanceInventoryCacheDAO
+                    .getServiceInstanceId(newServiceInventory.getSequence(), peerId));
             serviceInstanceInventoryRegister.update(newServiceInstanceInventory.getSequence(), nodeType, properties);
         }
 
@@ -154,14 +160,16 @@ public class SpanExchanger implements IdExchanger<SpanDecorator> {
              * so, since 6.6.0, only it triggers register.
              */
             if (SpanType.Entry.equals(standardBuilder.getSpanType())) {
-                String endpointName = Strings.isNullOrEmpty(standardBuilder.getOperationName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
+                String endpointName = Strings.isNullOrEmpty(
+                    standardBuilder.getOperationName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder
                     .getOperationName();
-                int endpointId = endpointInventoryRegister.getOrCreate(serviceId, endpointName, DetectPoint.fromSpanType(standardBuilder
-                    .getSpanType()));
+                int endpointId = endpointInventoryRegister.getOrCreate(
+                    serviceId, endpointName, DetectPoint.fromSpanType(standardBuilder
+                                                                          .getSpanType()));
 
                 if (endpointId == 0) {
-                    if (logger.isDebugEnabled()) {
-                        logger.debug("endpoint name: {} from service id: {} exchange failed", endpointName, serviceId);
+                    if (log.isDebugEnabled()) {
+                        log.debug("endpoint name: {} from service id: {} exchange failed", endpointName, serviceId);
                     }
 
                     exchanged = false;