提交 a3e03f61 编写于 作者: xiaoyuelangyan's avatar xiaoyuelangyan 提交者: wu-sheng

Un-exchanged endpoint name in ref can't find the id (#2162)

* Update ReferenceIdExchanger.java

Change comments of codes.
上级 4f3e2337
...@@ -55,8 +55,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { ...@@ -55,8 +55,7 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
@Override public boolean exchange(ReferenceDecorator standardBuilder, int serviceId) { @Override public boolean exchange(ReferenceDecorator standardBuilder, int serviceId) {
if (standardBuilder.getEntryEndpointId() == 0) { if (standardBuilder.getEntryEndpointId() == 0) {
String entryEndpointName = Strings.isNullOrEmpty(standardBuilder.getEntryEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder.getEntryEndpointName(); 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 (entryEndpointId == 0) {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
int entryServiceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId(); int entryServiceId = serviceInstanceInventoryCache.get(standardBuilder.getEntryServiceInstanceId()).getServiceId();
...@@ -72,8 +71,8 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { ...@@ -72,8 +71,8 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
if (standardBuilder.getParentEndpointId() == 0) { if (standardBuilder.getParentEndpointId() == 0) {
String parentEndpointName = Strings.isNullOrEmpty(standardBuilder.getParentEndpointName()) ? Const.DOMAIN_OPERATION_NAME : standardBuilder.getParentEndpointName(); 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 (parentEndpointId == 0) {
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
int parentServiceId = serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId()).getServiceId(); int parentServiceId = serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId()).getServiceId();
...@@ -103,4 +102,29 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> { ...@@ -103,4 +102,29 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
} }
return true; 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;
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册