使用Net :: Cassandra :: Easy和Cassandra 0.5x插入行时,为什么会出错?

时间:2010-03-21 21:26:26

标签: perl nosql cassandra thrift

使用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

我做错了什么?

3 个答案:

答案 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)

嗯,当我处理异常时,它看起来更像是一个Perl绑定错误。

我相信0.6会为你修复它,因为接口确实已经改变了,所以0.6不再引发一个thrift异常了,但是thrift中的bug仍然存在。我已经开了一个JIRA案例,我们会看到节俭团队说的话:

https://issues.apache.org/jira/browse/THRIFT-758