Ошибка подключения к облачному ключу: java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: UNAVAILABLE - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь получить список баз данных для моего экземпляра в облачном ключе

Spanner spannerClient=SpannerOptions.newBuilder().build().getService();
InstanceAdminClient instanceAdminClient = spannerClient.getInstanceAdminClient();
            Page<Database> databasePage = instanceAdminClient.getInstance(instanceID).listDatabases();
            for (Database database : databasePage.getValues()) {
                String databaseName = database.getId().getDatabase();
                log.info("Database-->"+databaseName);
            }

Код отлично работает в моей локальной среде, но блокируется, когда я пытаюсь запустить тот же код в контейнере пряжи. Я получил ниже журнал от threaddump

Thread 10275: (state = BLOCKED)
 - sun.misc.Unsafe.park(boolean, long) @bci=0 (Compiled frame; information may be imprecise)
 - java.util.concurrent.locks.LockSupport.parkNanos(java.lang.Object, long) @bci=20, line=215 (Compiled frame)
 - java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(int, long) @bci=139, line=1037 (Interpreted frame)
 - java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(int, long) @bci=25, line=1328 (Interpreted frame)
 - java.util.concurrent.CountDownLatch.await(long, java.util.concurrent.TimeUnit) @bci=10, line=277 (Interpreted frame)
 - com.google.cloud.spanner.SpannerImpl.backoffSleep(io.grpc.Context, long) @bci=67, line=200 (Interpreted frame)
 - com.google.cloud.spanner.SpannerImpl.backoffSleep(io.grpc.Context, com.shaded.scanner.google.api.client.util.BackOff) @bci=5, line=170 (Interpreted frame)
 - com.google.cloud.spanner.SpannerImpl.runWithRetries(java.util.concurrent.Callable) @bci=105, line=238 (Interpreted frame)
 - com.google.cloud.spanner.SpannerImpl$InstanceAdminClientImpl.getInstance(java.lang.String) @bci=25, line=660 (Interpreted frame)
 - com.test.spannerscanner.utils.GoogleSpannerManager.execute() @bci=289, line=93 (Interpreted frame)

Я не могу понять, почему соединение блокируется в контейнере для пряжи, но работает нормально в локальной сети. После дальнейшей отладки я обнаружил, что код блокируется из-за исключения SpannerException в методе runWithRetries в классе SpannerImpl. Код перехватывает исключение и перезапускается после некоторого отката и, таким образом, блокируется. SpannerException имеет следующее сообщение:

java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

Любая помощь или предложения о том, почему это исключение выбрасывается в контейнер для пряжи, очень ценится. Я использую облачный гаечный ключ версии 0.52-бета.

...