RESOURCE_EXHAUSTED Нет доступных сеансов в пуле - PullRequest
0 голосов
/ 08 октября 2018

Я использую клиентскую библиотеку Spanner для Java и настраиваю клиент с помощью Spring.

Через некоторое время приложение начинает регистрировать следующее сообщение, но я не понимаю, почему.Параллельность приложения минимальна.Кажется, сеансы не используются повторно.Любые предложения?

RESOURCE_EXHAUSTED: сеанс недоступен в пуле.Максимальное количество сеансов в пуле можно переопределить, вызвав SessionPoolOptions # Builder # setMaxSessions.Клиент может быть заблокирован вместо сбоя, задав SessionPoolOptions # Builder # setBlockIfPoolExhausted.

@Configuration
public class SpannerConfig {

    @Value("${datasource.instanceId}")
    private String instance;

    @Value("${datasource.databaseId}")
    private String database;

    @Bean
    public Spanner spannerService() throws IOException {

        SessionPoolOptions sessionPoolOptions = SessionPoolOptions.newBuilder()
                .setFailIfPoolExhausted()
                .setMinSessions(5)
                .setMaxSessions(100)
                .build();

        SpannerOptions options = SpannerOptions.newBuilder()
                .setSessionPoolOption(sessionPoolOptions)
                .build();

        return options.getService();
    }


    @Bean
    public DatabaseClient spannerClient(Spanner spannerService) {
        DatabaseId databaseId = DatabaseId.of(spannerService.getOptions().getProjectId(), instance, database);
        return spannerService.getDatabaseClient(databaseId);
    }
}

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Похоже, у вас утечка сеанса.Убедитесь, что вы используете выражение try-with-resources вокруг любых вызовов DatabaseClient.singleUse * или DatabaseClient.ReadOnlyTransaction, чтобы обеспечить закрытие Transaction или ResultSet, позволяя вернуть соответствующий сеанс в пул сеансов.

0 голосов
/ 08 октября 2018

вы устанавливаете .setMaxSessions(100), что явно превышает предопределенный предел.

в принципе, когда один клиент уже выделил 100, следующий клиент может выделить только 0.

документация для сеансов гласит:

Примечание : клиентские библиотеки Cloud Spanner автоматически управляют сеансами.

... после прочтения исходного кода я уверен, что сообщение об ошибке выдается только при использовании .setFailIfPoolExhausted().что он сообщает об исчерпанном пуле, возможно, это ошибка, если мониторинг StackDriver говорит об обратном.

...