{"record":{"id":"92a12c76e839db66","repo":"apache/flink","slug":"at-least-one-trigger-condition-must-be-configured","errorCode":null,"errorMessage":"At least one trigger condition must be configured.","messagePattern":"At least one trigger condition must be configured\\.","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"flink-connectors/flink-connector-files/src/main/java/org/apache/flink/connector/file/sink/compactor/FileCompactStrategy.java","lineNumber":107,"sourceCode":"            return this;\n        }\n\n        /** Optional, the count of compacting threads in a compactor operator, 1 by default. */\n        public FileCompactStrategy.Builder setNumCompactThreads(int numCompactThreads) {\n            checkArgument(numCompactThreads > 0, \"Compact threads should be more than 0.\");\n            this.numCompactThreads = numCompactThreads;\n            return this;\n        }\n\n        public FileCompactStrategy build() {\n            validate();\n            return new FileCompactStrategy(\n                    sizeThreshold, numCheckpointsBeforeCompaction, numCompactThreads);\n        }\n\n        private void validate() {\n            if (sizeThreshold < 0 && numCheckpointsBeforeCompaction <= 0) {\n                throw new IllegalArgumentException(\n                        \"At least one trigger condition must be configured.\");\n            }\n        }\n    }\n}\n","sourceCodeStart":89,"sourceCodeEnd":113,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-connectors/flink-connector-files/src/main/java/org/apache/flink/connector/file/sink/compactor/FileCompactStrategy.java#L89-L113","documentation":"Thrown by FileCompactStrategy.Builder.validate() when neither setSizeThreshold nor enableCompactionOnCheckpoint has been called before build(). Both default to -1 (disabled), meaning no compaction trigger would ever fire. At least one trigger condition is required for the compaction strategy to be valid.","triggerScenarios":"Calling FileCompactStrategy.Builder.newBuilder().build() without configuring any trigger. Also triggered if only setNumCompactThreads is called, since that configures execution threads but not a trigger condition.","commonSituations":"Developer forgets to set a trigger condition; copy-paste error from incomplete documentation or examples; misunderstanding that numCompactThreads alone is not a trigger.","solutions":["Call enableCompactionOnCheckpoint(n) with a positive checkpoint count before build().","Or call setSizeThreshold(bytes) with a non-negative size threshold before build().","Both can be set simultaneously for size-and-checkpoint-based triggering.","Review the FileCompactStrategy.Builder documentation: trigger methods are optional individually but at least one is required."],"exampleFix":"// before: no trigger configured\nFileCompactStrategy strategy = FileCompactStrategy.Builder.newBuilder()\n    .setNumCompactThreads(2)\n    .build();\n\n// after: configure a trigger condition\nFileCompactStrategy strategy = FileCompactStrategy.Builder.newBuilder()\n    .enableCompactionOnCheckpoint(3)\n    .setNumCompactThreads(2)\n    .build();","handlingStrategy":"validation","validationCode":"// Always configure at least one trigger before building\nFileCompactStrategy strategy = FileCompactStrategy.Builder.newBuilder()\n    .enableCompactionOnCheckpoint(3)  // checkpoint-based trigger\n    // OR: .setSizeThreshold(128 * 1024 * 1024)  // size-based trigger\n    .setNumCompactThreads(2)\n    .build();","typeGuard":null,"tryCatchPattern":"try {\n    FileCompactStrategy strategy = FileCompactStrategy.Builder.newBuilder().build();\n} catch (IllegalArgumentException e) {\n    // configure a trigger and retry\n    strategy = FileCompactStrategy.Builder.newBuilder()\n        .enableCompactionOnCheckpoint(3)\n        .build();\n}","preventionTips":["Always chain at least one trigger method (enableCompactionOnCheckpoint or setSizeThreshold) before build().","Review the builder documentation: both trigger methods are optional individually but at least one is mandatory.","Use code review to catch missing trigger configuration."],"tags":["file-sink","compaction","configuration","builder","validation"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}