لماذا أحصل على خطأ عند إدخال صفوف مع Net :: Cassandra :: Easy و Cassandra 0.5x؟
سؤال
عند استخدام وحدة Perl Net :: 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
يعمل الرمز كما هو متوقع بموجب كاساندرا 0.6.x ، لكنه فشل تحت كاساندرا 0.5.x.
يبدو كما لو Net::Cassandra::Easy
يستهدف كاساندرا 0.6.x فقط.
الترقية إلى كاساندرا 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
)
على ما يبدو ، يتم استدعاء Sub من مكان ما في المكتبة حيث $value
ليس متغيرًا ، ولكنه قياسي ثابت. أود الإبلاغ عن الخطأ للمؤلفين.
حسنًا ، يبدو الأمر أشبه بوجود خلل بيرل عند التعامل مع الاستثناء لي.
أعتقد أن 0.6 يصلح لك لأن الواجهة قد تغيرت بالفعل ، لذا فإن 0.6 لم يعد يرفع استثناء التوفير بعد الآن ، لكن الخلل في التوفير يبقى. لقد فتحت قضية Jira ، وسنرى أن فريق التوفير يقول عن ذلك: