{"record":{"id":"bb33f75ea003b504","repo":"apache/flink","slug":"committable-to-compact-has-no-content","errorCode":null,"errorMessage":"Committable to compact has no content.","messagePattern":"Committable to compact has no content\\.","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"flink-connectors/flink-connector-files/src/main/java/org/apache/flink/connector/file/sink/compactor/operator/CompactCoordinator.java","lineNumber":117,"sourceCode":"            }\n        }\n        // or message instanceof CommittableSummary\n        // info in CommittableSummary is not necessary for compacting at present, ignore it\n    }\n\n    private boolean packAndTrigger(FileSinkCommittable committable) {\n        String bucketId = committable.getBucketId();\n        CompactorRequest bucketRequest =\n                packingRequests.computeIfAbsent(bucketId, CompactorRequest::new);\n        if (committable.hasInProgressFileToCleanup() || committable.hasCompactedFileToCleanup()) {\n            checkState(!committable.hasPendingFile());\n            // cleanup request, pass through directly\n            bucketRequest.addToPassthrough(committable);\n            return false;\n        }\n\n        if (!committable.hasPendingFile()) {\n            throw new RuntimeException(\"Committable to compact has no content.\");\n        }\n\n        CompactTrigger trigger =\n                triggers.computeIfAbsent(bucketId, id -> new CompactTrigger(strategy));\n        CompactTriggerResult triggerResult = trigger.onElement(committable);\n        switch (triggerResult) {\n            case PASS_THROUGH:\n                bucketRequest.addToPassthrough(committable);\n                return false;\n            case CONTINUE:\n                bucketRequest.addToCompact(committable);\n                return false;\n            case FIRE_AND_PURGE:\n                bucketRequest.addToCompact(committable);\n                return true;\n            default:\n                throw new RuntimeException(\"Unexpected trigger result:\" + triggerResult);\n        }","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-connectors/flink-connector-files/src/main/java/org/apache/flink/connector/file/sink/compactor/operator/CompactCoordinator.java#L99-L135","documentation":"Thrown by packAndTrigger in CompactCoordinator when a FileSinkCommittable arrives that has no pending file, no in-progress file to clean up, and no compacted file to clean up. This is an invalid/empty committable state that the coordinator cannot process. It is a defensive guard in @Internal code against unexpected committable states.","triggerScenarios":"A FileSinkCommittable is deserialized or constructed in a state where all content fields (pendingFile, inProgressFileToCleanup, compactedFileToCleanup) are null/absent. This could happen due to state corruption during restore, a bug in the committable construction logic, or an incompatible state from a different sink version.","commonSituations":"State was corrupted or restored from an incompatible Flink version; extremely rare under normal operation. This is an internal defensive guard, not a user-configurable error path.","solutions":["Check if the state was corrupted during storage or restore (disk errors, network issues).","Verify the checkpoint/savepoint was produced by a compatible FileSink version.","If the error persists, report as a Flink bug with the full stack trace and state details.","As a last resort, start from a clean state without restoring from the problematic checkpoint."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// No user-facing validation possible — this is an internal defensive guard.\n// Ensure state was produced by a compatible FileSink version before restore.","typeGuard":null,"tryCatchPattern":"try {\n    coordinator.processElement(element);\n} catch (RuntimeException e) {\n    if (e.getMessage().equals(\"Committable to compact has no content.\")) {\n        // internal state corruption — inspect checkpoint integrity\n        // may need to start from a clean state\n    }\n    throw e;\n}","preventionTips":["Verify checkpoint/savepoint integrity before restore.","Ensure Flink version compatibility when restoring FileSink state.","Report persistent occurrences as a Flink bug with full stack trace."],"tags":["file-sink","compaction","internal","state-restore","defensive"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}