{"record":{"id":"6f71bb308137bc30","repo":"vitessio/vitess","slug":"vdiff-not-implemented-in-vtcombo","errorCode":null,"errorMessage":"VDiff not implemented in vtcombo","messagePattern":"VDiff not implemented in vtcombo","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"go/vt/vtcombo/tablet_map.go","lineNumber":780,"sourceCode":"// BinlogDumpGTID is part of the QueryService interface.\nfunc (itc *internalTabletConn) BinlogDumpGTID(\n\tctx context.Context,\n\trequest *binlogdatapb.BinlogDumpGTIDRequest,\n\tsend func(*binlogdatapb.BinlogDumpResponse) error,\n) error {\n\terr := itc.tablet.qsc.QueryService().BinlogDumpGTID(ctx, request, send)\n\treturn tabletconn.ErrorFromGRPC(vterrors.ToGRPC(err))\n}\n\n//\n// TabletManagerClient implementation\n//\n\n// internalTabletManagerClient implements tmclient.TabletManagerClient\ntype internalTabletManagerClient struct{}\n\nfunc (itmc *internalTabletManagerClient) VDiff(ctx context.Context, tablet *topodatapb.Tablet, req *tabletmanagerdatapb.VDiffRequest) (*tabletmanagerdatapb.VDiffResponse, error) {\n\treturn nil, errors.New(\"VDiff not implemented in vtcombo\")\n}\n\nfunc (itmc *internalTabletManagerClient) LockTables(ctx context.Context, tablet *topodatapb.Tablet) error {\n\treturn errors.New(\"not implemented in vtcombo\")\n}\n\nfunc (itmc *internalTabletManagerClient) UnlockTables(ctx context.Context, tablet *topodatapb.Tablet) error {\n\treturn errors.New(\"not implemented in vtcombo\")\n}\n\nfunc (itmc *internalTabletManagerClient) Ping(ctx context.Context, tablet *topodatapb.Tablet) error {\n\tt, ok := tabletMap[tablet.Alias.Uid]\n\tif !ok {\n\t\treturn fmt.Errorf(\"tmclient: cannot find tablet %v\", tablet.Alias.Uid)\n\t}\n\tt.tm.Ping(ctx, \"payload\")\n\treturn nil\n}","sourceCodeStart":762,"sourceCodeEnd":798,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vtcombo/tablet_map.go#L762-L798","documentation":"vtcombo's internalTabletManagerClient is a stub implementing tmclient.TabletManagerClient for single-process local clusters. Its VDiff method unconditionally returns this error because VDiff (MoveTables diff validation) is not wired into vtcombo. Calling it via the tablet manager client always fails.","triggerScenarios":"Running VDiff workflows (e.g. MoveTables vdiff) against a vtcombo-based local cluster (vitess-local / vttestserver); tests invoking tmclient.VDiff on the internal client.","commonSituations":"Developers trying to validate a reshard/migration locally with vtcombo instead of a full multi-binary cluster; e2e test suites that exercise VDiff against vttestserver.","solutions":["Run VDiff against a real Vitess cluster (separate vttablet processes), not vtcombo","Use a full local cluster deployment (e.g. docker/vitess-local with real tablets) for VDiff testing","Restructure the workflow to skip VDiff steps in vtcombo environments"],"exampleFix":"// before\n# vtctlclient --server vtcombo ... MoveTables ... vdiff\n// after\n# run against full cluster: vtctld + vttablets, then\n# vtctlclient MoveTables vdiff commerce customer","handlingStrategy":"fallback","validationCode":"if isVtcomboCluster() {\n    return errors.New(\"VDiff requires a real cluster; vtcombo does not implement it\")\n}","typeGuard":"func isNotImplementedInVtcombo(err error) bool {\n    return err != nil && strings.Contains(err.Error(), \"not implemented in vtcombo\")\n}","tryCatchPattern":"resp, err := tmc.VDiff(ctx, tablet, req)\nif isNotImplementedInVtcombo(err) {\n    // fall back to manual diff or skip in vtcombo environments\n}","preventionTips":["Detect vtcombo/vttestserver environments and skip VDiff steps","Test VDiff only on full clusters","Gate VDiff calls behind cluster-capability checks"],"tags":["vtcombo","vdiff","unimplemented"],"backgroundTag":"not-implemented-in-vtcombo","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}