hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Guanghao Zhang (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HBASE-19522) The complete order is wrong in AsyncBufferedMutatorImpl
Date Fri, 15 Dec 2017 11:25:00 GMT
Guanghao Zhang created HBASE-19522:

             Summary: The complete order is wrong in AsyncBufferedMutatorImpl
                 Key: HBASE-19522
                 URL: https://issues.apache.org/jira/browse/HBASE-19522
             Project: HBase
          Issue Type: Bug
            Reporter: Guanghao Zhang

    List<CompletableFuture<Void>> toComplete = this.futures;
    assert toSend.size() == toComplete.size();
    this.mutations = new ArrayList<>();
    this.futures = new ArrayList<>();
    bufferedSize = 0L; 
    Iterator<CompletableFuture<Void>> toCompleteIter = toComplete.iterator();
    for (CompletableFuture<?> future : table.batch(toSend)) {
      future.whenComplete((r, e) -> {
        CompletableFuture<Void> f = toCompleteIter.next(); // Call next in callback,
so the complete order may different with the future order
        if (e != null) {
        } else {

Here we call table.batch to get a list of CompleteFuture for each mutation. Then we register
a call back for each future. But the problem is we call toCompleteIter.next() in the callback.
So we may complete the future by a wrong order(not same with the mutation order). Meanwhile,
as ArrayList is not thread safe, so different thread may get same future by toCompleteIter.next().

This message was sent by Atlassian JIRA

View raw message