2010-03-21 52 views
3

当使用Perl模块,Net::Cassandra::Easy接口与卡桑德拉我用下面的代码在列家族Standard1来读取行row[123] colums col[123]为什么在使用Net :: Cassandra :: Easy和Cassandra 0.5x插入行时出现错误?

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.6.x如预期,但卡桑德拉下失败0.5.x.

看起来好像Net::Cassandra::Easy瞄准卡桑德拉0.6.x只。

升级到Cassandra 0.6.x可解决问题。

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)

Apparently that sub is being called from somewhere in the library where $value不是一个变量,而是一个常数标我的bug报告的作者

+0

嗨!感谢您的回答。二进制协议似乎已经在0.5和0.6之间变化,其中Net :: Cassandra :: Easy似乎只针对0.6。 – knorv 2010-03-22 17:37:07

1

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

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

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