Почему я получаю ошибку при вставке строк с 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 больше не поднимает благотворительное исключение, но ошибка в благотворительстве остается. Я открыл дело JIRA, мы увидим, что команда благотворительности говорит об этом: