@Override public void operationComplete(int rc, LedgerFragment lf) { if (BKException.Code.OK != rc) { synchronized (badBookies) { badBookies.put(bookieIndex, rc); } } if (numBookies.decrementAndGet() == 0) { if (badBookies.isEmpty()) { cb.operationComplete(BKException.Code.OK, fragment); } else { int rcToReturn = BKException.Code.NoBookieAvailableException; for (Map.Entry<Integer, Integer> entry : badBookies.entrySet()) { rcToReturn = entry.getValue(); if (entry.getValue() == BKException.Code.ClientClosedException) { break; } } cb.operationComplete(rcToReturn, fragment.subset(badBookies.keySet())); } } } }