@Override
public ILSMIOOperation createFlushOperation(ILSMIndexOperationContext ctx) throws HyracksDataException {
ILSMMemoryComponent flushingComponent = getCurrentMemoryComponent();
if (flushingComponent.getWriterCount() > 0) {
throw new IllegalStateException(
"createFlushOperation is called on a component with writers: " + flushingComponent);
}
ILSMIOOperation flushOp =
TracedIOOperation.wrap(createFlushOperation(createOpContext(NoOpIndexAccessParameters.INSTANCE),
fileManager.getRelFlushFileReference(), ioOpCallback), tracer);
flushingComponent.schedule(LSMIOOperationType.FLUSH);
numScheduledFlushes++;
changeFlushStatusForCurrentMutableCompoent(false);
changeMutableComponent();
ILSMIndexAccessor accessor = flushOp.getAccessor();
ILSMIndexOperationContext flushCtx = accessor.getOpContext();
flushCtx.setOperation(ctx.getOperation());
flushCtx.getComponentHolder().add(flushingComponent);
flushCtx.setIoOperation(flushOp);
propagateMap(ctx, flushCtx);
ioOpCallback.scheduled(flushOp);
return flushOp;
}