3

PerlモジュールNet::Cassandra :: 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

私は何が間違っているのですか?

4

3 に答える 3

3

コードはCassandra0.6.xでは期待どおりに機能しますが、Cassandra0.5.xでは失敗します。

Net::Cassandra::EasyCassandra0.6.xのみをターゲットにしているように見えます。

Cassandra 0.6.xにアップグレードすると、問題が解決します。

于 2010-03-22T16:07:44.110 に答える
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

$valueどうやら、そのsubは、変数ではなく定数スカラーであるライブラリのどこかから呼び出されているようです。バグを作者に報告します。

于 2010-03-22T02:27:23.573 に答える
1

うーん、私にとって例外を処理するとき、それはPerlバインディングのバグのように見えます。

インターフェイスが実際に変更されたため、0.6で修正されたと思います。したがって、0.6はthrift例外を発生させなくなりましたが、thriftのバグは残っています。JIRAケースを開きましたが、倹約チームがそれについて次のように言っていることがわかります。

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

于 2010-04-14T21:24:26.203 に答える