首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步基扫描

异步基扫描
EN

Stack Overflow用户
提问于 2012-11-26 12:11:40
回答 1查看 2.2K关注 0票数 10

我已经开始使用来自StumbleUpon的StumbleUpon库,并且在继续异步扫描时遇到了一些问题。基于对库原则的理解,我编写了这段代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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-->

我试图找到一些使用异步基继续扫描的工作示例。OpenTSDB与scanner.nextRows().joinUninterruptibly()使用同步扫描。来自HBase svn的这段代码看起来像我的代码:

代码语言:javascript
复制
    @Override
    void testTimed() {
          scanner.nextRows()
            .addCallback(continueScan)
            .addCallbacks(callback, errback);
        }

此外,在异步文档中有这样的短语:

您不能构建一个相互依赖的Deferreds循环,因为这会导致无限递归(谢天谢地,StackOverflowError很快就会失败)

但我想这不是我的案子。

我计划跟踪异步库,以找出我的代码有什么问题,但是如果有人能给我展示继续扫描的工作示例,这将非常有帮助。

更新:这个尴尬的时刻,当你发布一段代码时没有出错。问题出在打电话的人身上。我需要做一个扫描结束出口。我写道:

代码语言:javascript
复制
   Scanner scanner = hclient.newScanner(TABLE);
   <!--cut some initialization--!>
   new AsyncScanner(scanner).start();
   hclient.shutdown().joinUninterruptibly();

扫描时的shutdown()才是真正的问题。如果shutdown()在扫描完成后被删除或调用,那么所有操作都很好。

很抱歉浪费你的时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-16 21:28:48

更新副本:这个尴尬的时刻,当你发布一段代码时,没有错误。问题出在打电话的人身上。我需要做一个扫描结束出口。我写道:

代码语言:javascript
复制
Scanner scanner = hclient.newScanner(TABLE);
<!--cut some initialization--!>
new AsyncScanner(scanner).start();
hclient.shutdown().joinUninterruptibly();

扫描时的关闭()才是真正的问题。如果在扫描完成后删除或调用了关机(),则所有操作都正常。

很抱歉浪费了你的时间

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13564612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档