grpc / grpc/grpc-java

Set context in executor when calling Credentials.getRequestMetadata

オープン
#5,334 コメント 4 件 リアクション 0 件 担当者 1 名 @zhangkun83 が担当を希望しています GitHub で見る
主要言語
Java
スター
12.1k
フォーク
4k
平均マージ
2日 17時間
マージ済み PR(30日)
37

説明

### What version of gRPC are you using?

1.18.0

### What did you expect to see?

I've written a custom implementation of a `com.google.auth.Credentials` class which retrieves tokens from etcd (using their v3 gRPC api). I'm attempting to trace these method calls by using the Context to link work done on separate threads. I've discovered that the Context is not available in my Credentials class (specifically when `getRequestMetadata` is called using an executor).

I've been able to work around this temporarily by changing:

```java
kvStub.withDeadlineAfter(5, TimeUnit.SECONDS)
.withCallCredentials(creds)
.range(rangeRequest, object : StreamObserver {
```

to:

```java
kvStub.withDeadlineAfter(5, TimeUnit.SECONDS)
.withCallCredentials(creds)
.withExecutor(Context.currentContextExecutor(Executors.newCachedThreadPool()))
.range(rangeRequest, object : StreamObserver {
```

Is it expected that the Context be available for use in a custom Credentials implementation? By doing so, this might also help to close some other open issues (#4929) and also allow deadline propagation to work properly when authenticating against a gRPC api.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。