Files
Meshray-Manager/docs/其他模块修复进度_v2.2.md
T
2026-06-30 15:14:37 +08:00

5.6 KiB
Raw Blame History

其他模块修复进度报告

📊 总体状态

  • Core 模块100% 完成
  • P0 问题:已修复(阻塞编译的问题)
  • P1 问题proto 接口统一待完成

已完成的工作

Phase 1: P0 问题修复

  1. internal/store/sqlite/store.go

    • 删除 model.ServiceProvider 引用
    • 编译通过
  2. core/proto/core_grpc.pb.go

    • 删除未使用的 protobuf 生成文件
    • 使用 core/grpc_service.go 中的手动实现
  3. 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 适配

当前问题

  1. proto.PeerBinding 未定义
  2. BindRequest.Peers 字段不存在(需要检查实际字段名)
  3. 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{...})  // ❌ 方法不存在

修复策略

  1. 短期:等待 proto 代码生成后修复
  2. 中期:考虑删除 Unbind 功能(如果不需要)
  3. 长期:重构为直接调用 Core API

📋 详细问题清单

internal/ctr/core_client.go

行号 问题 严重性 修复方案
315 proto.PeerBinding 未定义 生成 proto 代码
326 BindRequest.Peers 字段未知 检查 proto 定义
359 Unbind 方法不存在 删除或重构

proto/core.pb.go

问题 严重性 修复方案
缺少 PeerBinding 类型 手动添加或重新生成
可能有其他新字段缺失 全面对比 proto 文件

🎯 下一步行动

立即执行(推荐顺序)

  1. 安装 protoc

    choco install protoc
    # 或从 GitHub 下载
    
  2. 重新生成 proto 代码

    cd e:\Project\MeshRay
    protoc --go_out=. --go-grpc_out=. proto/core.proto
    
  3. 验证编译

    go build ./...
    
  4. 修复 core_client.go

    • 适配新的 proto API
    • 删除 Unbind 相关代码
    • 调整字段名称

备选方案

如果无法安装 protoc

  1. 手动在 proto/core.pb.go 中添加 PeerBinding
  2. 修改 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 包的模块

💡 建议

短期建议

  1. 安装 protoc - 这是最直接的解决方案
  2. 重新生成 proto 代码 - 一次性解决问题
  3. 验证编译 - 确保所有模块正常

长期建议

  1. 考虑去除 proto 依赖 - 直接调用 Core API
  2. 简化架构 - 减少不必要的抽象层
  3. 文档化 - 记录 proto 更新流程

更新时间:2026-03-24 05:00
版本:v2.2.0
状态:Core 模块 100% 完成,proto 代码待生成