in apm-sniffer/apm-agent-core/src/main/java/org/apache/skywalking/apm/agent/core/profile/ProfileSnapshotSender.java [72:115]
public void send(List<TracingThreadSnapshot> buffer) {
if (status == GRPCChannelStatus.CONNECTED) {
try {
final GRPCStreamServiceStatus status = new GRPCStreamServiceStatus(false);
StreamObserver<ThreadSnapshot> snapshotStreamObserver = profileTaskStub.withDeadlineAfter(
GRPC_UPSTREAM_TIMEOUT, TimeUnit.SECONDS
).collectSnapshot(
new StreamObserver<Commands>() {
@Override
public void onNext(
Commands commands) {
}
@Override
public void onError(
Throwable throwable) {
status.finished();
if (LOGGER.isErrorEnable()) {
LOGGER.error(
throwable,
"Send profile segment snapshot to collector fail with a grpc internal exception."
);
}
ServiceManager.INSTANCE.findService(GRPCChannelManager.class).reportError(throwable);
}
@Override
public void onCompleted() {
status.finished();
}
}
);
for (TracingThreadSnapshot snapshot : buffer) {
final ThreadSnapshot transformSnapshot = snapshot.transform();
snapshotStreamObserver.onNext(transformSnapshot);
}
snapshotStreamObserver.onCompleted();
status.wait4Finish();
} catch (Throwable t) {
LOGGER.error(t, "Send profile segment snapshot to backend fail.");
}
}
}