{"record":{"id":"a3508298a964e1ac","repo":"temporalio/temporal","slug":"requested-workflow-history-does-not-exist","errorCode":null,"errorMessage":"requested workflow history does not exist","messagePattern":"requested workflow history does not exist","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"common/archiver/constants.go","lineNumber":39,"sourceCode":"\t// ErrReasonHistoryMutated is the error reason for mutated history\n\tErrReasonHistoryMutated = \"history was mutated\"\n)\n\nvar (\n\t// ErrInvalidURI is the error for invalid URI\n\tErrInvalidURI = errors.New(\"URI is invalid\")\n\t// ErrURISchemeMismatch is the error for mismatch between URI scheme and archiver\n\tErrURISchemeMismatch = errors.New(\"URI scheme does not match the archiver\")\n\t// ErrHistoryMutated is the error for mutated history\n\tErrHistoryMutated = errors.New(\"history was mutated\")\n\t// ErrInvalidGetHistoryRequest is the error for invalid GetHistory request\n\tErrInvalidGetHistoryRequest = errors.New(\"get archived history request is invalid\")\n\t// ErrInvalidQueryVisibilityRequest is the error for invalid Query Visibility request\n\tErrInvalidQueryVisibilityRequest = errors.New(\"query visiblity request is invalid\")\n\t// ErrNextPageTokenCorrupted is the error for corrupted GetHistory token\n\tErrNextPageTokenCorrupted = errors.New(\"next page token is corrupted\")\n\t// ErrHistoryNotExist is the error for non-exist history\n\tErrHistoryNotExist = errors.New(\"requested workflow history does not exist\")\n)\n","sourceCodeStart":21,"sourceCodeEnd":41,"githubUrl":"https://github.com/temporalio/temporal/blob/bde624efd13fbd3843654058db6d9c716166318b/common/archiver/constants.go#L21-L41","documentation":"ClientTLS accepts root CAs either as inline data (RootCAData) or as file paths (RootCAFiles), never both. When both lists are non-empty the TLS loading logic cannot decide which pool to build, so validateClientTLS rejects the config.","triggerScenarios":"Calling validateGroupTLS or validateWorkerTLS where both ClientTLS.RootCAData and ClientTLS.RootCAFiles are non-empty.","commonSituations":"Upgrading configs from file-based to inline secrets while leaving old file paths; shared client config snippet copied into a per-service config that also sets files; automation appending CA data without clearing files.","solutions":["Pick one source: clear RootCAFiles if using RootCAData, or vice versa.","Prefer RootCAData in container deployments to avoid file mounts.","Audit config layering/merging so only one mechanism is populated.","Add a CI lint rule enforcing File/Data mutual exclusivity across TLS configs."],"exampleFix":"// before\nClientTLS:\n  RootCAFiles: [/etc/temporal/ca.pem]\n  RootCAData: [\"-----BEGIN CERTIFICATE-----...\"]\n// after\nClientTLS:\n  RootCAData: [\"-----BEGIN CERTIFICATE-----...\"]","handlingStrategy":"validation","validationCode":"if len(cfg.RootCAData) > 0 && len(cfg.RootCAFiles) > 0 {\n\treturn fmt.Errorf(\"choose either RootCAFiles or RootCAData, not both\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Document one canonical CA-source style per deployment environment.","When converting file-based configs to inline data, delete the file entries in the same change.","Add CI validation mirroring validateClientTLS before rollout."],"tags":["tls","config-validation","mutually-exclusive-fields"],"backgroundTag":"tls-config-conflict","analyzedSha":"bde624efd13fbd3843654058db6d9c716166318b","analyzedAt":"2026-09-01T07:18:39.080Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}