Support ref endpoint name register (#4422)

This commit is contained in:
吴晟 Wu Sheng 2020-02-27 11:06:13 +08:00 committed by GitHub
parent b28c7d728e
commit 58a787f9e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 20 deletions

View File

@ -69,8 +69,8 @@ public class EndpointInventoryRegister implements IEndpointInventoryRegister {
}
@Override
public int get(int serviceId, String endpointName, int detectPoint) {
return getCacheService().getEndpointId(serviceId, endpointName, detectPoint);
public int get(int serviceId, String endpointName, DetectPoint detectPoint) {
return getCacheService().getEndpointId(serviceId, endpointName, detectPoint.ordinal());
}
@Override

View File

@ -25,7 +25,7 @@ public interface IEndpointInventoryRegister extends Service {
int getOrCreate(int serviceId, String endpointName, DetectPoint detectPoint);
int get(int serviceId, String endpointName, int detectPoint);
int get(int serviceId, String endpointName, DetectPoint detectPoint);
void heartbeat(int endpointId, long heartBeatTime);
}

View File

@ -139,29 +139,19 @@ public class ReferenceIdExchanger implements IdExchanger<ReferenceDecorator> {
standardBuilder.setNetworkAddressId(networkAddressId);
standardBuilder.setNetworkAddress(Const.EMPTY_STRING);
}
} else {
/**
* Since 6.6.0, endpoint id could be -1, as it is not an endpoint. Such as local span and exist span.
*/
}
return exchanged;
}
/**
* 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.
* <p>
* If agent does the exchange, then always use endpoint id.
* @since 6.6.0 The endpoint in the ref should be server endpoint only. The agent will/should use `-1`, when it can't
* find the endpoint of entry span in the current tracing context when build the ref.
* @since 5.0 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. * <p> * If
* agent does the exchange, then always use endpoint id.
*/
private int getEndpointId(int serviceId, String endpointName) {
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;
return endpointInventoryRegister.getOrCreate(serviceId, endpointName, DetectPoint.SERVER);
}
}