Pourquoi ai-je une erreur lors de l'insertion des lignes avec Net :: Cassandra :: Simple et Cassandra 0,5x?
Question
Lorsque vous utilisez le module Perl Net :: Cassandra :: Facile pour l'interface avec Cassandra j'utilise le code suivant pour lire les lignes de col[123]
colums row[123]
dans la Standard1
colonne familiale:
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']);
Cela fonctionne comme prévu.
Cependant, lorsque vous essayez d'insérer une ligne row1
avec ..
$result = $cassandra->mutate(['row1'], family => 'Standard1', insertions => { "col1" => "Value to set." });
.. Je reçois le message d'erreur Can't use string ("0") as a SCALAR ref while "strict refs" in use at .../Net/GenThrift/Thrift/BinaryProtocol.pm line 376
.
Qu'est-ce que je fais mal?
La solution 2
Le code fonctionne comme prévu sous Cassandra 0.6.x, mais échoue sous Cassandra 0.5.x.
Il semble que Net::Cassandra::Easy
vise Cassandra 0.6.x seulement.
Mise à niveau vers Cassandra 0.6.x résout le problème.
Autres conseils
Il ressemble à un bug dans la bibliothèque:
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;
}
(de Net::GenThrift::Thrift::BinaryProtocol
)
Il semble que sous est appelé à partir de quelque part dans la bibliothèque où $value
est pas une variable, mais un scalaire constant. Je signaler le bug aux auteurs.
hmm, il ressemble plus à un bug de liaison Perl lors de la manipulation exception pour moi.
Je crois que 0,6 corrige ce problème pour vous parce que l'interface a bien changé, 0,6 ne soulève pas une exception Thrift plus, mais le bogue dans Thrift reste. J'ai ouvert un cas JIRA, nous verrons que l'équipe Thrift dit à ce sujet: