Движок приложений Google Java 11 — неясные ошибки com.google.apphosting.api.ApiProxy$CallNotFoundException

# #google-app-engine #google-cloud-platform #java-11 #google-cloud-debugger

Вопрос:

В настоящее время мы переносим наш движок приложений с Java 8 на Java 11 с помощью встроенных сервисов(https://cloud.google.com/blog/products/serverless/support-for-app-engine-services-in-second-generation-runtimes).

Мы дошли до того, что приложение, похоже, работает так, как ожидалось — похоже, что все приложения, FE и хранилище данных работают в нашем промежуточном проекте 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: https://github.com/GoogleCloudPlatform/cloud-debug-java/issues/18

Комментарии:

1. Пожалуйста, попробуйте просмотреть отладчик Stackdriver, я думаю, что проблема может быть связана с ним.

2. Привет @vpriesner, у вас была возможность просмотреть свои журналы Stackdriver?

3. Привет @vpriesner. Есть какие-нибудь новости?

Ответ №1:

В соответствии с документацией App Engine, касающейся выдачи HTTP-запросов, если вы используете выборку URL-адресов, это приведет к сбою запросов к облачным клиентским библиотекам (включая клиент Google Cloud Debugger для Java).

Поскольку мы используем входящие в комплект услуги, мы все еще используем appengine-web.xml файл.

У нас там была следующая строка:

<url-stream-handler>urlfetch</url-stream-handler>

Удаление этой строки устранило проблему для нас.