private static void redo(ILogRecord logRecord, IDatasetLifecycleManager datasetLifecycleManager) { try { int datasetId = logRecord.getDatasetId(); long resourceId = logRecord.getResourceId(); ILSMIndex index = (ILSMIndex) datasetLifecycleManager.getIndex(datasetId, resourceId); ILSMIndexAccessor indexAccessor = index.createAccessor(NoOpIndexAccessParameters.INSTANCE); ILSMIndexOperationContext opCtx = indexAccessor.getOpContext(); opCtx.setFilterSkip(true); opCtx.setRecovery(true); if (logRecord.getNewOp() == AbstractIndexModificationOperationCallback.INSERT_BYTE) { indexAccessor.forceInsert(logRecord.getNewValue()); } else if (logRecord.getNewOp() == AbstractIndexModificationOperationCallback.DELETE_BYTE) { indexAccessor.forceDelete(logRecord.getNewValue()); } else if (logRecord.getNewOp() == AbstractIndexModificationOperationCallback.UPSERT_BYTE) { // redo, upsert the new value indexAccessor.forceUpsert(logRecord.getNewValue()); } else if (logRecord.getNewOp() == AbstractIndexModificationOperationCallback.FILTER_BYTE) { opCtx.setFilterSkip(false); indexAccessor.updateFilter(logRecord.getNewValue()); } else { throw new IllegalStateException("Unsupported OperationType: " + logRecord.getNewOp()); } } catch (Exception e) { throw new IllegalStateException("Failed to redo", e); } }