2012-08-07 9 views
7

शुरू करते समय सहेजे गए कैश और सिस्टम टेबल को पढ़ने में त्रुटि कैसंड्रा डेमन चलाते समय मैं निम्नलिखित अपवाद में आ रहा हूं। मैं 1.2 ट्रंक से चल रहा हूँ।कैसंड्रा

WARN 14:47:51,038 error reading saved cache /home/manuzhang/cassandra/saved_caches/system-local-KeyCache-b.db 
java.lang.NullPointerException 
    at org.apache.cassandra.cache.AutoSavingCache.loadSaved(AutoSavingCache.java:141) 
    at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:237) 
    at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:340) 
    at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:312) 
    at org.apache.cassandra.db.Table.initCf(Table.java:332) 
    at org.apache.cassandra.db.Table.<init>(Table.java:265) 
    at org.apache.cassandra.db.Table.open(Table.java:110) 
    at org.apache.cassandra.db.Table.open(Table.java:88) 
    at org.apache.cassandra.db.SystemTable.checkHealth(SystemTable.java:284) 
    at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:168) 
    at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:318) 
    at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:361) 

यहाँ जहां कैश सहेजे जाते हैं है:

[email protected]:~/cassandra/saved_caches$ ls -l 
total 12 
-rw-rw-r-- 1 manuzhang manuzhang 156 Aug 7 13:09 system-local-KeyCache-b.db 
-rw-rw-r-- 1 manuzhang manuzhang 60 Aug 7 13:09 system-schema_columnfamilies-KeyCache-b.db 
-rw-rw-r-- 1 manuzhang manuzhang 60 Aug 7 13:09 system-schema_columns-KeyCache-b.db 

इसके अलावा, प्रणाली तालिका फ़ाइलें लोड करने में विफल।

ERROR 17:03:16,637 Fatal exception during initialization 
org.apache.cassandra.config.ConfigurationException: Found system table files, but they couldn't be loaded! 
at org.apache.cassandra.db.SystemTable.checkHealth(SystemTable.java:303) 
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:201) 
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:349) 
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:392) 

अब मैं (मैं बाद में सभी फाइलों को साफ) कैसेंड्रा के हर तीन रन पर लोड हो रहा है प्रणाली तालिका विफलता प्रजनन करने में सक्षम हूँ। अपवाद यहां फेंक दिया गया है:

/** 
* One of three things will happen if you try to read the system table: 
* 1. files are present and you can read them: great 
* 2. no files are there: great (new node is assumed) 
* 3. files are present but you can't read them: bad 
* @throws ConfigurationException 
*/ 
public static void checkHealth() throws ConfigurationException 
{ 
    Table table; 
    try 
    { 
     table = Table.open(Table.SYSTEM_TABLE); 
    } 
    catch (AssertionError err) 
    { 
     // this happens when a user switches from OPP to RP. 
     ConfigurationException ex = new ConfigurationException("Could not read system table!"); 
     ex.initCause(err); 
     throw ex; 
    } 
    ColumnFamilyStore cfs = table.getColumnFamilyStore(LOCAL_CF); 

    String req = "SELECT cluster_name FROM system.%s WHERE key='%s'"; 
    UntypedResultSet result = processInternal(String.format(req, LOCAL_CF, LOCAL_KEY)); 

    if (result.isEmpty() || !result.one().has("cluster_name")) 
    { 
     // this is a brand new node 
     if (!cfs.getSSTables().isEmpty()) 
      throw new ConfigurationException("Found system table files, but they couldn't be loaded!"); 

     // no system files. this is a new node. 
     req = "INSERT INTO system.%s (key, cluster_name) VALUES ('%s', '%s')"; 
     processInternal(String.format(req, LOCAL_CF, LOCAL_KEY, DatabaseDescriptor.getClusterName())); 
     return; 
    } 

    String savedClusterName = result.one().getString("cluster_name"); 
    if (!DatabaseDescriptor.getClusterName().equals(savedClusterName)) 
     throw new ConfigurationException("Saved cluster name " + savedClusterName + " != configured name " + DatabaseDescriptor.getClusterName()); 
} 

तीन रन टिप्पणी में तीन स्थितियों के अनुरूप बिल्कुल मेल खाते हैं।

पहले रन में "कोई फाइल नहीं है" क्योंकि यह एक नया नोड है।

दूसरे भाग में, "फाइलें हैं और आप उन्हें पढ़ सकते हैं"।

तीसरे भाग में, "फाइलें हैं लेकिन आप उन्हें नहीं पढ़ सकते हैं" और मैंने जांच की है कि result.isEmpty() और result.one.has("cluster_name") वापसी false पर लौटें।

दरअसल, मैं अपवाद के साथ उलझन में हूं "लोड नहीं किया जा सका"। इसका क्या मतलब है? मुझे नहीं लगता कि यह एक फाइल सिस्टम अनुमति मुद्दा है क्योंकि वर्तमान उपयोगकर्ता को आर/डब्ल्यू अनुमतियां दी गई हैं।

उपरोक्त समस्याएं सभी संबंधित फाइलों को हटाने के बाद दूर जाती हैं लेकिन मैं इसे हर बार कैसंद्रा चलाने के लिए नहीं करना चाहता हूं।

यह मुझे थोड़ी देर के लिए परेशान कर रहा है।

एक असंबंधित मुद्दा यह है कि मुझे नहीं लगता कि कैसंड्रा @ स्टैक ओवरफ्लो को समुदाय से पर्याप्त ध्यान मिला है। क्या आप सहमत हैं?

किसी भी विचार या सुझाव की सराहना की जाएगी।

धन्यवाद।

+1

आप कैसंड्रा ट्रंक क्यों चला रहे हैं, और जारी संस्करण नहीं? – sbridges

+0

@sbridges यदि आप कैसंड्रा विकी के बाद कोडबेस डाउनलोड करते हैं, तो आपको यही मिलता है; और मैं वर्चुअल नोड्स – manuzhang

+0

जैसी नई चीज़ों के बारे में भी पढ़ सकता हूं, क्या आप अपनी समस्या को आधिकारिक रिलीज के साथ पुन: उत्पन्न कर सकते हैं, http://cassandra.apache.org/download/ – sbridges

उत्तर

1

मुझे 2 परिदृश्यों में यह समस्या थी।

  1. मैं क्लस्टर के डेटा (नहीं कर सकते कि ऐसा) यह भी स्पष्टीकरण के लिए mailing list देखने को हटाए बिना विभाजक को बदलने की कोशिश की।
  2. मैंने सुपरसियर के रूप में कैसंड्रा प्रक्रिया को पहली बार sudo ./cassandra शुरू किया था, जिसने केवल सुपरसियर के लिए अनुमतियों के साथ आवश्यक डेटा/लॉग/कैश निर्देशिका बनाई थी, और फिर कैसंड्रा को पुनरारंभ किया और प्रक्रिया को नियमित उपयोगकर्ता के रूप में चलाया (और इस प्रकार किया सुपरसियर द्वारा संचालित प्रक्रिया द्वारा बनाई गई निर्देशिकाओं में फ़ाइलों का उपयोग करने की अनुमति नहीं है)।

मुझे पता है कि आपने समस्या हल की है, लेकिन यह अन्य डेवलपर्स के लिए उपयोगी हो सकता है।

संबंधित मुद्दे