net :: cassandra :: easyおよびcassandra 0.5xに行を挿入するときにエラーが発生するのはなぜですか?
質問
Perlモジュールを使用する場合 Net :: Cassandra :: Easy Cassandraとインターフェイスするには、次のコードを使用してColumsを読み取ります 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
.
私は何が間違っているのですか?
解決 2
このコードは、Cassandra 0.6.xで予想どおりに機能しますが、Cassandra 0.5.xでは失敗します。
まるでように見えます Net::Cassandra::Easy
Cassandra 0.6.xのみをターゲットにしています。
Cassandra 0.6.xにアップグレードすると、問題が解決します。
他のヒント
ライブラリのバグのように見えます:
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
変数ではなく、一定のスカラーです。著者にバグを報告します。
うーん、私にとって例外を処理するとき、それはPerlバインドバグのように見えます。
インターフェイスが実際に変更されたため、0.6がそれを修正するので、0.6はもはやThriftの例外を提起していませんが、Thriftのバグは残ります。私はJiraのケースを開きました、私たちはそれについてThriftチームが言っていることを見る: