【问题标题】:Why do I get an error when inserting rows with Net::Cassandra::Easy and Cassandra 0.5x?为什么在使用 Net::Cassandra::Easy 和 Cassandra 0.5x 插入行时会出错?
【发布时间】:2011-01-30 03:13:21
【问题描述】:

当使用 Perl 模块 Net::Cassandra::Easy 与 Cassandra 交互时,我使用以下代码从列族 row[123] 中的行 col[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

我做错了什么?

【问题讨论】:

    标签: perl nosql cassandra thrift


    【解决方案1】:

    它看起来像库中的一个错误:

    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;
    }
    

    (来自@987654321@

    显然,sub 是从库中的某个地方调用的,其中$value 不是变量,而是常量标量。我会向作者报告这个错误。

    【讨论】:

    • 嗨!感谢您的回答。二进制协议似乎在 0.5 和 0.6 之间发生了变化,其中 Net::Cassandra::Easy 似乎只针对 0.6。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      我相信 0.6 已经为你解决了这个问题,因为界面确实发生了变化,所以 0.6 不再引发 thrift 异常,但 thrift 中的错误仍然存​​在。我已经打开了一个 JIRA 案例,我们会看到那个thrift team 说的:

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

      【讨论】:

        猜你喜欢
        • 2021-06-29
        • 2016-03-24
        • 2020-08-10
        • 2014-12-22
        • 2015-08-16
        • 1970-01-01
        • 2012-09-07
        • 2012-09-03
        相关资源
        最近更新 更多