/** * Support for iterating over the contents of a batch. * * @param handler A handler that is called back for each * update present in the batch * * @throws RocksDBException If we cannot iterate over the batch */ public void iterate(final Handler handler) throws RocksDBException { iterate(nativeHandle_, handler.nativeHandle_); }
void replaySince(final long transactionNumber, ReplayHandler replayHandler) { try (ReplayHandlerAdapter handler = new ReplayHandlerAdapter(db.getDefaultColumnFamily().getID(), replayHandler, handleIdToNameMap); TransactionLogIterator iterator = db.getUpdatesSince(transactionNumber)) { while (iterator.isValid()) { iterator.status(); final TransactionLogIterator.BatchResult result = iterator.getBatch(); // requires isValid and status check LOGGER.debug("Requested sequence number: {}, iterator sequence number: {}", transactionNumber, result.sequenceNumber()); result.writeBatch() .iterate(handler); if (!iterator.isValid()) { break; } iterator.next(); // requires isValid } for (String updatedStore : handler.getUpdatedStores()) { final long latestTransactionNumber = metadataManager.getLatestTransactionNumber(); metadataManager.setLatestTransactionNumber(updatedStore, latestTransactionNumber, latestTransactionNumber); } } catch (RocksDBException e) { throw new DatastoreException(e); } }