لماذا أحصل على خطأ عند إدخال صفوف مع Net :: Cassandra :: Easy و Cassandra 0.5x؟

StackOverflow https://stackoverflow.com/questions/2488783

  •  21-09-2019
  •  | 
  •  

سؤال

عند استخدام وحدة 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 ، وسنرى أن فريق التوفير يقول عن ذلك:

https://issues.apache.org/jira/browse/thrift-758

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top