Не в состоянии проверить ответ Cassandra execcuteAsync - PullRequest
0 голосов
/ 21 сентября 2018

Вот мой пример исходного метода

public void insertIntoDb(SampleObject sample){
      ---------------------------------------
      ---------------------------------------
      code to prepare Insert statement
      ---------------------------------------
      ---------------------------------------
      session.executeAsync(insertStatement);
}

Я пишу тестовый метод для вышеуказанного метода

public void insertIntoDbTest(){
      --------------------------------------
      ---------------------------------------
      preparing SampleObject and checking the size of the corresponding table before insert
      ---------------------------------------
      ---------------------------------------
      obj.insertIntoDb(sampleObject)

      ---------------------------------------
      checking the size of the corresponding table after insert
      ---------------------------------------
}

Ожидание: после выполнения вышеуказанного метода теста, 1 дополнительная строка должна бытьдобавлен в таблицу в cassandra, т.е. если перед вставкой размер таблицы: 0, то после вставки Размер таблицы: 1

Фактически: получаю одинаковый размер, т.е. размер таблицы до и после равен только 0.

Если я заменю

session.executeAsync(insertStatement);

на

ResultSetFuture future = session.executeAsync(insertStatement);

, то добавьте нижеприведенное выражение

future.get()

тогда я получаю разницу в размере таблицы, т.е. 1

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

future.get () - это код блокировки, поэтому он обеспечивает выполнение асинхронного потока и возвращает ответ.В вашем случае он удостоверится, что вставит запись, поэтому вы получаете размер 1, когда утверждаете после вызова future.get (), и если вы не вызываете get (), то это будет асинхронно, возможно, у васдля вызова future.complete () в этом случае будет два сценария, один с исключением, а другой без него, и тип возвращаемого значения этого метода будет Future <> Object, с которым вам придется работать где-то выше трассировки вызова метода.

0 голосов
/ 21 сентября 2018

Я подозреваю, что вычисление (вставка) не завершено, когда вы впервые пытаетесь проверить размер таблицы.

Метод ResultSetFuture get() ожидает, если необходимо, чтобы вычисление завершилось, и затем извлекает его результат.

Метод executeAsync не ждет.

Возвращается, как только запрос был передан в базовый сетевой стек.В частности, возврат из этого метода не гарантирует, что запрос действителен или даже был передан в действующий узел.Любое исключение, относящееся к сбою запроса, будет выдано при доступе к ResultSetFuture.Источник: https://docs.datastax.com/en/drivers/java/2.1/com/datastax/driver/core/ResultSetFuture.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...