Пространство ключей отбрасывания Cassandra создает исключение timeoutexception до истечения заданного времени ожидания для executeAsync

Я получаю кассандру OperationTimedOutException пока сбрасываешь пробел Хотя я дал 60000 миллисекунд (1 минута) timeOut блокировать, пока я не получу Future объект из Кассандры executeAsync, Но сразу бросает timeoutexception не дожидаясь полной 1 минуты.

Вот как я удаляю пространство ключей с помощью Java -

List<KeyspaceMetadata> keyspaceMetadataList = cluster.getMetadata().getKeyspaces();
    for(KeyspaceMetadata ks: keyspaceMetadataList)
    {
         if (ks.getName().startsWith("system"))
         {
             continue;
         }
         try
        {
            session.executeAsync("drop keyspace " + ks.getName()).get(1000 * 60, TimeUnit.MILLISECONDS);
            log.info("Dropped Keyspace: " + ks.getName());
        }
        catch( InterruptedException | ExecutionException | TimeoutException e )
        {
            log.error("Something went wrong: " + e);
        }

    }

Вы можете увидеть нижеприведенную строку, где я принудительно приказывал звонку подождать не менее 60 секунд, но даже до этого я получил TimeOutException,

session.executeAsync("drop keyspace " + ks.getName()).get(1000 * 60, TimeUnit.MILLISECONDS);

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

1 ответ

Решение

Лучше не делать несколько модификаций одновременно (как вы делаете через executeAsync). При изменении схемы в распределенной системе изменения схемы должны быть согласованы, и все узлы должны иметь соглашение между ними.

Я предлагаю изменить ваш код для выполнения команд через session.execute вместо асинхронной версии. И проверьте согласование схемы, когда все операции выполнены - в Metadata учебный класс.

Другие вопросы по тегам