Я пытаюсь получить список баз данных для моего экземпляра в облачном ключе
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-бета.