2012-11-26 25 views
10

के साथ स्कैन करें I StumbleUpon से asynchbase लाइब्रेरी का उपयोग करना शुरू कर दिया है और निरंतर एसिंक्रोनस स्कैन के साथ कुछ समस्याएं हैं।asynchbase

public class AsyncScanner 
    implements Callback<Object, ArrayList<ArrayList<KeyValue>>> { 
    private final Scanner scan; 

    public AsyncScanner(Scanner scan) { 
     this.scan = scan; 
    } 

    public void start() { 
     scan.nextRows().addCallback(this); 
    } 

    @Override 
    public Object call(ArrayList<ArrayList<KeyValue>> rows) throws Exception { 
     if (rows == null) { 
      return null; 
     } 
     // some useful things here 
     scan.nextRows().addCallback(this); 
     return null; 
    } 
} 

लेकिन बड़ा स्कैन पर इस कोड को मैं StackOverflowError मिल गया है के साथ:: मैं पुस्तकालय सिद्धांतों की मेरी समझ के आधार पर इस कोड को लिखा था,

java.lang.StackOverflowError 
    at java.util.concurrent.atomic.AtomicIntegerFieldUpdater$AtomicIntegerFieldUpdaterImpl.compareAndSet(AtomicIntegerFieldUpdater.java:279) 
    at com.stumbleupon.async.Deferred.casState(Deferred.java:580) 
    at com.stumbleupon.async.Deferred.access$100(Deferred.java:430) 
    at com.stumbleupon.async.Deferred$Continue.call(Deferred.java:1342) 
    at com.stumbleupon.async.Deferred.doCall(Deferred.java:1262) 
    at com.stumbleupon.async.Deferred.runCallbacks(Deferred.java:1241) 
    at com.stumbleupon.async.Deferred.access$300(Deferred.java:430) 
    at com.stumbleupon.async.Deferred$Continue.call(Deferred.java:1350) 
    at com.stumbleupon.async.Deferred.doCall(Deferred.java:1262) 
    at com.stumbleupon.async.Deferred.runCallbacks(Deferred.java:1241) 
    at com.stumbleupon.async.Deferred.access$300(Deferred.java:430) 
    at com.stumbleupon.async.Deferred$Continue.call(Deferred.java:1350) 
    <--cut--> 

मैं जारी रखा स्कैन के कुछ काम कर रहे उदाहरणों को खोजने की कोशिश की asynchbase के साथ। OpenTSDB scanner.nextRows().joinUninterruptibly() के साथ तुल्यकालिक स्कैन का उपयोग करता है। HBase svn से यह कोड, मेरा दिखाई देता है:

@Override 
    void testTimed() { 
      scanner.nextRows() 
      .addCallback(continueScan) 
      .addCallbacks(callback, errback); 
     } 

इसके अलावा, async दस्तावेज में इस तरह के वाक्य है:

You must not build a cycle of mutually dependant Deferreds, as this would cause an infinite recursion (thankfully, it will quickly fail with a StackOverflowError)

लेकिन मुझे लगता है, यह मेरा मामला नहीं है।

मैं अपने कोड के साथ क्या गलत है, यह जानने के लिए एसिंचबेस का पता लगाने की योजना बना रहा हूं, लेकिन यदि कोई मुझे लगातार स्कैन के कामकाजी उदाहरण दिखा सकता है, तो यह बहुत उपयोगी होगा।

अद्यतन: यह अजीब क्षण जब आपने त्रुटि के बिना कोड का टुकड़ा पोस्ट किया था। समस्या कॉलर में थी। मुझे एक स्कैन एंड एक्जिट बनाने की ज़रूरत थी। मैं ने लिखा है:

Scanner scanner = hclient.newScanner(TABLE); 
    <!--cut some initialization--!> 
    new AsyncScanner(scanner).start(); 
    hclient.shutdown().joinUninterruptibly(); 

और यह shutdown() स्कैन करते समय वास्तविक समस्या थी। यदि shutdown() स्कैन खत्म होने के बाद हटा दिया या कहा जाता है, तो सभी ठीक काम करते हैं।

अपना समय बर्बाद करने के लिए क्षमा करें।

+0

आप कृपया एक जवाब के रूप में अपने अपडेट पोस्ट और इसे स्वीकार कर सके यह सवाल अनुत्तरित कतार में दिखाने के लिए रोकने के लिए बर्बाद कर रहे? पाठ्यक्रम के – arghtype

+1

@arghtype – myas

उत्तर

0

अद्यतन की प्रतिलिपि: यह अजीब क्षण जब आपने त्रुटि के बिना कोड का टुकड़ा पोस्ट किया। समस्या कॉलर में थी। मुझे एक स्कैन एंड एक्जिट बनाने की ज़रूरत थी। मैंने लिखा:

Scanner scanner = hclient.newScanner(TABLE); 
<!--cut some initialization--!> 
new AsyncScanner(scanner).start(); 
hclient.shutdown().joinUninterruptibly(); 

और यह शट डाउन() स्कैनिंग वास्तविक समस्या थी। यदि शटडाउन() को स्कैन खत्म होने के बाद हटाया या बुलाया जाता है, तो सभी ठीक काम करते हैं।

के लिए खेद है संभव अपना समय