增加sqlserver的cli#108
Conversation
57848f9 to
5c5fd2c
Compare
5c5fd2c to
1805159
Compare
Episkey-G
left a comment
There was a problem hiding this comment.
这版先 request changes。核心问题不是 SQL Server 代码本身不能编译,而是没有按当前 product 注册体系正确接入,导致用户看不到 ucloud sqlserver,并且 check-product 会失败。
P0: ucloud sqlserver 当前不可用
复现:
go run . sqlserver --help结果:
Error: unknown command "sqlserver" for "ucloud"
原因是新增代码只放在 products/udb/internal/sqlserver/*,但没有成为一个已注册的 product 入口。
修复建议:把 SQL Server 做成独立 product:
mkdir -p products/sqlserver/internal
git mv products/udb/internal/sqlserver products/sqlserver/internal/sqlserver
rm -f products/udb/product.yaml然后新增 products/sqlserver/product.yaml:
name: sqlserver
owners:
- Episkey-G
commands:
- sqlserver
enabled: true并新增 products/sqlserver/product.go,按 products/mysql/product.go 的模式接入 internalsqlserver.NewCommand(ctx),Metadata().Commands 只返回 []string{"sqlserver"}。
P0: products/udb/product.yaml 重新声明了已拆出的 mysql
当前 products/udb/product.yaml 同时声明:
commands:
- mysql
- sqlserver这会和现有 products/mysql 冲突。复现:
go run ./hack/check-product结果包含:
rule7: top-level command "mysql" declared by multiple products [mysql udb]
修复建议:本 PR 不要恢复旧的 UDB 聚合注册形态,也不要在 products/udb/product.yaml 里声明 mysql。这次只新增独立的 sqlserver 顶层命令。
P0: 声明了 enabled product,但缺少对应 product.go
同一个检查还会报:
rule8: products/udb: cannot parse product.go: open products/udb/product.go: no such file or directory
如果保留 products/udb/product.yaml,hack/gen-products 会尝试生成 products/udb import 和 udb.New(),但当前没有这个 Go package 入口。
修复建议:删除本 PR 新增的 products/udb/product.yaml,改为 products/sqlserver/product.yaml + products/sqlserver/product.go。
P1: 生成注册表和 snapshot golden
创建独立 products/sqlserver 后,运行下面命令生成,不要手写 golden:
go run ./hack/gen-products
WRITE_CMDTREE_GOLDEN=1 go test ./hack/snapshot -run '^TestProductGoldens/sqlserver$' -count=1
WRITE_COMPLETION_GOLDEN=1 go test ./hack/snapshot -run '^TestProductCompletionGoldens/sqlserver$' -count=1同时手工在 cmd/product_registration_test.go 的产品注册表里补 sqlserver 期望项:
{product: "sqlserver", commands: []string{"sqlserver"}},验收命令
修完后请跑:
go run ./hack/check-product
go test ./hack/snapshot -run 'TestProductGoldens/sqlserver|TestProductCompletionGoldens/sqlserver' -count=1
go test ./...
go run . sqlserver --help期望:check-product 通过,snapshot 通过,全量测试通过,并且 ucloud sqlserver --help 能看到 SQL Server 命令树。
|
补充一下上面 name: sqlserver
owners:
- <your-github-login>
commands:
- sqlserver
enabled: true
|
|
更正一下我前面 review 里的修复口径:这里不是禁止使用 真正的阻断问题是当前 commands:
- mysql
- sqlserver其中 因此有两种都可以的修法。 方案 A:独立 SQL Server productmkdir -p products/sqlserver/internal
git mv products/udb/internal/sqlserver products/sqlserver/internal/sqlserver
rm -f products/udb/product.yaml
name: sqlserver
owners:
- <your-github-login>
commands:
- sqlserver
enabled: true方案 B:保留 UDB product 名,只注册 sqlserver 命令也可以保留 name: udb
owners:
- <your-github-login>
commands:
- sqlserver
enabled: true这种方案需要补 不管选 A 还是 B,最后都需要运行生成/验收命令: go run ./hack/gen-products
WRITE_CMDTREE_GOLDEN=1 go test ./hack/snapshot -run '^TestProductGoldens/(sqlserver|udb)$' -count=1
WRITE_COMPLETION_GOLDEN=1 go test ./hack/snapshot -run '^TestProductCompletionGoldens/(sqlserver|udb)$' -count=1
go run ./hack/check-product
go test ./...
go run . sqlserver --help核心验收标准是: |
Features:
Fixes: