CallCredentials documentation suggests using asynchronous way of setting headers in case there is a blocking function in the code (e.g. a network call).
I would change this
@Override
public void applyRequestMetadata(final RequestInfo requestInfo, final Executor appExecutor,
final MetadataApplier applier) {
applier.apply(this.extraHeadersSupplier.get());
}
To something like in this example
@Override
public void applyRequestMetadata(final RequestInfo requestInfo, final Executor appExecutor,
final MetadataApplier applier) {
executor.execute(new Runnable() {
@Override
public void run() {
try {
applier.apply(this.extraHeadersSupplier.get());
} catch (Throwable t) {
applier.fail(Status.UNAUTHENTICATED.withCause(e));
}
}
});
}