@Override public void readEntryComplete(int rc, long lid, long eid, ChannelBuffer buffer, Object ctx) { InetSocketAddress bookieAddress = (InetSocketAddress) ctx; ReadResult<Long> rr; if (BKException.Code.OK != rc) { rr = new ReadResult<Long>(eid, rc, null, bookieAddress); } else { try { DigestManager.RecoveryData data = lh.macManager.verifyDigestAndReturnLastConfirmed(buffer); rr = new ReadResult<Long>(eid, BKException.Code.OK, data.lastAddConfirmed, bookieAddress); } catch (BKException.BKDigestMatchException e) { rr = new ReadResult<Long>(eid, BKException.Code.DigestMatchException, null, bookieAddress); } } readResults.add(rr); if (numBookies.decrementAndGet() == 0) { callback.operationComplete(BKException.Code.OK, readResults); } } };