Update AGENTS.md: SMB Oplocks + Lease complete (Phase 1-7 + ACK)
This commit is contained in:
119
AGENTS.md
119
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<Vec<u8>>
|
||||
- `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)
|
||||
|
||||
Reference in New Issue
Block a user