Пространство ключей отбрасывания 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
учебный класс.