我正在尝试使用datastax中的nodejs驱动程序向cassandra 2.1.2中的用户定义类型添加字段。我在cqlsh中使用ALTER TYPE
添加了该字段。当我尝试添加包含udt的行以及新字段的值时,它将插入null值,而不是我提供的值。我强烈怀疑这与集群缓存预准备语句的方式有关。因为我记得读过准备好的语句是通过查询的散列索引的,所以我尝试更改查询中的一些空格以查看它是否有帮助。这实际上似乎有效,但只有一次。后续插入会导致错误:
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,此时不仅会出现我认为失败的插入,而且后续的工作正常。这非常令人不安,但幸运的是我只在测试实例中完成了这项工作。我确实需要在生产中进行此更改,并且重新启动群集以添加单个字段实际上不是一个选项。有没有更好的方法让集群驱逐缓存的预准备语句?
答案 0 :(得分:0)
我强烈怀疑这与集群缓存预准备语句的方式有关。
将Cassandra登录到DEBUG模式以确保准备好的语句缓存是根本原因。如果是,请创建一个JIRA,以便开发团队可以修复它......
您也可以选择启用跟踪以查看服务器端的内容
要在 cqlsh 中启用跟踪,只需输入TRACING ON
要使用 Java驱动程序启用跟踪,只需在enableTracing()
对象上调用statement