2015-10-14 3 views
0

В настоящее время используется -Используйте уровень согласованности в Фантом-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) 
    } 

ответ

4

Прежде всего нет setValue метода внутри фантома и метод API вы используете пропускаете = в конце.

Правильная структура:

Table.insert .value(_.name, "test") .consistencyLevel_=(ConsistencyLevel.Quorum)

Как вы на StackOverflow, стек ошибок трассировки и конкретные детали того, что не работает, как правило, предпочтительнее «не работает».

+0

Спасибо за ответ! Я обновил вопрос с фактической ошибкой, которую я получаю, когда я использую '.consistenceyLevel _ = (ConsistencyLevel.QUORUM)' – Kal

+0

@Kal. Это означает, что логика фантомного управления версиями может быть неадекватно учтена в тот момент, когда Datastax перевернул их изменение в синтаксический анализ согласованности. Phantom должен прочитать версию Cassandra, а затем применить согласованность на основе этого, следовательно, проблему. Я еще раз посмотрю на это. Хотя это проверено и работает, '2.0.17', похоже, сломается. – flavian

+0

Привет @flavian - Еще раз спасибо. Я смог сузить его до того, что в основном 'USING' больше не является частью CQL3 api. Если я делаю это 'session.newSimpleStatement (insert query) .setConsistencyLevel', а затем выдает' session.execute (..) ', он работает.Эта команда выполняется в классе 'ExecutableQuery-def statement()', но, похоже, не существует переопределения 'def constencyLevel: Option [ConsistencyLevel]' – Kal

0

Я, наконец, понял, как правильно установить уровень согласованности с помощью phantom-dsl.

Используя заявление, вы можете сделать следующее:

statement.setConsistencyLevel(ConsistencyLevel.QUORUM) 

Кроме того, обратите внимание на тестовый проект я работаю, чтобы помочь парням, как вы с примерами использования фантомного-DSL:

https://github.com/thiagoandrade6/cassandra-phantom

 Смежные вопросы

  • Нет связанных вопросов^_^