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

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


The following commit(s) were added to refs/heads/master by this push:
     new 30748d2052 Fix Service Layer when building Events in the 
EventHookCallback. (#11918)
30748d2052 is described below

commit 30748d2052dea49edb477cedf1fe7efbac43292a
Author: Wan Kai <wankai...@foxmail.com>
AuthorDate: Fri Feb 23 14:01:55 2024 +0800

    Fix Service Layer when building Events in the EventHookCallback. (#11918)
---
 docs/en/changes/changes.md                           |  1 +
 .../core/alarm/provider/EventHookCallback.java       | 20 ++++++++++++++------
 .../core/alarm/provider/EventHookCallbackTest.java   | 12 +++++++++---
 .../server/core/query/ServiceTopologyBuilder.java    |  3 +++
 4 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md
index 118d0ab995..70b71e3775 100644
--- a/docs/en/changes/changes.md
+++ b/docs/en/changes/changes.md
@@ -55,6 +55,7 @@
 * Fix table exists check in the JDBC Storage Plugin.
 * Fix day-based table rolling time range strategy in JDBC storage.
 * Add `maxInboundMessageSize (SW_DCS_MAX_INBOUND_MESSAGE_SIZE)` configuration 
to change the max inbound message size of DCS.
+* Fix Service Layer when building Events in the EventHookCallback.
 
 #### UI
 
diff --git 
a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java
 
b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java
index db4cdfac4e..acb14d2764 100644
--- 
a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java
+++ 
b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallback.java
@@ -28,7 +28,9 @@ import org.apache.skywalking.oap.server.core.CoreModule;
 import org.apache.skywalking.oap.server.core.alarm.AlarmCallback;
 import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
 import org.apache.skywalking.oap.server.core.analysis.IDManager;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import org.apache.skywalking.oap.server.core.query.MetadataQueryService;
+import org.apache.skywalking.oap.server.core.query.type.Service;
 import org.apache.skywalking.oap.server.core.source.DefaultScopeDefine;
 import org.apache.skywalking.oap.server.library.module.ModuleManager;
 
@@ -69,7 +71,12 @@ public class EventHookCallback implements AlarmCallback {
     }
 
     private String getLayer(String serviceId) throws IOException {
-        return 
getMetadataQueryService().getService(serviceId).getLayers().iterator().next();
+        Service service = getMetadataQueryService().getService(serviceId);
+        if (service != null) {
+            return service.getLayers().iterator().next();
+        } else {
+            return Layer.UNDEFINED.name();
+        }
     }
 
     private List<Event> constructCurrentEvent(AlarmMessage msg) throws 
IOException {
@@ -100,6 +107,7 @@ public class EventHookCallback implements AlarmCallback {
                             .setService(sourceServiceIdDef.getName())
                             .build()
                 );
+                builder.setLayer(getLayer(msg.getId0()));
                 events.add(builder.build());
                 IDManager.ServiceID.ServiceIDDefinition destServiceIdDef = 
IDManager.ServiceID.analysisId(msg.getId1());
                 builder.setSource(
@@ -107,7 +115,7 @@ public class EventHookCallback implements AlarmCallback {
                                 .setService(destServiceIdDef.getName())
                                 .build()
                 ).setUuid(UUID.randomUUID().toString());
-                builder.setLayer(getLayer(sourceServiceIdDef.isReal() ? 
msg.getId0() : msg.getId1()));
+                builder.setLayer(getLayer(msg.getId1()));
                 events.add(builder.build());
                 break;
             case DefaultScopeDefine.SERVICE_INSTANCE :
@@ -129,6 +137,7 @@ public class EventHookCallback implements AlarmCallback {
                                 
.setService(IDManager.ServiceID.analysisId(sourceInstanceIdDef.getServiceId()).getName())
                                 .build()
                 );
+                builder.setLayer(getLayer(sourceInstanceIdDef.getServiceId()));
                 events.add(builder.build());
                 IDManager.ServiceInstanceID.InstanceIDDefinition 
destInstanceIdDef = IDManager.ServiceInstanceID.analysisId(msg.getId1());
                 builder.setSource(
@@ -137,8 +146,7 @@ public class EventHookCallback implements AlarmCallback {
                                 
.setService(IDManager.ServiceID.analysisId(destInstanceIdDef.getServiceId()).getName())
                                 .build()
                 ).setUuid(UUID.randomUUID().toString());
-                IDManager.ServiceID.ServiceIDDefinition 
srcInstanceServiceIdDef = 
IDManager.ServiceID.analysisId(sourceInstanceIdDef.getServiceId());
-                builder.setLayer(getLayer(srcInstanceServiceIdDef.isReal() ? 
sourceInstanceIdDef.getServiceId() : destInstanceIdDef.getServiceId()));
+                builder.setLayer(getLayer(destInstanceIdDef.getServiceId()));
                 events.add(builder.build());
                 break;
             case DefaultScopeDefine.ENDPOINT :
@@ -160,6 +168,7 @@ public class EventHookCallback implements AlarmCallback {
                                 
.setService(IDManager.ServiceID.analysisId(sourceEndpointIDDef.getServiceId()).getName())
                                 .build()
                 );
+                builder.setLayer(getLayer(sourceEndpointIDDef.getServiceId()));
                 events.add(builder.build());
                 IDManager.EndpointID.EndpointIDDefinition destEndpointIDDef = 
IDManager.EndpointID.analysisId(msg.getId1());
                 builder.setSource(
@@ -168,8 +177,7 @@ public class EventHookCallback implements AlarmCallback {
                                 
.setService(IDManager.ServiceID.analysisId(destEndpointIDDef.getServiceId()).getName())
                                 .build()
                 ).setUuid(UUID.randomUUID().toString());
-                IDManager.ServiceID.ServiceIDDefinition 
srcEndpointServiceIdDef = 
IDManager.ServiceID.analysisId(sourceEndpointIDDef.getServiceId());
-                builder.setLayer(getLayer(srcEndpointServiceIdDef.isReal() ? 
sourceEndpointIDDef.getServiceId() : destEndpointIDDef.getServiceId()));
+                builder.setLayer(getLayer(destEndpointIDDef.getServiceId()));
                 events.add(builder.build());
                 break;
         }
diff --git 
a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java
 
b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java
index 08dabec7b7..de333eccb7 100644
--- 
a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java
+++ 
b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/EventHookCallbackTest.java
@@ -67,7 +67,8 @@ public class EventHookCallbackTest {
         
when(moduleServiceHolder.getService(EventAnalyzerService.class)).thenReturn(mockEventAnalyzerService);
         
when(moduleManager.find(CoreModule.NAME)).thenReturn(moduleProviderHolder);
         
when(moduleServiceHolder.getService(MetadataQueryService.class)).thenReturn(metadataQueryService);
-        when(metadataQueryService.getService(any())).thenReturn(mockService());
+        Service service = mockService();
+        
when(metadataQueryService.getService(service.getId())).thenReturn(service);
         //make sure current service be called.
         callback.doAlarm(msgs);
         verify(mockEventAnalyzerService).analyze(any(Event.class));
@@ -83,6 +84,7 @@ public class EventHookCallbackTest {
         assertEquals("Alarm", value.getName());
         assertEquals(msg.getAlarmMessage(), value.getMessage());
         assertEquals(msg.getPeriod(), (value.getEndTime() - 
value.getStartTime()) / 1000 / 60);
+        assertEquals(service.getLayers().iterator().next(), value.getLayer());
 
     }
 
@@ -95,7 +97,8 @@ public class EventHookCallbackTest {
         
when(moduleServiceHolder.getService(EventAnalyzerService.class)).thenReturn(eventAnalyzerService);
         
when(moduleManager.find(CoreModule.NAME)).thenReturn(moduleProviderHolder);
         
when(moduleServiceHolder.getService(MetadataQueryService.class)).thenReturn(metadataQueryService);
-        when(metadataQueryService.getService(any())).thenReturn(mockService());
+        Service service = mockService();
+        
when(metadataQueryService.getService(service.getId())).thenReturn(service);
         callback.doAlarm(msgs);
 
         ArgumentCaptor<Event> argument = ArgumentCaptor.forClass(Event.class);
@@ -109,6 +112,8 @@ public class EventHookCallbackTest {
         assertEquals((sourceEvent.getEndTime() - sourceEvent.getStartTime()) / 
1000 / 60, msg.getPeriod());
         assertEquals(destEvent.getSource().getService(), 
IDManager.ServiceID.analysisId(msg.getId1()).getName());
         assertEquals((destEvent.getEndTime() - destEvent.getStartTime()) / 
1000 / 60, msg.getPeriod());
+        assertEquals(service.getLayers().iterator().next(), 
sourceEvent.getLayer());
+        assertEquals(Layer.UNDEFINED.name(), destEvent.getLayer());
     }
 
     private List<AlarmMessage> mockAlarmMessagesHasSingleElement() {
@@ -127,7 +132,7 @@ public class EventHookCallbackTest {
         msg.setScopeId(DefaultScopeDefine.SERVICE_RELATION);
         msg.setScope("");
         msg.setName("test-skywalking");
-        msg.setId0(IDManager.ServiceID.buildId("sourceIdStr", true));
+        msg.setId0(IDManager.ServiceID.buildId("test-skywalking", true));
         msg.setId1(IDManager.ServiceID.buildId("destIdStr", true));
         msg.setAlarmMessage("Alarm caused by Rule service_resp_time_rule");
         msg.setPeriod(5);
@@ -137,6 +142,7 @@ public class EventHookCallbackTest {
     private Service mockService() {
         Service service = new Service();
         service.setName("test-skywalking");
+        service.setId(IDManager.ServiceID.buildId(service.getName(), true));
         service.getLayers().add(Layer.GENERAL.name());
         return service;
     }
diff --git 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java
 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java
index 181e272e3b..ba48400f74 100644
--- 
a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java
+++ 
b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/query/ServiceTopologyBuilder.java
@@ -27,6 +27,7 @@ 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.analysis.IDManager;
+import org.apache.skywalking.oap.server.core.analysis.Layer;
 import 
org.apache.skywalking.oap.server.core.analysis.manual.networkalias.NetworkAddressAlias;
 import org.apache.skywalking.oap.server.core.cache.NetworkAddressAliasCache;
 import 
org.apache.skywalking.oap.server.core.config.IComponentLibraryCatalogService;
@@ -216,6 +217,8 @@ class ServiceTopologyBuilder {
         Service service = getMetadataQueryService().getService(sourceId);
         if (service != null) {
             serviceNode.getLayers().addAll(service.getLayers());
+        } else {
+            serviceNode.getLayers().add(Layer.UNDEFINED.name());
         }
         return serviceNode;
     }

Reply via email to