apache/cassandra · info
Aborting index memtable flush for {}...
Error message
Aborting index memtable flush for {}... What it means
MemtableIndexWriter.abort is called when an SAI memtable index flush is cancelled. With cause == null the flush is aborted because the memtable has no rows to flush — a normal, expected path logged at DEBUG. With a non-null cause, the abort reflects a real error during flush (I/O failure, shutdown) and is logged at WARN along with the stack trace; in both cases the on-disk column index files written so far are deleted via indexDescriptor.deleteColumnIndex.
Source
Thrown at src/java/org/apache/cassandra/index/sai/disk/v1/MemtableIndexWriter.java:118
if ((key.kind() == PrimaryKey.Kind.STATIC && (isStatic || isPartitionKey)) || key.kind() != PrimaryKey.Kind.STATIC && !isStatic)
{
if (minKey == null)
minKey = key;
maxKey = key;
rowCount++;
maxSSTableRowId = Math.max(maxSSTableRowId, sstableRowId);
}
}
@Override
public void abort(Throwable cause)
{
if (cause == null)
// This commonly occurs when a Memtable has no rows to flush, and is harmless:
logger.debug(indexIdentifier.logMessage("Aborting index memtable flush for {}..."), indexDescriptor.sstableDescriptor);
else
logger.warn(indexIdentifier.logMessage("Aborting index memtable flush for {}..."), indexDescriptor.sstableDescriptor, cause);
indexDescriptor.deleteColumnIndex(indexTermType, indexIdentifier);
}
@Override
public void complete(Stopwatch stopwatch) throws IOException
{
assert rowMapping.isComplete() : "Cannot complete the memtable index writer because the row mapping is not complete";
long start = stopwatch.elapsed(TimeUnit.MILLISECONDS);
try
{
if (maxSSTableRowId == -1 || memtable == null || memtable.isEmpty())
{
logger.debug(indexIdentifier.logMessage("No indexed rows to flush from SSTable {}."), indexDescriptor.sstableDescriptor);
// Write a completion marker even though we haven't written anything to the index,
// so we won't try to build the index again for the SSTableView on GitHub (pinned to 88fd0f6a0e)
Solutions
- If the message is DEBUG-level with no stack trace, ignore — it is the normal no-rows-to-flush path.
- If logged with a cause (WARN), inspect the attached stack trace and address the underlying flush error (disk space, permissions, corrupted txn log).
- After a failed flush, verify the SSTable's index components are complete; rebuild the index if subsequent reads report missing/corrupt components.
- Check system.batches / flush error metrics and Cassandra log for preceding IOExceptions pointing at the data directory.
Defensive patterns
Strategy: try-catch
Try / catch
// caller of flush should distinguish benign abort
try { memtableIndexWriter.flush(...); }
catch (Throwable t) { memtableIndexWriter.abort(t); } // pass cause so WARN is logged Prevention
- Ignore DEBUG-level abort messages — they are the normal empty-memtable path.
- Always pass a non-null cause when aborting due to failure so the reason is logged.
- Keep the data directory healthy (space, permissions) to avoid flush errors.
When it happens
Trigger: A memtable flush is initiated but the memtable contains no rows for the indexed columns (common benign case, cause==null); an exception during flush, or memtable shutdown/interruption, passes a Throwable and triggers the WARN branch.
Common situations: Routine flush cycles on sparsely-populated tables (harmless DEBUG noise); disk full or data directory permission problems during actual flush (WARN); node shutdown while a memtable flush is in flight.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- No rows to index during flush of SSTable {}.
- Caught exception while waiting for memtable flushes during s
- Failed to flush {}.{} for a waiting durability report
- memtable_heap_space must be positive, but was ${conf.memtabl
- SASI indexes are disabled. Enable in cassandra.yaml to use.
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/942f702070775911.
Report an issue: GitHub.