opentelemetry-java-instrume.../instrumentation/akka-actor-2.5/src/test/scala/AkkaAsyncChild.java

76 lines
1.6 KiB
Java

/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
import akka.dispatch.forkjoin.ForkJoinTask;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.trace.Tracer;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
public class AkkaAsyncChild extends ForkJoinTask implements Runnable, Callable {
private static final Tracer tracer = OpenTelemetry.getGlobalTracer("io.opentelemetry.auto");
private final AtomicBoolean blockThread;
private final boolean doTraceableWork;
private final CountDownLatch latch = new CountDownLatch(1);
public AkkaAsyncChild() {
this(true, false);
}
@Override
public Object getRawResult() {
return null;
}
@Override
protected void setRawResult(Object value) {}
@Override
protected boolean exec() {
runImpl();
return true;
}
public AkkaAsyncChild(boolean doTraceableWork, boolean blockThread) {
this.doTraceableWork = doTraceableWork;
this.blockThread = new AtomicBoolean(blockThread);
}
public void unblock() {
blockThread.set(false);
}
@Override
public void run() {
runImpl();
}
@Override
public Object call() {
runImpl();
return null;
}
public void waitForCompletion() throws InterruptedException {
latch.await();
}
private void runImpl() {
while (blockThread.get()) {
// busy-wait to block thread
}
if (doTraceableWork) {
asyncChild();
}
latch.countDown();
}
private void asyncChild() {
tracer.spanBuilder("asyncChild").startSpan().end();
}
}