【架构优化】合并 engine/cloud_pool.go 中重复的执行池候选 runner 收集与启用判断

Ouverte
#466 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@fx-kurumi y travaille déjà.

Depuis le 13/11/2026.

  • #467 par @fx-kurumi — ouverte

Évaluation

Difficulté
3/5
Temps estimé
Une demi-journée
Accessibilité débutants
30/100
Type d'issue
Refactorisation
Clarté
Clairement spécifiée
Activité
Active
Stack technique
go
Domaine
backend

Piste de recherche

The duplicated runner-listing loop sits in pickPoolRunner and CloudPoolStatus, and the duplicated enablement check sits in cloudPoolRunner and cloudPoolRequired, all in internal/engine/cloud_pool.go. Read poolRunnerEligible and cloudPoolServes first, then extract eligiblePoolRunners and the unexported serves method. Pull request #467 already targets this change, so check its state before starting. Done when both call sites share the helpers, go test ./internal/engine/ passes including TestCloudPoolSelectionStatusAndBindingErrors, and the new table-driven tests in cloud_pool_helpers_test.go pass.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

现状问题

internal/engine/cloud_pool.go 中有两处重复:

  1. 「列出当前可承接云端执行池任务的 runner」的循环(遍历 e.repo.Runners() 并用 poolRunnerEligible 过滤)在 pickPoolRunner 和 CloudPoolStatus 各写了一遍,一个收集候选、一个计数。
  2. 「执行池已启用且覆盖该项目」的判断 pool.Label != "" && cloudPoolServes(pool.Projects, projectID) 在 cloudPoolRunner 与 cloudPoolRequired 中各写了一遍。

以后调整资格规则或启用条件时容易只改一处。

重构方案

  • 新增 (*Engine).eligiblePoolRunners(label) []domain.Runner,pickPoolRunner 从中随机挑选,CloudPoolStatus 返回其长度。
  • 新增 (CloudRunnerPool).serves(projectID) bool(未导出),cloudPoolRunner / cloudPoolRequired 改为调用它。
  • 函数签名、导出 API、错误文案、选择逻辑均不变。

影响范围

仅 internal/engine/cloud_pool.go,新增测试文件 internal/engine/cloud_pool_helpers_test.go。不涉及对外接口与行为。

验证方式

  • gofmt / go vet ./internal/engine/
  • 新增表驱动测试覆盖 serves 的各种组合,以及 eligiblePoolRunners 对标签/归属/在线状态/版本的过滤,并核对与 CloudPoolStatus、pickPoolRunner 结果一致
  • go test ./internal/engine/ 原有用例(含 TestCloudPoolSelectionStatusAndBindingErrors)保持通过
Langage dominant
Go
Étoiles
141
Forks
28
Merge moyen
1 j 15 h
PR mergées (30 j)
113

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de Tencent/LoopForge

Toutes les issues de Tencent/LoopForge

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.