iop/agent-task/edge_node_arch/plan_1.log
toki c46874055a feat: edge node unit tests and related updates
- Add edge node unit tests and transport package
- Add node test client and related artifacts
- Update bootstrap, node, and config modules
- Add proto generated files
- Update Makefile and configuration files
2026-05-02 20:09:55 +09:00

79 lines
2 KiB
Text

<!-- task=edge_node_arch plan=1 tag=REVIEW_REFACTOR -->
# Plan - REVIEW_REFACTOR
## 개요
date=2026-05-02
task=edge_node_arch, plan=1, tag=REVIEW_REFACTOR
parent=REFACTOR (code_review_0.log)
## 배경
REFACTOR 코드리뷰에서 발견된 Suggested 이슈 수정.
---
## [REVIEW_REFACTOR-1] onNodeConnected disconnect 리스너 순서 수정
### 문제
`apps/edge/internal/transport/server.go`의 `onNodeConnected` 고루틴에서
`s.registry.Register(entry)` 이후에 `client.AddDisconnectListener`가 등록됨.
두 호출 사이에 node가 disconnect되면 이벤트가 리스너 등록 전에 발생해
registry에 stale entry가 영구 잔존할 수 있음.
### 해결
`AddDisconnectListener` 블록을 `registry.Register` 이전으로 이동.
Before (`server.go:101-110`):
```go
s.registry.Register(entry)
s.logger.Info("node registered",
zap.String("node_id", entry.NodeID),
zap.Int("adapters", len(entry.Adapters)),
)
client.AddDisconnectListener(func(_ *toki.TcpClient) {
s.registry.Unregister(entry.NodeID)
s.logger.Info("node unregistered", zap.String("node_id", entry.NodeID))
})
```
After:
```go
client.AddDisconnectListener(func(_ *toki.TcpClient) {
s.registry.Unregister(entry.NodeID)
s.logger.Info("node unregistered", zap.String("node_id", entry.NodeID))
})
s.registry.Register(entry)
s.logger.Info("node registered",
zap.String("node_id", entry.NodeID),
zap.Int("adapters", len(entry.Adapters)),
)
```
### 체크리스트
- [x] `server.go`에서 `AddDisconnectListener` 블록이 `registry.Register` 이전에 위치
### 테스트 결정
기존 registry_test.go는 Register/Unregister 순서를 직접 테스트하지 않으므로 코드 변경만으로 충분.
### 중간 검증
```
$ PATH=/config/go-sdk/go/bin:/config/go-sdk/bin:$PATH go build ./apps/edge/...
```
---
## 최종 검증
```
$ PATH=/config/go-sdk/go/bin:/config/go-sdk/bin:$PATH go build ./...
$ PATH=/config/go-sdk/go/bin:/config/go-sdk/bin:$PATH go test ./...
```