Warum bekomme ich einen Fehler beim Einfügen von Zeilen mit Net :: Cassandra :: Easy und Cassandra 0.5X?
Frage
Bei Verwendung des Perl -Moduls Netz :: Cassandra :: Easy Zum Schnittstellen mit Cassandra verwende ich den folgenden Code, um Colums zu lesen col[123]
Aus Reihen row[123]
in der Säulenfamilie 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']);
Dies funktioniert wie erwartet.
Wenn Sie jedoch versuchen, die Zeile einzufügen row1
mit ..
$result = $cassandra->mutate(['row1'], family => 'Standard1', insertions => { "col1" => "Value to set." });
.. Ich erhalte die Fehlermeldung Can't use string ("0") as a SCALAR ref while "strict refs" in use at .../Net/GenThrift/Thrift/BinaryProtocol.pm line 376
.
Was mache ich falsch?
Lösung 2
Der Code funktioniert wie erwartet unter Cassandra 0.6.x, fällt jedoch unter Cassandra 0.5.x.
Es scheint, als ob Net::Cassandra::Easy
Zieht nur auf Cassandra 0.6.x.
Upgrade auf Cassandra 0.6.x löst das Problem.
Andere Tipps
Es sieht aus wie ein Fehler in der Bibliothek:
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;
}
(aus Netz :: Genthrift :: Thrift :: BinaryProtocol
)
Anscheinend wird dieses Sub von irgendwo in der Bibliothek angerufen, wo $value
ist keine Variable, sondern ein konstanter Skalar. Ich würde den Fehler den Autoren melden.
Hmm, es sieht eher aus wie ein Perl -Bindungsfehler, wenn ich ausnahmslos für mich abwickelte.
Ich glaube, dass 0,6 es für Sie behebt, weil sich die Schnittstelle tatsächlich geändert hat, sodass 0,6 keine Sparsamkeitsausnahme mehr erhöht, aber der Fehler in Sparsamkeit bleibt bestehen. Ich habe einen Jira -Fall eröffnet, wir werden sehen, dass das Secondhand -Team darüber sagt: