feat: support recreate watcher process after reconnected#4517
Conversation
|
/next |
|
""" Walkthrough本次更改主要围绕文件服务和文件搜索相关逻辑进行调整。文件搜索功能中的排除模式由硬编码数组改为动态获取默认排除规则。文件服务客户端引入了日志记录器,增强了文件变更监听的管理,新增了重连(reconnect)方法以支持断线重连和资源释放。文件服务贡献类也新增了重连处理逻辑。文件树相关的重连和重新监听逻辑被移除。文件监视进程管理器则在创建新进程时会关闭已有的重复连接,防止多实例冲突。接口声明也相应扩展以支持新方法。 Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant FileServiceContribution
participant FileServiceClient
participant FileProvider
participant Logger
User->>FileServiceContribution: 触发 onReconnect()
FileServiceContribution->>FileServiceClient: 调用 reconnect()
FileServiceClient->>FileProvider: 初始化(如支持)
loop 遍历所有 watcher
FileServiceClient->>FileServiceClient: 重新调用 watchFileChanges
end
FileServiceClient-->>FileServiceContribution: 完成(或抛出错误)
FileServiceContribution->>Logger: 记录错误(如有)
Suggested labels
Suggested reviewers
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
yarn install v1.22.22 📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms (9)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (3)
packages/file-service/src/common/file-service-client.ts (1)
91-94: 接口新增方法缺少说明与使用示例
reconnect与dispose的加入非常必要,但接口注释尚未同步更新,也缺少对调用时机的说明。建议为两个新方法补充 JSDoc,阐明:
- 何时应显式调用
reconnect(如网络重连、IPC 重建场景)。dispose需要释放哪些资源、能否多次调用。
这样可避免实现方语义不一致的问题。packages/file-service/src/browser/file-service-contribution.ts (1)
31-36: 重复注入同一 Token 导致维护成本增加
fileSystem(FileServiceClient)本身已实现IFileServiceClient,再次注入fileServiceClient属性意义不大,且易造成以后两处对象引用不一致。建议保留一处即可:-@Autowired(IFileServiceClient) -protected readonly fileServiceClient: IFileServiceClient; +// 直接复用 fileSystem 即可同时,
ILogger在 browser 侧使用的是@opensumi/ide-core-browser的 Token,而其它文件使用@opensumi/ide-core-common,请保持一致以避免依赖冲突。packages/file-service/src/browser/file-service-client.ts (1)
119-121: ILogger Token 不统一本文件从
ide-core-common注入ILogger,而file-service-contribution.ts从ide-core-browser注入。若两处 Token 不同,将导致注入两个实例。请确认实际导出位置并保持一致。
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
packages/ai-native/src/browser/components/ChatMentionInput.tsx(2 hunks)packages/ai-native/src/browser/mcp/tools/fileSearch.ts(2 hunks)packages/file-service/src/browser/file-service-client.ts(4 hunks)packages/file-service/src/browser/file-service-contribution.ts(3 hunks)packages/file-service/src/common/file-service-client.ts(1 hunks)packages/file-service/src/node/watcher-process-manager.ts(1 hunks)packages/file-tree-next/src/browser/file-tree-contribution.ts(0 hunks)packages/file-tree-next/src/browser/file-tree.service.ts(0 hunks)
💤 Files with no reviewable changes (2)
- packages/file-tree-next/src/browser/file-tree.service.ts
- packages/file-tree-next/src/browser/file-tree-contribution.ts
🧰 Additional context used
🧬 Code Graph Analysis (4)
packages/ai-native/src/browser/components/ChatMentionInput.tsx (1)
packages/core-common/src/preferences/file-watch.ts (1)
defaultFilesWatcherExcludes(1-6)
packages/ai-native/src/browser/mcp/tools/fileSearch.ts (1)
packages/core-common/src/preferences/file-watch.ts (1)
defaultFilesWatcherExcludes(1-6)
packages/file-service/src/browser/file-service-contribution.ts (3)
packages/file-service/src/common/file-service-client.ts (2)
IFileServiceClient(27-27)IFileServiceClient(29-116)packages/core-common/src/types/file.ts (1)
IFileServiceClient(12-12)packages/core-common/src/log.ts (2)
ILogger(305-305)ILogger(306-306)
packages/file-service/src/browser/file-service-client.ts (4)
packages/core-common/src/log.ts (2)
ILogger(305-305)ILogger(306-306)packages/connection/src/common/types.ts (1)
ILogger(1-5)packages/file-service/src/common/watcher.ts (1)
IFileServiceWatcher(17-21)packages/utils/src/uri.ts (2)
URI(6-6)URI(17-311)
⏰ Context from checks skipped due to timeout of 90000ms (8)
- GitHub Check: 🚀🚀🚀 Next Version for pull request
- GitHub Check: unittest (ubuntu-latest, 18.x, node)
- GitHub Check: unittest (ubuntu-latest, 18.x, jsdom)
- GitHub Check: unittest (macos-latest, 18.x, jsdom)
- GitHub Check: build (macos-latest, 20.x)
- GitHub Check: build (ubuntu-latest, 20.x)
- GitHub Check: build-windows
- GitHub Check: ubuntu-latest, Node.js 20.x
🔇 Additional comments (5)
packages/ai-native/src/browser/mcp/tools/fileSearch.ts (2)
6-6: 优秀的导入添加引入
defaultFilesWatcherExcludes常量可以实现文件排除模式的统一管理,避免硬编码。这是一个很好的改进。
67-67: 统一使用配置的排除模式,提高一致性将硬编码的排除模式数组
['**/node_modules/**']替换为Object.keys(defaultFilesWatcherExcludes),这样做有几个好处:
- 与系统其他部分使用相同的排除规则,保持一致性
- 扩展了排除范围,现在不仅排除 node_modules,还包括 .git 相关目录等
- 当需要调整排除规则时,只需修改一处配置
这个修改很好地提高了代码的可维护性和灵活性。
packages/ai-native/src/browser/components/ChatMentionInput.tsx (2)
9-9: 合理的导入添加添加
defaultFilesWatcherExcludes的导入,为后续使用统一的文件排除模式做准备。
220-220: 统一的排除策略应用使用
Object.keys(defaultFilesWatcherExcludes)代替之前可能硬编码的排除模式数组,这个改动:
- 确保了文件夹搜索与文件搜索使用相同的排除规则
- 简化了维护工作,当排除规则需要调整时只需要修改
defaultFilesWatcherExcludes定义- 增强了代码的一致性和可读性
这是一个很好的实践,消除了代码中的重复定义。
packages/file-service/src/browser/file-service-contribution.ts (1)
63-65: onReconnect 方法缺少生命周期挂载点
ClientAppContribution并未强制调用onReconnect,需要确认框架层会在重连事件发生时触发此方法;否则此实现不会生效。若需监听 WebSocket/IPC 重连事件,应通过IConnectionService或相关 EventBus 订阅,再显式调用fileSystem.reconnect()。
|
🎉 PR Next publish successful! 3.8.3-next-1745295840.0 |
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #4517 +/- ##
==========================================
- Coverage 53.12% 53.11% -0.02%
==========================================
Files 1665 1665
Lines 102711 102731 +20
Branches 22240 22240
==========================================
Hits 54567 54567
- Misses 40050 40065 +15
- Partials 8094 8099 +5
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
|
/next |
|
🎉 PR Next publish successful! 3.8.3-next-1745307078.0 |
|
/next |
|
🎉 PR Next publish successful! 3.8.3-next-1745309832.0 |
Types
Background or solution
Changelog
支持 Watcher Process 的重连逻辑
Summary by CodeRabbit