2015-09-26 2 views
1

Я СоздалDatastax Cassandra Вставка с ifNotExists

пространство ключей
CREATE KEYSPACE xyz WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1': '1', 'datacenter1': '1'} AND durable_writes = true; 

У меня есть только два узла и оба DC1, а также datacenter1 узлов вверх. Теперь, когда я пытаюсь выполнить серию операторов вставки

Insert insert = QueryBuilder.insertInto(keyspace, table).ifNotExists() 
.value("home", fieldsToUpdate.getHome()) 
.value("subCategoryName", fieldsToUpdate.getSubCategoryName()) 
.value("id", fieldsToUpdate.getId()); 
batch.add(insert); 
session.execute(batch); 

я получаю исключение, говоря

Caused by: com.datastax.driver.core.exceptions.UnavailableException: Not enough replica available for query at consistency QUORUM (2 required but only 1 alive) 

Когда я удалить .ifNotExists() пункт партии выполняется без каких-либо исключений.

Использование драйвера datastax версии 2.1.7.

Что я должен сделать, чтобы решить проблему?

Edit: Nodetool Статус

abhisheks-MacBook-Pro:bin abhishekagarwal$ sudo ./nodetool status 
objc[3398]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. 
Datacenter: datacenter1 
======================= 
Status=Up/Down 
|/ State=Normal/Leaving/Joining/Moving 
-- Address  Load  Tokens Owns Host ID        Rack 
UN 192.168.1.111 19.81 MB 256  ?  f2651124-abdf-486a-a6d7-53327bc2d98c RAC1 
UN 192.168.1.5 5.22 MB 256  ?  d0c72798-1186-4bcb-9e0f-634964a3d083 rack1 

Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless 
+0

Не могли бы вы показать выход «статус nodetool». Это поможет диагностировать проблему. –

ответ

2

Проблема заключается в том как вы определили пространство ключей, чтобы сохранить одну реплику в «datacenter1» и одну реплику в центрах обработки данных «DC1». Но у вас нет центра обработки данных под названием «DC1», поэтому невозможно получить кворум реплик в двух центрах обработки данных для предложения if not exists.

Таким образом, вы должны определили пространство ключей, как это:

CREATE KEYSPACE xyz WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '1'} 
Смежные вопросы