Un-exchanged endpoint name in ref can't find the id (#2162)
* Update ReferenceIdExchanger.java Change comments of codes.
This commit is contained in:
parent
4f3e233712
commit
a3e03f6133
|
|
@ -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();
|
||||
|
|
@ -72,8 +71,8 @@ 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()) {
|
||||
int parentServiceId = serviceInstanceInventoryCache.get(standardBuilder.getParentServiceInstanceId()).getServiceId();
|
||||
|
|
@ -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…
Reference in New Issue