{"record":{"id":"2970fae6b0167036","repo":"vitessio/vitess","slug":"cannot-decode-sourceuuid","errorCode":null,"errorMessage":"cannot decode SourceUUID","messagePattern":"cannot decode SourceUUID","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"go/mysql/replication/replication_status.go","lineNumber":159,"sourceCode":"\t\tpanic(vterrors.Wrapf(err, \"cannot decode RelayLogPosition\"))\n\t}\n\tfilePos, err := DecodePosition(s.FilePosition)\n\tif err != nil {\n\t\tpanic(vterrors.Wrapf(err, \"cannot decode FilePosition\"))\n\t}\n\tfileRelayPos, err := DecodePosition(s.RelayLogSourceBinlogEquivalentPosition)\n\tif err != nil {\n\t\tpanic(vterrors.Wrapf(err, \"cannot decode RelayLogSourceBinlogEquivalentPosition\"))\n\t}\n\trelayFilePos, err := DecodePosition(s.RelayLogFilePosition)\n\tif err != nil {\n\t\tpanic(vterrors.Wrapf(err, \"cannot decode RelayLogFilePosition\"))\n\t}\n\tvar sid SID\n\tif s.SourceUuid != \"\" {\n\t\tsid, err = ParseSID(s.SourceUuid)\n\t\tif err != nil {\n\t\t\tpanic(vterrors.Wrapf(err, \"cannot decode SourceUUID\"))\n\t\t}\n\t}\n\treplstatus := ReplicationStatus{\n\t\tPosition:                               pos,\n\t\tRelayLogPosition:                       relayPos,\n\t\tFilePosition:                           filePos,\n\t\tRelayLogSourceBinlogEquivalentPosition: fileRelayPos,\n\t\tRelayLogFilePosition:                   relayFilePos,\n\t\tSourceServerID:                         s.SourceServerId,\n\t\tReplicationLagSeconds:                  s.ReplicationLagSeconds,\n\t\tReplicationLagUnknown:                  s.ReplicationLagUnknown,\n\t\tSQLDelay:                               s.SqlDelay,\n\t\tSourceHost:                             s.SourceHost,\n\t\tSourceUser:                             s.SourceUser,\n\t\tSourcePort:                             s.SourcePort,\n\t\tConnectRetry:                           s.ConnectRetry,\n\t\tSourceUUID:                             sid,\n\t\tIOState:                                ReplicationState(s.IoState),","sourceCodeStart":141,"sourceCodeEnd":177,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/mysql/replication/replication_status.go#L141-L177","documentation":"ProtoToReplicationStatus parses s.SourceUuid with ParseSID (a UUID like '3E11FA47-71CA-11E1-9E33-C80AA9429562') and panics if parsing fails. SourceUuid must be a valid MySQL server SID; anything else aborts conversion. Empty string is allowed and simply means no source UUID is recorded.","triggerScenarios":"Calling ProtoToReplicationStatus (or findErrantGTIDs, FindPositionsOfAllCandidates, ReplicaWasRunning, replicaIOThreadWasRunning) with a proto whose SourceUuid is non-empty but not a canonical 36-character UUID, e.g. lowercase/uppercase is fine, but truncated, hyphen-stripped, or hostname-based values fail.","commonSituations":"Operators hand-editing status protos, tools storing the source server hostname instead of its SID, or truncated data from custom scripts.","solutions":["Correct SourceUuid to the MySQL server's SID (SELECT @@server_uuid format).","Pre-validate with replication.ParseSID before conversion.","Clear the field to empty string if no source UUID is intended."],"exampleFix":"// before\npb.SourceUuid = \"my-db-host-1\" // panics\nstatus := mysql.ProtoToReplicationStatus(pb)\n// after\nsid, err := mysql.ParseSID(\"3e11fa47-71ca-11e1-9e33-c80aa9429562\")\nif err != nil { return err }\npb.SourceUuid = sid.String()\nstatus := mysql.ProtoToReplicationStatus(pb)","handlingStrategy":"validation","validationCode":"if pb.SourceUuid != \"\" {\n    if _, err := mysql.ParseSID(pb.SourceUuid); err != nil {\n        return fmt.Errorf(\"invalid SourceUuid %q\", pb.SourceUuid)\n    }\n}","typeGuard":null,"tryCatchPattern":"defer func() { if r := recover(); r != nil { err = fmt.Errorf(\"SourceUUID decode failed: %v\", r) } }()","preventionTips":["Copy SourceUuid from `SELECT @@server_uuid` output exactly (canonical UUID).","Never substitute hostnames or aliases for the SID.","Validate with ParseSID at proto-construction time."],"tags":["mysql","replication","uuid","protobuf-decoding","panic"],"backgroundTag":"invalid-source-uuid","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}