{"record":{"id":"9693d03348d3b727","repo":"goharbor/harbor","slug":"tencent-tcr-fetchartifacts-listimages-runner-d","errorCode":null,"errorMessage":"[tencent-tcr.FetchArtifacts.listImages] runner=%d repo=%s, error=%v","messagePattern":"\\[tencent-tcr\\.FetchArtifacts\\.listImages\\] runner=(.+?) repo=(.+?), error=(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/pkg/reg/adapter/tencentcr/artifact_registry.go","lineNumber":100,"sourceCode":"\t}\n\trepos, _ = filter.DoFilterRepositories(repositories, filters)\n\tlog.Debugf(\"[tencent-tcr.FetchArtifacts] filteredRepos=%d\", len(repos))\n\n\t// 4. list images\n\tvar rawResources = make([]*model.Resource, len(repos))\n\trunner := utils.NewLimitedConcurrentRunner(tcrQPSLimit)\n\n\tfor i, r := range repos {\n\t\t// !copy\n\t\tindex := i\n\t\trepo := r\n\n\t\trunner.AddTask(func() error {\n\t\t\tvar images []string\n\t\t\trepoArr := strings.Split(repo.Name, \"/\")\n\t\t\t_, images, err = a.getImages(repoArr[0], strings.Join(repoArr[1:], \"/\"), \"\")\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"[tencent-tcr.FetchArtifacts.listImages] runner=%d repo=%s, error=%v\", index, repo.Name, err)\n\t\t\t}\n\n\t\t\tvar filteredImages []string\n\t\t\tif tagsPattern != \"\" {\n\t\t\t\tfor _, image := range images {\n\t\t\t\t\tvar ok bool\n\t\t\t\t\tok, err = util.Match(tagsPattern, image)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn fmt.Errorf(\"[tencent-tcr.FetchArtifacts.matchImage] image='%s', error=%v\", image, err)\n\t\t\t\t\t}\n\t\t\t\t\tif ok {\n\t\t\t\t\t\tfilteredImages = append(filteredImages, image)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfilteredImages = images\n\t\t\t}\n","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/goharbor/harbor/blob/7b2fd08cc568955cca339afeefab27372840d936/src/pkg/reg/adapter/tencentcr/artifact_registry.go#L82-L118","documentation":"Returned inside a concurrent FetchArtifacts task in the Tencent TCR adapter when the getImages API call for one repository fails. It wraps the error with the runner task index and repository name, so the failing repo is identifiable; the cause is a TCR DescribeImages API failure (throttling, auth, or network).","triggerScenarios":"Thrown at src/pkg/reg/adapter/tencentcr/artifact_registry.go:100 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the wrapped error for the TCR API failure","Check Tencent Cloud credentials and TCR read permissions","Watch for API rate limiting (tcrQPSLimit) and reduce concurrency if throttled","Retry the replication job for transient failures"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7b2fd08cc568955cca339afeefab27372840d936","analyzedAt":"2026-08-16T00:00:10.961Z","contentChangedAt":"2026-08-16T00:00:10.961Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}