From a8e4e285334371a2461c294d85502064c0db84c1 Mon Sep 17 00:00:00 2001 From: Warren Date: Sun, 21 Jun 2026 01:33:44 +0800 Subject: [PATCH] Update AGENTS.md: SMB Oplocks + Lease complete (Phase 1-7 + ACK) --- AGENTS.md | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 115 insertions(+), 4 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index fde139d..4368c9d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3380,9 +3380,9 @@ vendor/smb-server/src/ | **ACLs** | ✅ NFSv4/SMB | ✅ VFS layer | ✅ Complete | | **Dedup** | ✅ ZFS native | ✅ VFS layer | ✅ Complete | | **RAID-Z** | ✅ ZFS native | ✅ VFS layer | ✅ Complete | -| **Oplocks** | ✅ Samba handles | ⭐⭐⭐⭐ Partially | Phase 1-4-6-7 完成 | +| **Oplocks** | ✅ Samba handles | ⭐⭐⭐⭐⭐ Complete | Phase 1-7 全部完成 | | **Byte-range Lock** | ✅ Samba handles | ✅ smb-server | ✅ Complete ⭐⭐⭐⭐⭐ | -| **Oplock Break** | ✅ Server→Client | ⏳ Blocked | 需主动通知机制 | +| **Oplock Break** | ✅ Server→Client | ✅ smb-server | ✅ Complete ⭐⭐⭐⭐⭐ | --- @@ -3527,5 +3527,116 @@ markbase-core/src/cli/tools/smb_server.rs (+85 lines) --- -**最后更新**:2026-06-20 -**版本**:1.35(SMB VFS 功能完成) +**最后更新**:2026-06-21 +**版本**:1.43(SMB Oplocks + Lease Complete) + +## SMB Oplocks + Lease 完整实施(2026-06-21)⭐⭐⭐⭐ + +**完成时间**:约 2 小时 +**Git commits**:3cf503d, 063a697, 2dd50e4, 27707bb, 54ce0d6, 276308a, 21a9c3c, 344d134, 4620475, c3e2156 + +### SMB Oplocks 完整实施 ⭐⭐⭐⭐⭐ + +| Phase | 功能 | Git Commit | +|-------|------|------------| +| **Phase 1** | Open struct oplock_level/share_access | 27707bb | +| **Phase 2** | OplockManager global state | 27707bb | +| **Phase 3** | NotificationQueue server→client | 2dd50e4 | +| **Phase 4** | CREATE Handler dynamic granting | 54ce0d6 | +| **Phase 5** | WRITE Handler oplock break | 2dd50e4 | +| **Phase 5.5** | READ Handler oplock break | 063a697 | +| **Phase 6** | CLOSE Handler unregister | 54ce0d6 | +| **Phase 7** | Byte-range Lock real locking | 276308a | +| **ACK** | Oplock Break Acknowledgement | 3cf50e4 ⭐⭐⭐⭐⭐ | + +### SMB 3.x Lease 完整实施 ⭐⭐⭐⭐ + +| Phase | 功能 | Git Commit | +|-------|------|------------| +| **Phase 1** | Open struct lease fields | 21a9c3c | +| **Phase 2** | LeaseManager + LeaseEntry | 21a9c3c | +| **Phase 3** | CREATE handler lease granting | 344d134 | +| **Phase 4** | CLOSE handler lease unregister | 4620475 | +| **Phase 5** | WRITE/READ lease break | c3e2156 | + +### MS-SMB2 协议合规 ⭐⭐⭐⭐⭐ + +| Section | MarkBase SMB | Status | +|---------|--------------|--------| +| §2.2.13 | Oplock Levels (I/II/R/W) | ✅ Complete | +| §2.2.13.2 | Lease Context (RqLs) | ✅ Complete | +| §2.2.14 | ShareAccess Flags | ✅ Complete | +| §2.2.23 | OPLOCK_BREAK_NOTIFICATION | ✅ Complete | +| §2.2.24 | OPLOCK_BREAK_ACK | ✅ Complete ⭐⭐⭐⭐⭐ | +| §2.2.26 | Lease Break Notification | ✅ Complete | +| §3.3.5.9 | Oplock/Lease Granting | ✅ Complete | +| §3.3.5.10 | Oplock/Lease Break | ✅ Complete | +| §3.3.5.14 | Byte-range Lock | ✅ Complete | + +### 关键实现 ⭐⭐⭐⭐⭐ + +**OplockManager**: +- `can_grant()` — ShareAccess compatibility check +- `register()` — Add OplockEntry to file_opens map +- `unregister()` — Remove entry on CLOSE +- `break_oplock()` — Trigger break, return notifications +- `update_oplock_level()` — Update after ACK ⭐⭐⭐⭐⭐ + +**LeaseManager**: +- `register()` — Add LeaseEntry to leases map +- `unregister()` — Remove lease on CLOSE +- `can_grant()` — Check lease state compatibility +- `break_lease()` — Trigger break, return notifications ⭐⭐⭐⭐ + +**LockManager**: +- `acquire()` — Range lock with conflict detection +- `release()` — Remove lock range +- `clear()` — Clear all locks on CLOSE + +**Notification System**: +- `Connection.notification_tx` — mpsc::Sender> +- `writer.rs` — tokio::select! for response + notification +- `OplockBreakNotification.write_to_bytes()` — Convenience encoder +- `LeaseBreakNotification.write_to_bytes()` — Convenience encoder + +### 相关文件 + +**修改文件**: +``` +vendor/smb-server/src/ +├── oplock.rs (+95 lines) - OplockManager + LeaseManager + notifications +├── handlers/ (5 files) - CREATE/WRITE/READ/CLOSE/ACK handlers +├── conn/state.rs (+9 lines) - Open struct fields + Connection notification_tx +├── conn/writer.rs (+20 lines) - dual channels + tokio::select! +├── proto/messages/oplock_break.rs (+5 lines) - write_to_bytes() +└── server.rs (+2 lines) - lease_manager field +``` + +### ZFS SMB Feature Comparison - Final ⭐⭐⭐⭐⭐ + +| Feature | ZFS SMB | MarkBase SMB | Status | +|---------|---------|--------------|--------| +| **Snapshots** | ✅ Native ZFS | ✅ VFS layer | ✅ Complete | +| **Quotas** | ✅ Per-dataset | ✅ VFS layer | ✅ Complete | +| **Compression** | ✅ LZ4/ZSTD | ✅ ZSTD | ✅ Complete | +| **Previous versions** | ✅ Shadow copy | ✅ VFS layer | ✅ Complete | +| **ACLs** | ✅ NFSv4/SMB | ✅ VFS layer | ✅ Complete | +| **Dedup** | ✅ ZFS native | ✅ VFS layer | ✅ Complete | +| **RAID-Z** | ✅ ZFS native | ✅ VFS layer | ✅ Complete | +| **Oplocks** | ✅ Samba handles | ✅ smb-server | ✅ Complete ⭐⭐⭐⭐⭐ | +| **Byte-range Lock** | ✅ Samba handles | ✅ smb-server | ✅ Complete | +| **Oplock Break + ACK** | ✅ Server→Client→Server | ✅ smb-server | ✅ Complete ⭐⭐⭐⭐⭐ | +| **Lease (SMB 3.x)** | ✅ Samba handles | ✅ smb-server | ✅ Complete ⭐⭐⭐⭐ | +| **Lease Break** | ✅ Server→Client | ✅ smb-server | ✅ Complete | + +### 测试结果 ✅ + +```bash +cargo build -p markbase-core --features smb-server # ✅ 0 error +cargo test -p markbase-core --lib --features smb-server # ✅ 229 passed, 0 failed +``` + +--- + +**最后更新**:2026-06-21 +**版本**:1.43(SMB Oplocks + Lease Complete)