Loading oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java +28 −4 Original line number Diff line number Diff line Loading @@ -55,8 +55,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { @Override public boolean exchange(ReferenceDecorator standardBuilder, int serviceId) { if (standardBuilder.getEntryEndpointId() == 0) { String entryEndpointName = Strings.isNullOrEmpty(standardBuilder.getEntryEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder.getEntryEndpointName(); int entryEndpointId = endpointInventoryRegister.get(serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId(), entryEndpointName, DetectPoint.SERVER.ordinal()); int entryEndpointId = getEndpointId(standardBuilder, entryEndpointName); if (entryEndpointId == 0) { if (logger.isDebugEnabled()) { int entryServiceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId(); Loading @@ -72,7 +71,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { if (standardBuilder.getParentEndpointId() == 0) { String parentEndpointName = Strings.isNullOrEmpty(standardBuilder.getParentEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder.getParentEndpointName(); int parentEndpointId = endpointInventoryRegister.get(serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId()).getServiceId(), parentEndpointName, DetectPoint.SERVER.ordinal()); int parentEndpointId = getEndpointId(standardBuilder, parentEndpointName); if (parentEndpointId == 0) { if (logger.isDebugEnabled()) { Loading Loading @@ -103,4 +102,29 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { } return true; } /** * Endpoint in ref could be local or exit span's operation name. * Especially if it is local span operation name, * exchange may not happen at agent, such as Java agent, * then put literal endpoint string in the header, * Need to try to get the id by assuming the endpoint name is detected at server, local or client. * * If agent does the exchange, then always use endpoint id. * * @param standardBuilder * @param endpointName * @return */ private int getEndpointId(ReferenceDecorator standardBuilder,String endpointName) { int serviceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId(); int endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.SERVER.ordinal()); if (endpointId == Const.NONE) { endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.CLIENT.ordinal()); if (endpointId == Const.NONE) { endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.UNRECOGNIZED.ordinal()); } } return endpointId; } } Loading
oap-server/server-receiver-plugin/skywalking-trace-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/trace/provider/parser/standardization/ReferenceIdExchanger.java +28 −4 Original line number Diff line number Diff line Loading @@ -55,8 +55,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { @Override public boolean exchange(ReferenceDecorator standardBuilder, int serviceId) { if (standardBuilder.getEntryEndpointId() == 0) { String entryEndpointName = Strings.isNullOrEmpty(standardBuilder.getEntryEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder.getEntryEndpointName(); int entryEndpointId = endpointInventoryRegister.get(serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId(), entryEndpointName, DetectPoint.SERVER.ordinal()); int entryEndpointId = getEndpointId(standardBuilder, entryEndpointName); if (entryEndpointId == 0) { if (logger.isDebugEnabled()) { int entryServiceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId(); Loading @@ -72,7 +71,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { if (standardBuilder.getParentEndpointId() == 0) { String parentEndpointName = Strings.isNullOrEmpty(standardBuilder.getParentEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder.getParentEndpointName(); int parentEndpointId = endpointInventoryRegister.get(serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId()).getServiceId(), parentEndpointName, DetectPoint.SERVER.ordinal()); int parentEndpointId = getEndpointId(standardBuilder, parentEndpointName); if (parentEndpointId == 0) { if (logger.isDebugEnabled()) { Loading Loading @@ -103,4 +102,29 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { } return true; } /** * Endpoint in ref could be local or exit span's operation name. * Especially if it is local span operation name, * exchange may not happen at agent, such as Java agent, * then put literal endpoint string in the header, * Need to try to get the id by assuming the endpoint name is detected at server, local or client. * * If agent does the exchange, then always use endpoint id. * * @param standardBuilder * @param endpointName * @return */ private int getEndpointId(ReferenceDecorator standardBuilder,String endpointName) { int serviceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId(); int endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.SERVER.ordinal()); if (endpointId == Const.NONE) { endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.CLIENT.ordinal()); if (endpointId == Const.NONE) { endpointId = endpointInventoryRegister.get(serviceId, endpointName, DetectPoint.UNRECOGNIZED.ordinal()); } } return endpointId; } }