使用Perl模块Net::Cassandra::Easy与Cassandra连接时,我使用以下代码从列系列col[123]
中的行row[123]
中读取列Standard1
:
my $cassandra = Net::Cassandra::Easy->new(keyspace => 'Keyspace1', server => 'localhost');
$cassandra->connect();
my $result = $cassandra->get(['row1', 'row2', 'row3'], family => 'Standard1', byname => ['col1', 'col2', 'col3']);
这可以按预期工作。
但是,在尝试使用..
插入行row1
时
$result = $cassandra->mutate(['row1'], family => 'Standard1', insertions => { "col1" => "Value to set." });
..我收到错误消息Can't use string ("0") as a SCALAR ref while "strict refs" in use at .../Net/GenThrift/Thrift/BinaryProtocol.pm line 376
。
我做错了什么?
答案 0 :(得分:3)
它看起来像是库中的一个错误:
sub readByte
{
my $self = shift;
my $value = shift;
my $data = $self->{trans}->readAll(1);
my @arr = unpack('c', $data);
$$value = $arr[0]; # <~ line 376
return 1;
}
(来自Net::GenThrift::Thrift::BinaryProtocol
)
显然,从库中的某个地方调用sub,其中$value
不是变量,而是常量标量。我会向作者报告这个错误。
答案 1 :(得分:3)
代码在Cassandra 0.6.x下按预期工作,但在Cassandra 0.5.x下失败。
好像Net::Cassandra::Easy
仅针对Cassandra 0.6.x.
升级到Cassandra 0.6.x解决了这个问题。
答案 2 :(得分:1)
我相信0.6会为你修复它,因为接口确实已经改变了,所以0.6不再引发一个thrift异常了,但是thrift中的bug仍然存在。我已经开了一个JIRA案例,我们会看到节俭团队说的话: