Perché ricevo un errore quando si inseriscono le righe con Net :: :: Cassandra facile e Cassandra 0.5x?
Domanda
Quando si utilizza il modulo di Perl Net :: :: Cassandra Facile per interfacciarsi con Cassandra io uso il seguente codice per leggere colonne col[123]
da file row[123]
nella colonna di Standard1
-family:
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']);
Questo funziona come previsto.
Tuttavia, quando si cerca di inserire la riga row1
con ..
$result = $cassandra->mutate(['row1'], family => 'Standard1', insertions => { "col1" => "Value to set." });
.. ricevo il messaggio di errore Can't use string ("0") as a SCALAR ref while "strict refs" in use at .../Net/GenThrift/Thrift/BinaryProtocol.pm line 376
.
Che cosa sto facendo di sbagliato?
Soluzione 2
Il codice funziona come previsto sotto Cassandra 0.6.x, ma non riesce sotto Cassandra 0.5.x.
Sembra come se Net::Cassandra::Easy
si rivolge solo Cassandra 0.6.x.
Aggiornamento a Cassandra 0.6.x risolve il problema.
Altri suggerimenti
Si presenta come un bug nella libreria:
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;
}
(da Net::GenThrift::Thrift::BinaryProtocol
)
A quanto pare che sotto viene chiamato da qualche parte nella libreria dove $value
non è una variabile, ma uno scalare costante. Mi piacerebbe segnalo l'insetto agli autori.
hmm, sembra più simile a un insetto vincolante Perl durante la manipolazione di eccezione a me.
Credo che 0,6 correzioni per voi perché l'interfaccia è davvero cambiato, in modo da 0.6 non sta sollevando più un'eccezione parsimonia, ma il bug in parsimonia rimane. Ho aperto un caso JIRA, vedremo che squadra parsimonia dice a questo proposito: