{"record":{"id":"bb5c0518f261273e","repo":"apache/beam","slug":"unsupported-non-merging-windowfn-windowingstrategy-operators","errorCode":null,"errorMessage":"Unsupported non-merging WindowFn: ${windowingStrategy}","messagePattern":"Unsupported non-merging WindowFn: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"sdks/typescript/src/apache_beam/worker/operators.ts","lineNumber":441,"sourceCode":"export class CombinePerKeyPrecombineOperator<I, A, O>\n  extends CombineOperator<I, A, O>\n  implements IOperator\n{\n  keyCoder: Coder<unknown>;\n  windowCoder: Coder<Window>;\n\n  // Use a Map for LRU ordering: JavaScript Maps preserve insertion order,\n  // so we can implement LRU by deleting and re-inserting on access.\n  groups: Map<string, A>;\n  maxKeys: number = 10000;\n\n  static checkSupportsWindowing(\n    windowingStrategy: runnerApi.WindowingStrategy,\n  ) {\n    if (\n      windowingStrategy.mergeStatus !== runnerApi.MergeStatus_Enum.NON_MERGING\n    ) {\n      throw new Error(\"Unsupported non-merging WindowFn: \" + windowingStrategy);\n    }\n    if (\n      windowingStrategy.outputTime !== runnerApi.OutputTime_Enum.END_OF_WINDOW\n    ) {\n      throw new Error(\n        \"Unsupported windowing output time: \" + windowingStrategy,\n      );\n    }\n  }\n\n  constructor(\n    transformId: string,\n    transform: PTransform,\n    context: OperatorContext,\n  ) {\n    super(transformId, transform, context);\n    const inputPc =\n      context.descriptor.pcollections[","sourceCodeStart":423,"sourceCodeEnd":459,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/typescript/src/apache_beam/worker/operators.ts#L423-L459","documentation":"CombinePerKeyPrecombineOperator.checkSupportsWindowing guards the precombine optimization: it only works when the windowing strategy's mergeStatus is NON_MERGING, but the supplied strategy requires merging windows (e.g. sessions). The windowingStrategy input is at fault — combining pre-window-merge is not implemented in this operator.","triggerScenarios":"Thrown at sdks/typescript/src/apache_beam/worker/operators.ts:441 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use fixed or global windows instead of a merging WindowFn such as sessions.","Fall back to a regular CombinePerKey without precombine so merging windows are handled after window merge.","File an issue/patch to teach the precombine operator about merging window fns if you need sessions with precombine."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}