重构:TopicProcessor 状态管理系统与 Reset 方法优化
新增功能: - 添加 ProcessorState 状态类型(Idle/Starting/Running/Stopping/Stopped/Resetting/Error) - 添加 ProcessorStatus 结构体和状态管理方法(GetState/GetStatus/setState) - 实现状态转换逻辑和访问控制(CanWrite/CanQuery) - 新增 CanReset() 方法检查是否可执行重置操作 Reset 方法优化: - 重写 Reset() 方法,不再停止 processor - 只有在无待处理记录时才能执行重置 - 进入 Resetting 状态期间阻止所有读写操作 - 重置后自动恢复到之前的运行状态 - 正确关闭并重置 cursor 和 stats 组件 - 调整执行顺序:先关闭组件,再删除文件,后重新初始化 错误处理增强: - 添加 ErrProcessorResetting 和 ErrInvalidState 错误类型 - 添加 EventStateChanged 事件类型 - 修复 writer/index 为 nil 时的空指针问题 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -409,7 +409,7 @@ func (s *LogHub) NewTopicQuery(topic string) (*RecordQuery, error) {
|
||||
return nil, NewTopicError(topic, "get", ErrNotFound)
|
||||
}
|
||||
|
||||
return processor.Query(), nil
|
||||
return processor.Query()
|
||||
}
|
||||
|
||||
// GetProcessingIndex 获取指定 topic 的当前处理索引
|
||||
@@ -577,12 +577,13 @@ func (s *LogHub) ResetTopic(topic string) error {
|
||||
return fmt.Errorf("failed to reset processor: %w", err)
|
||||
}
|
||||
|
||||
// 如果 LogHub 正在运行,重新启动 processor
|
||||
// 如果 LogHub 正在运行且 processor 未运行,启动 processor
|
||||
// 注意:如果 Reset() 已经自动恢复到 Running 状态,就不需要再启动
|
||||
s.mu.RLock()
|
||||
running := s.running
|
||||
s.mu.RUnlock()
|
||||
|
||||
if running {
|
||||
if running && processor.GetState() != StateRunning {
|
||||
if err := processor.Start(); err != nil {
|
||||
return fmt.Errorf("failed to restart processor: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user