StumbleUpon에서 asynchbase 라이브러리를 사용하기 시작했으며 계속 된 비동기 스캔에 몇 가지 문제가 있습니다.비동기 스캔
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-->
내가 계속 스캔의 일부 작업 예제를 찾을려고 노력 :
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가있어 큰 스캔에이 코드 : 나는 도서관 원리에 대한 이해를 기반으로,이 코드를 작성 asynchbase. OpenTSDB는 scanner.nextRows().joinUninterruptibly()
과 함께 동기식 스캔을 사용합니다. HBase svn에서이 코드는 광산과 같습니다
@Override
void testTimed() {
scanner.nextRows()
.addCallback(continueScan)
.addCallbacks(callback, errback);
}
또한, 비동기 설명서에이 같은 문구 :
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)
는하지만 내 생각이 내이 아니다.
내 코드가 무엇이 잘못된지 알아 내기 위해 asynchbase를 추적 할 계획이지만, 아무도 내가 계속 스캔 작업 예제를 보여줄 수 있다면 매우 유용 할 것입니다.
UPDATE : 당신이 오류없이 코드의 조각을 게시이 어색한 순간. 발신자에게 문제가 발생했습니다. 한 번의 스캔 종료를해야했습니다. 내가 쓴 :
Scanner scanner = hclient.newScanner(TABLE);
<!--cut some initialization--!>
new AsyncScanner(scanner).start();
hclient.shutdown().joinUninterruptibly();
그리고 스캔 동안이 shutdown()
는 진짜 문제였다. 검사가 끝난 후 shutdown()
이 제거되거나 호출되면 모든 것이 정상적으로 작동합니다.
죄송합니다. 시간을 낭비 할 수 있습니다.
당신이 친절하게 대답로 업데이 트를 게시하고 그것을 받아 들일 수 낭비? – arghtype
물론 @arghtype – myas