В настоящее время используется -Используйте уровень согласованности в Фантом-DSL и Кассандрой
cqlsh> show version
[cqlsh 4.1.1 | Cassandra 2.0.17 | CQL spec 3.1.1 | Thrift protocol 19.39.0]
Использование фантомного-DSL 1.12.2, Scala 2,10 ..
Я не могу понять, как установить уровень согласованности по запросам.
Есть предопределенные функции insert()
, select()
как часть CassandraTable
.. Как передать уровень согласованности им?
insert.value(....).consistencyLevel_=(ConsistencyLevel.QUORUM)
не работает, и завершается с ошибкой (возможно, потому, что это присоединяет «ИСПОЛЬЗОВАНИЕ консистенции КВОРУМА» в конце запроса). Вот фактическое исключение я получаю
com.datastax.driver.core.exceptions.SyntaxError: line 1:424 no viable alternative at input 'CONSISTENCY'
at com.datastax.driver.core.Responses$Error.asException(Responses.java:122) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:120) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:186) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler.access$2300(RequestHandler.java:45) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:754) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:576) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
Я вижу в документации и обсуждении this тягового запроса, что я мог бы сделать setConsistencyLevel(ConsistencyLevel.QUORUM)
на SimpleStatement, но я предпочел бы не переписать все различные операторы вставки.
UPDATE
Просто, чтобы закрыть петлю по этому вопросу. Я работал вокруг этого путем создания пользовательского InsertQuery
, а затем с помощью того, что вместо одного представленной final def insert
в CassandraTable
def qinsert()(implicit keySpace: KeySpace) = {
val table = this.asInstanceOf[T]
new InsertQuery[T, M, Unspecified](table, CQLQuery("INSERT into keyspace.tablename", consistencyLevel = ConsistencyLevel.QUORUM)
}
Спасибо за ответ! Я обновил вопрос с фактической ошибкой, которую я получаю, когда я использую '.consistenceyLevel _ = (ConsistencyLevel.QUORUM)' – Kal
@Kal. Это означает, что логика фантомного управления версиями может быть неадекватно учтена в тот момент, когда Datastax перевернул их изменение в синтаксический анализ согласованности. Phantom должен прочитать версию Cassandra, а затем применить согласованность на основе этого, следовательно, проблему. Я еще раз посмотрю на это. Хотя это проверено и работает, '2.0.17', похоже, сломается. – flavian
Привет @flavian - Еще раз спасибо. Я смог сузить его до того, что в основном 'USING' больше не является частью CQL3 api. Если я делаю это 'session.newSimpleStatement (insert query) .setConsistencyLevel', а затем выдает' session.execute (..) ', он работает.Эта команда выполняется в классе 'ExecutableQuery-def statement()', но, похоже, не существует переопределения 'def constencyLevel: Option [ConsistencyLevel]' – Kal