2016-05-09 15 views
9

में त्रुटि पढ़ने में मुझे एक कैसंड्रा तालिका से डेटा पढ़ने की कोशिश कर रहे एक वीर त्रुटि हो रही है। मेरे पास डिफ़ॉल्ट सेटअप के साथ एक एकल नोड स्थापना है। ,कैसंड्रा

CREATE TABLE component_readings (
    park_id int, 
    component_id int, 
    date timestamp, 
    reading_1 decimal, 
    reading_2 decimal, 
    ... 
    PRIMARY KEY ((park_id), component_id, date) 
); 
कुछ component_id मूल्यों के साथ

यह काम करता है, और एक अन्य मूल्यों के साथ, यह विफल रहता है:

SELECT component_id, 
     reading_1, 
     reading_2, 
     reading_3, 
     date 
    FROM component_readings 
    WHERE park_id=2 
     AND component_id IN (479) 
     AND date >= '2016-04-09+0000' 
     AND date <= '2016-05-08+0000'; 

component_readings, एक साधारण तालिका है कोई क्लस्टरिंग शर्तों के साथ: इस क्वेरी मैं बना रहा हूं है।

cassandra.ReadFailure: code=1300 [Replica(s) failed to execute read] 
message="Operation failed - received 0 responses and 1 failures" 
info={'required_responses': 1, 'received_responses': 0, 'failures': 1, 
'consistency': 'LOCAL_ONE'} 

और कैसेंड्रा के system.log इस त्रुटि दिखाता है: यह त्रुटि मैं हो रही है

ERROR [SharedPool-Worker-1] 2016-05-09 15:33:58,872 StorageProxy.java:1818 - 
Scanned over 100001 tombstones during query 'SELECT * FROM xrem.component_readings 
WHERE park_id, component_id = 2, 479 AND date >= 2016-04-09 02:00+0200 AND date <= 
2016-05-08 02:00+0200 LIMIT 5000' (last scanned row partion key was ((2, 479), 
2016-05-04 17:30+0200)); query aborted 

अजीब बात यह है कि मैं त्रुटि केवल जब एक बाहरी से क्वेरी बनाने मिलता है कार्यक्रम (पायथन कैसंड्रा-कनेक्टर के माध्यम से)। अगर मैं इसे सीधे cqlsh खोल में बना देता हूं, तो यह पूरी तरह से काम करता है।

मेरी स्थापना कैसंड्रा 2.2 थी, लेकिन मैंने 3.5 तक अपग्रेड कर दिया है, और मुझे एक ही त्रुटि मिलती है।

+0

यदि आप अनुरोध में निरंतरता स्तर को कोरम सेट करते हैं तो क्या होता है? – Whitefret

+0

वही समस्या: 'cassandra.ReadFailure: code = 1300 [प्रतिकृतियां पढ़ने को निष्पादित करने में विफल रहीं] संदेश =" ऑपरेशन विफल - 0 प्रतिक्रियाएं और 1 विफलता प्राप्त हुई "जानकारी = {'प्राप्त_responses': 0, 'विफलताओं': 1, 'required_responses': 1, 'स्थिरता': 'QUORUM'} ' –

+0

आपके पास केवल एक प्रतिकृति है? – Whitefret

उत्तर

7

आप tombstone_failure_threshold से अधिक हैं। यह 100'000 के लिए डिफ़ॉल्ट है। आप या तो

  • वृद्धि cassandra.yaml में मूल्य या
  • अपने tombstones साफ कर सकते हैं

बाद alter अपनी मेज करना और 0 के लिए gc_grace_seconds सेट करने के लिए:

ALTER TABLE component_readings WITH GC_GRACE_SECONDS = 0; 

फिर नोडेटूल के माध्यम से एक कॉम्पैक्शन ट्रिगर करें। यह सभी मकबरे को बाहर कर देगा।

एक-नोड-क्लस्टर के अपने विशेष परिदृश्य में आप शून्य पर GC_GRACE_SECONDS छोड़ सकते हैं। लेकिन यदि आप करते हैं, तो इसे पूर्ववत करने के लिए ध्यान रखें यदि आप कभी भी एक से अधिक नोड का उपयोग करना चाहते हैं!

+1

लेकिन यदि समस्या कबूतर हैं, तो क्वेरी क्यों काम करती है यदि मैं इसे cqlsh से लॉन्च करता हूं और बाहरी प्रोग्राम से विफल रहता हूं? यह मुझे समझ में नहीं आता है (बीटीडब्ल्यू, समाधान काम करता है, लेकिन मुझे समझ में नहीं आता क्यों)। –

+1

@ CesarGarcíaTapia, हाँ, मैं मानता हूं कि यह अजीब है। वर्तमान में कुछ असंगत टॉम्बस्टोन गिनती/व्यवहार या अन्य 3.x शाखाओं को प्रभावित करने वाले कई टिकट खुले हैं। शायद आप इस तरह से प्रभावित हैं? आप एक बग टिकट बढ़ा सकते हैं। – Ralf