Google App Engine Java 11 - 不清楚的错误 com.google.apphosting.api.ApiProxy$CallNotFoundException
Google App Engine Java 11 - unclear errors com.google.apphosting.api.ApiProxy$CallNotFoundException
我们目前正在使用捆绑服务 (https://cloud.google.com/blog/products/serverless/support-for-app-engine-services-in-second-generation-runtimes) 将 App Engine 从 Java 8 迁移到 Java 11。
我们已经做到了,应用程序似乎 运行 符合预期 - BE、FE 和 Datastore 似乎都可以在我们的暂存 GCP 项目中使用。
但是,以下错误每 10 秒就会出现在我们的日志中:
Failed to query GCE metadata service
然后
java.io.IOException: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:70)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:609)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:488)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.readResponse(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.queryMetadataAttribute(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.getProjectId(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GcpHubClient.registerDebuggee(Unknown Source)
Caused by: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch 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.makeSyncCall(ApiProxy.java:117)
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:54)
... 6 more
编辑:
云调试器显示“调试器找不到应用程序的调试目标”。尽管这些版本仍然依赖于 Java 8 工作,但迁移正确设置调试器缺少哪些额外步骤?由于我们使用的是 App Engine 标准环境,因此默认情况下应启用它 (https://cloud.google.com/debugger/docs/setup/java#gae-standard)。
编辑 2:
看起来这可能是一个 Google Cloud Debugger 错误:
https://github.com/GoogleCloudPlatform/cloud-debug-java/issues/18
根据 App Engine documentation regarding issuing HTTP requests,如果您使用 URL Fetch,它会导致对云客户端库的请求(其中包括 Google Cloud Debugger Client for Java) 失败。
在使用捆绑服务时,我们仍在使用 appengine-web.xml
文件。
我们在那里有以下行:
<url-stream-handler>urlfetch</url-stream-handler>
删除该行为我们解决了问题。
我们目前正在使用捆绑服务 (https://cloud.google.com/blog/products/serverless/support-for-app-engine-services-in-second-generation-runtimes) 将 App Engine 从 Java 8 迁移到 Java 11。
我们已经做到了,应用程序似乎 运行 符合预期 - BE、FE 和 Datastore 似乎都可以在我们的暂存 GCP 项目中使用。
但是,以下错误每 10 秒就会出现在我们的日志中:
Failed to query GCE metadata service
然后
java.io.IOException: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:70)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:609)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:488)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.readResponse(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.queryMetadataAttribute(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GceMetadataQuery.getProjectId(Unknown Source)
at com.google.devtools.cdbg.debuglets.java.GcpHubClient.registerDebuggee(Unknown Source)
Caused by: com.google.apphosting.api.ApiProxy$CallNotFoundException: Can't make API call urlfetch.Fetch 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.makeSyncCall(ApiProxy.java:117)
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:54)
... 6 more
编辑: 云调试器显示“调试器找不到应用程序的调试目标”。尽管这些版本仍然依赖于 Java 8 工作,但迁移正确设置调试器缺少哪些额外步骤?由于我们使用的是 App Engine 标准环境,因此默认情况下应启用它 (https://cloud.google.com/debugger/docs/setup/java#gae-standard)。
编辑 2: 看起来这可能是一个 Google Cloud Debugger 错误: https://github.com/GoogleCloudPlatform/cloud-debug-java/issues/18
根据 App Engine documentation regarding issuing HTTP requests,如果您使用 URL Fetch,它会导致对云客户端库的请求(其中包括 Google Cloud Debugger Client for Java) 失败。
在使用捆绑服务时,我们仍在使用 appengine-web.xml
文件。
我们在那里有以下行:
<url-stream-handler>urlfetch</url-stream-handler>
删除该行为我们解决了问题。