googleapis / googleapis/google-api-java-client

DefaultCredentialProvider should detect GAE Standard

Đang mở
#1,231 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
priority: p4 type: feature request
Ngôn ngữ chính
Java
Star
1.5k
Fork
772
Merge trung bình
1 giờ 44 phút
Pull request đã merge (30 ngày)
1

Mô tả

This is the same issue as #1083, which has been fixed with #1109. However, the PR's changes but got reverted shortly after with #1123.

Now, I'm running into issues using the Cloud Endpoints framework on App Engine Standard with Java 8. I've registered a `ControlFilter` to publish API metrics to the Service Management API. This process uses the `DefaultCredentialProvider` to obtain credentials to authenticate against the Service Management API.
The flushing of these metrics will get executed in a different thread, so the error shown below (see stacktrace) is thrown. I would expect that no App Identity credential will be used in GAE Standard Java 8, instead the Metadata Server should be queried for a token (Compute Engine credential).

#### Environment details

- OS: App Engine Standard
- Java version: 8
- google-api-java-client version: 1.25.0

#### Steps to reproduce

1. Add `endpoints-management-control` library
2. Add a configured `ControlFilter` to the `EndpointsServlet`
3. Wait for the App Identity credential to be requested from memcache

#### Stacktrace

```
com.google.api.control.Client scheduleFlushes: scheduler com.google.api.control.Client@7d1da3d0 failed and exited (Client.java:304)
com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call memcache.Get in a thread that is neither the original request thread nor a thread created by ThreadManager at
com.google.apphosting.api.ApiProxy$CallNotFoundException.foreignThread(ApiProxy.java:844) at
com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:183) at
com.google.apphosting.api.ApiProxy$1.get(ApiProxy.java:180) at
com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:93) at
com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:28) at
com.google.appengine.api.memcache.MemcacheServiceImpl.get(MemcacheServiceImpl.java:51) at
com.google.appengine.api.appidentity.AppIdentityServiceImpl.getAccessToken(AppIdentityServiceImpl.java:302) at
com.google.api.client.googleapis.extensions.appengine.auth.oauth2.AppIdentityCredential.intercept(AppIdentityCredential.java:100) at
com.google.api.client.googleapis.extensions.appengine.auth.oauth2.AppIdentityCredential$AppEngineCredentialWrapper.intercept(AppIdentityCredential.java:245) at
com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859) at
com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) at
com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) at
com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) at
com.google.api.control.Client.flushAndScheduleReports(Client.java:397) at
com.google.api.control.Client.access$200(Client.java:61) at
com.google.api.control.Client$4.run(Client.java:416) at
com.google.api.control.Client$Scheduler.run(Client.java:765) at
com.google.api.control.Client$Scheduler.run(Client.java:775) at
com.google.api.control.Client.scheduleFlushes(Client.java:297) at
com.google.api.control.Client.access$000(Client.java:61) at
com.google.api.control.Client$2.run(Client.java:137) at
java.lang.Thread.run(Thread.java:745)

```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.