как удалить подготовленный оператор из кеша в cassandra 2.1

Я пытаюсь добавить поле в пользовательский тип в cassandra 2.1.2, используя драйвер nodejs из datastax. Я добавил поле, используя ALTER TYPE в cqlsh. Когда я пытаюсь добавить строку, содержащую udt со значением для нового поля, она вставляется с нулевым значением вместо значения, которое я указал. Я сильно подозреваю, что это связано с тем, как кластер кэширует подготовленный оператор. Поскольку я помню, как читал, что подготовленные операторы индексируются по хешу запроса, я попытался изменить некоторые пробелы в запросе, чтобы посмотреть, поможет ли это. Это действительно сработало, но только один раз. последующие вставки приводят к ошибке:

  message: 'Operation timed out - received only 0 responses.',
  info: 'Represents an error message from the server',
  code: 4352,
  consistencies: 10,
  received: 0,
  blockFor: 1,
  writeType: 'SIMPLE',
  coordinator: '127.0.0.1:9042',

и, казалось бы, новые строки не добавляются ... до тех пор, пока я не перезапущу cassandra, и в этот момент не только вставки, которые, как я думал, не увенчались успехом, появляются, но и последующие работают нормально. Это очень смущает, но, к счастью, я делал это только в тестовых экземплярах. Однако мне нужно внести это изменение в производство, и перезапуск кластера для добавления одного поля на самом деле не вариант. Есть ли лучший способ заставить кластер удалить кэшированный подготовленный оператор?


person Mike Atkins    schedule 08.03.2016    source источник


Ответы (1)


Я сильно подозреваю, что это связано с тем, как кластер кэширует подготовленный оператор.

Переведите журнал Cassandra в режим DEBUG, чтобы убедиться, что основной причиной является кеш подготовленных операторов. Если это так, создайте JIRA, чтобы команда разработчиков могла это исправить...

При желании вы также можете включить трассировку, чтобы увидеть, что происходит на стороне сервера.

Чтобы включить трассировку в cqlsh, просто введите TRACING ON

Чтобы включить трассировку с помощью драйвера Java, просто вызовите enableTracing() для объекта statement.

person doanduyhai    schedule 08.03.2016