{"record":{"id":"eb64d0b96da20892","repo":"apache/beam","slug":"createtracker-has-unexpected-number-of-parameters-v","errorCode":null,"errorMessage":"CreateTracker has unexpected number of parameters: %v","messagePattern":"CreateTracker has unexpected number of parameters: (.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"sdks/go/pkg/beam/core/runtime/exec/sdf_invokers_arity.go","lineNumber":254,"sourceCode":"\t\t\tr0 := fnT.Call2x1(n.args[0], n.args[1])\n\t\t\treturn r0.(sdf.RTracker), nil\n\t\t}\n\n\tcase reflectx.Func1x2:\n\t\tn.call = func() (rt sdf.RTracker, err error) {\n\t\t\tr0, r1 := fnT.Call1x2(n.args[0])\n\t\t\treturn r0.(sdf.RTracker), asError(r1)\n\t\t}\n\n\tcase reflectx.Func2x2:\n\t\tn.call = func() (rt sdf.RTracker, err error) {\n\t\t\tr0, r1 := fnT.Call2x2(n.args[0], n.args[1])\n\t\t\treturn r0.(sdf.RTracker), asError(r1)\n\t\t}\n\n\tdefault:\n\t\tif len(n.fn.Param) < 1 || len(n.fn.Param) > 2 {\n\t\t\treturn errors.Errorf(\"CreateTracker has unexpected number of parameters: %v\", len(n.fn.Param))\n\t\t}\n\n\t\tn.call = func() (rt sdf.RTracker, err error) {\n\t\t\tret := n.fn.Fn.Call(n.args)\n\n\t\t\tswitch len(ret) {\n\t\t\tcase 1:\n\t\t\t\treturn ret[0].(sdf.RTracker), nil\n\t\t\tcase 2:\n\t\t\t\treturn ret[0].(sdf.RTracker), asError(ret[1])\n\t\t\t}\n\n\t\t\tpanic(fmt.Sprintf(\"CreateTracker has unexpected number of return values: %v\", len(ret)))\n\t\t}\n\t}\n\n\treturn nil\n}","sourceCodeStart":236,"sourceCodeEnd":272,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/go/pkg/beam/core/runtime/exec/sdf_invokers_arity.go#L236-L272","documentation":"The CreateTracker function of an SDF must take 1 or 2 parameters (the restriction, optionally plus the element) and return an sdf.RTracker. initCallFn rejects other arities with this error during invoker initialization, as no supported call path can invoke the function.","triggerScenarios":"Registering a CreateTracker fn with 0 parameters or 3+ parameters, e.g. func() sdf.RTracker or func(rest R, el T, ts typex.EventTime) sdf.RTracker; the default validation at sdf_invokers_arity.go:254 fires.","commonSituations":"Defining CreateTracker with no restriction parameter after refactoring, or adding a context.Context parameter which this hook does not support.","solutions":["Give CreateTracker 1-2 parameters, e.g. func(rest R) sdf.RTracker.","Remove unsupported parameters such as context.Context.","Return a concrete *RTracker implementation (a type satisfying sdf.RTracker) — the return type is validated separately.","Verify with a small beam.TestPipeline run that the DoFn validates end to end."],"exampleFix":"// before\nfunc (fn *mySdf) CreateTracker(ctx context.Context, rest watermarksInterval) *myTracker { ... }\n// after\nfunc (fn *mySdf) CreateTracker(rest watermarksInterval) *myTracker { ... }","handlingStrategy":"validation","validationCode":"t := reflect.TypeOf(fn.CreateTracker)\nn := t.NumIn()\nif n < 1 || n > 2 {\n    return fmt.Errorf(\"CreateTracker must take 1-2 parameters, has %d\", n)\n}","typeGuard":null,"tryCatchPattern":"if err != nil {\n    if strings.Contains(err.Error(), \"CreateTracker has unexpected number of parameters\") {\n        // fix arity to 1-2\n    }\n    return err\n}","preventionTips":["Use func(rest R) sdf.RTracker as the canonical CreateTracker shape.","Return a type that satisfies sdf.RTracker.","Validate the whole SDF signature set in a unit test before running on a runner."],"tags":["go","beam","sdf","tracker","arity"],"backgroundTag":"invalid-argument-value","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T21:17:11.552Z"}