goharbor/harbor · error

[tencent-tcr.FetchArtifacts.listImages] runner=

Error message

[tencent-tcr.FetchArtifacts.listImages] runner=%d repo=%s, error=%v

What it means

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).

Solutions

  1. Inspect the wrapped error for the TCR API failure
  2. Check Tencent Cloud credentials and TCR read permissions
  3. Watch for API rate limiting (tcrQPSLimit) and reduce concurrency if throttled
  4. Retry the replication job for transient failures
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src/pkg/reg/adapter/tencentcr/artifact_registry.go:100 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of goharbor/harbor@7b2fd08cc5 (2026-08-16). Data as JSON: /api/errors/9693d03348d3b727. Report an issue: GitHub.

Appendix: source

Thrown at src/pkg/reg/adapter/tencentcr/artifact_registry.go:100

	}
	repos, _ = filter.DoFilterRepositories(repositories, filters)
	log.Debugf("[tencent-tcr.FetchArtifacts] filteredRepos=%d", len(repos))

	// 4. list images
	var rawResources = make([]*model.Resource, len(repos))
	runner := utils.NewLimitedConcurrentRunner(tcrQPSLimit)

	for i, r := range repos {
		// !copy
		index := i
		repo := r

		runner.AddTask(func() error {
			var images []string
			repoArr := strings.Split(repo.Name, "/")
			_, images, err = a.getImages(repoArr[0], strings.Join(repoArr[1:], "/"), "")
			if err != nil {
				return fmt.Errorf("[tencent-tcr.FetchArtifacts.listImages] runner=%d repo=%s, error=%v", index, repo.Name, err)
			}

			var filteredImages []string
			if tagsPattern != "" {
				for _, image := range images {
					var ok bool
					ok, err = util.Match(tagsPattern, image)
					if err != nil {
						return fmt.Errorf("[tencent-tcr.FetchArtifacts.matchImage] image='%s', error=%v", image, err)
					}
					if ok {
						filteredImages = append(filteredImages, image)
					}
				}
			} else {
				filteredImages = images
			}

View on GitHub (pinned to 7b2fd08cc5)