3

当使用 Perl 模块Net::Cassandra::Easy与 Cassandra 交互时,我使用以下代码从column-family 中的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

我究竟做错了什么?

4

3 回答 3

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不是变量,而是常量标量。我会向作者报告这个错误。

于 2010-03-22T02:27:23.573 回答
3

该代码在 Cassandra 0.6.x 下按预期工作,但在 Cassandra 0.5.x 下失败。

似乎Net::Cassandra::Easy只针对 Cassandra 0.6.x。

升级到 Cassandra 0.6.x 解决了这个问题。

于 2010-03-22T16:07:44.110 回答
1

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

我相信 0.6 会为您修复它,因为界面确实发生了变化,因此 0.6 不再引发 thrift 异常,但 thrift 中的错误仍然存​​在。我已经打开了一个 JIRA 案例,我们会看到那个thrift team 说的:

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

于 2010-04-14T21:24:26.203 回答