224 lines
5.6 KiB
Markdown
224 lines
5.6 KiB
Markdown
# 其他模块修复进度报告
|
||
|
||
## 📊 总体状态
|
||
|
||
- ✅ **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` 中手动添加:
|
||
```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(推荐长期方案)
|
||
```bash
|
||
# Windows 安装 protoc
|
||
choco install protoc
|
||
# 或者下载二进制文件
|
||
```
|
||
|
||
然后重新生成:
|
||
```bash
|
||
protoc --go_out=. --go-grpc_out=. proto/core.proto
|
||
```
|
||
|
||
**优点**:一劳永逸,正确生成
|
||
**缺点**:需要安装工具
|
||
|
||
---
|
||
|
||
#### 方案 C:重构 core_client.go(彻底方案)
|
||
不依赖 proto 包,直接使用 Core 模块的 Go API:
|
||
|
||
```go
|
||
// 旧代码
|
||
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 删除)
|
||
|
||
**需要修改的代码**:
|
||
|
||
```go
|
||
// 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** ⏳
|
||
```bash
|
||
choco install protoc
|
||
# 或从 GitHub 下载
|
||
```
|
||
|
||
2. **重新生成 proto 代码** ⏳
|
||
```bash
|
||
cd e:\Project\MeshRay
|
||
protoc --go_out=. --go-grpc_out=. proto/core.proto
|
||
```
|
||
|
||
3. **验证编译** ⏳
|
||
```bash
|
||
go build ./...
|
||
```
|
||
|
||
4. **修复 core_client.go** ⏳
|
||
- 适配新的 proto API
|
||
- 删除 Unbind 相关代码
|
||
- 调整字段名称
|
||
|
||
### 备选方案
|
||
|
||
如果无法安装 protoc:
|
||
1. 手动在 `proto/core.pb.go` 中添加 `PeerBinding`
|
||
2. 修改 `core_client.go` 避免使用 Unbind
|
||
|
||
---
|
||
|
||
## 📊 影响评估
|
||
|
||
### 当前编译状态
|
||
|
||
```bash
|
||
# 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 代码待生成*
|