5.6 KiB
5.6 KiB
其他模块修复进度报告
📊 总体状态
- ✅ Core 模块:100% 完成
- ✅ P0 问题:已修复(阻塞编译的问题)
- ⏳ P1 问题:proto 接口统一待完成
✅ 已完成的工作
Phase 1: P0 问题修复 ✅
-
internal/store/sqlite/store.go ✅
- 删除
model.ServiceProvider引用 - 编译通过
- 删除
-
core/proto/core_grpc.pb.go ✅
- 删除未使用的 protobuf 生成文件
- 使用 core/grpc_service.go 中的手动实现
-
proto/core.proto ✅
- 更新为 Core 架构(从 Engine 改为 Core)
- 删除 Unbind RPC 方法
- 字段名统一为
core_id
⏳ 待完成的工作
Phase 2: proto 代码生成 ⏳
问题:proto/core.pb.go 缺少新生增的类型定义
缺失的类型:
PeerBinding- BindRequest 需要的子消息- 可能还有其他新字段
原因:
- Windows 环境没有 protoc 编译器
- 无法自动生成 protobuf 代码
解决方案:
方案 A:手动添加类型定义(推荐临时方案)
在 proto/core.pb.go 中手动添加:
type PeerBinding struct {
state protoimpl.MessageState
PeerPublicKey string `protobuf:"bytes,1,opt,name=peer_public_key,json=peerPublicKey,proto3" json:"peer_public_key,omitempty"`
AllowedIps []string `protobuf:"bytes,2,rep,name=allowed_ips,json=allowedIps,proto3" json:"allowed_ips,omitempty"`
LocalPort uint32 `protobuf:"varint,3,opt,name=local_port,json=localPort,proto3" json:"local_port,omitempty"`
RemoteAddress string `protobuf:"bytes,4,opt,name=remote_address,json=remoteAddress,proto3" json:"remote_address,omitempty"`
}
优点:快速解决编译问题
缺点:维护成本高,容易出错
方案 B:安装 protoc(推荐长期方案)
# Windows 安装 protoc
choco install protoc
# 或者下载二进制文件
然后重新生成:
protoc --go_out=. --go-grpc_out=. proto/core.proto
优点:一劳永逸,正确生成
缺点:需要安装工具
方案 C:重构 core_client.go(彻底方案)
不依赖 proto 包,直接使用 Core 模块的 Go API:
// 旧代码
resp, err := c.client.Bind(ctx, &proto.BindRequest{...})
// 新代码 - 直接调用 Core
core := core.GetCore(c.networkID)
err := core.BindToDevice(...)
优点:消除对 proto 的依赖,更清晰
缺点:需要大规模重构
Phase 3: internal/ctr/core_client.go 适配 ⏳
当前问题:
- ❌
proto.PeerBinding未定义 - ❌
BindRequest.Peers字段不存在(需要检查实际字段名) - ❌
c.client.Unbind()方法不存在(已从 proto 删除)
需要修改的代码:
// Line 315-318: 构造 PeerBinding
peerBinding := &proto.PeerBinding{...} // ❌ PeerBinding 未定义
// Line 324-327: 调用 Bind
resp, err := c.client.Bind(ctx, &proto.BindRequest{
CoreId: c.coreID,
Peers: []*proto.PeerBinding{peerBinding}, // ❌ 字段可能不对
})
// Line 359: 调用 Unbind(已删除)
resp, err := c.client.Unbind(ctx, &proto.UnbindRequest{...}) // ❌ 方法不存在
修复策略:
- 短期:等待 proto 代码生成后修复
- 中期:考虑删除 Unbind 功能(如果不需要)
- 长期:重构为直接调用 Core API
📋 详细问题清单
internal/ctr/core_client.go
| 行号 | 问题 | 严重性 | 修复方案 |
|---|---|---|---|
| 315 | proto.PeerBinding 未定义 |
高 | 生成 proto 代码 |
| 326 | BindRequest.Peers 字段未知 |
高 | 检查 proto 定义 |
| 359 | Unbind 方法不存在 |
高 | 删除或重构 |
proto/core.pb.go
| 问题 | 严重性 | 修复方案 |
|---|---|---|
缺少 PeerBinding 类型 |
高 | 手动添加或重新生成 |
| 可能有其他新字段缺失 | 中 | 全面对比 proto 文件 |
🎯 下一步行动
立即执行(推荐顺序)
-
安装 protoc ⏳
choco install protoc # 或从 GitHub 下载 -
重新生成 proto 代码 ⏳
cd e:\Project\MeshRay protoc --go_out=. --go-grpc_out=. proto/core.proto -
验证编译 ⏳
go build ./... -
修复 core_client.go ⏳
- 适配新的 proto API
- 删除 Unbind 相关代码
- 调整字段名称
备选方案
如果无法安装 protoc:
- 手动在
proto/core.pb.go中添加PeerBinding - 修改
core_client.go避免使用 Unbind
📊 影响评估
当前编译状态
# Core 模块 ✅
✅ go build ./core # 通过
✅ go build ./core/connect # 通过
✅ go build ./core/transport # 通过
✅ go build ./core/pool # 通过
# 其他模块 ❌
❌ go build ./... # 失败
├── internal/store # ✅ 已修复
├── internal/ctr # ❌ proto 依赖问题
└── proto # ⏳ 待重新生成
受影响的功能
- ❌ Core 客户端(internal/ctr)
- ❌ 可能的 Web UI 后端集成
- ⏳ 其他使用 proto 包的模块
💡 建议
短期建议
- 安装 protoc - 这是最直接的解决方案
- 重新生成 proto 代码 - 一次性解决问题
- 验证编译 - 确保所有模块正常
长期建议
- 考虑去除 proto 依赖 - 直接调用 Core API
- 简化架构 - 减少不必要的抽象层
- 文档化 - 记录 proto 更新流程
更新时间:2026-03-24 05:00
版本:v2.2.0
状态:Core 模块 100% 完成,proto 代码待生成