Update AGENTS.md: Phase 22 complete with 10 commits summary
This commit is contained in:
88
AGENTS.md
88
AGENTS.md
@@ -3639,49 +3639,58 @@ cargo test -p markbase-core --lib --features smb-server # ✅ 229 passed, 0 fai
|
|||||||
---
|
---
|
||||||
|
|
||||||
**最后更新**:2026-06-21
|
**最后更新**:2026-06-21
|
||||||
**版本**:1.44(WebDAV Phase 22 全面改進完成)
|
**版本**:1.45(WebDAV Phase 22 + 验证完成)
|
||||||
|
|
||||||
## Phase 22:WebDAV 全面改進完成(2026-06-21)⭐⭐⭐⭐⭐
|
## Phase 22:WebDAV 全面改進完成(2026-06-21)⭐⭐⭐⭐⭐
|
||||||
|
|
||||||
**完成時間**:约 2 小时
|
**完成時間**:约 4 小时
|
||||||
**新增代码量**:约 2100 行
|
**新增代码量**:约 2300 行
|
||||||
**Git commits**:6 commits (9acd174, 5000ba7, ab11983, 43c135e, 0322e2d)
|
**Git commits**:10 commits
|
||||||
|
|
||||||
### 改進清單 ⭐⭐⭐⭐⭐
|
### 改進清單 ⭐⭐⭐⭐⭐
|
||||||
|
|
||||||
| 等級 | 任務 | 內容 |
|
| 等級 | 任務 | 內容 | Git Commit |
|
||||||
|------|------|------|
|
|------|------|------|------------|
|
||||||
| **P0 #1** | flush 失敗修復 | `flushed` flag + Drop warning + proper error logging |
|
| **P0 #1** | flush 失敗修復 | `flushed` flag + Drop warning | 9acd174 |
|
||||||
| **P0 #2** | RwLock 中毒修復 | `try_read/try_write` recovery |
|
| **P0 #2** | RwLock 中毒修復 | `try_read/try_write` recovery | 9acd174 |
|
||||||
| **P0 #3** | 過期鎖清理 | `cleanup_expired_locks()` + `is_expired()` |
|
| **P0 #3** | 過期鎖清理 | `cleanup_expired_locks()` | 9acd174 |
|
||||||
| **P1 #4** | Props VFS 持久化 | `load_props/save_props/patch_props` via VFS |
|
| **P0 #4** | Mutex recovery | `recover_mutex/rwlock` helpers | b71510b |
|
||||||
| **P1 #5** | COPY/MOVE props | dead props sync on copy/rename |
|
| **P1 #5** | Props VFS 持久化 | `load_props/save_props` via VFS | 9acd174 |
|
||||||
| **P1 #6** | 原子 set_times | `set_atime/set_mtime` + `filetime` crate |
|
| **P1 #6** | COPY/MOVE props | dead props sync | 9acd174 |
|
||||||
| **P2 #7** | Async props | `tokio::spawn_blocking` for persistence |
|
| **P1 #7** | 原子 set_times | `set_atime/set_mtime` + filetime | 9acd174 |
|
||||||
| **P2 #8** | Cache TTL | `CachedHandler` + 300s TTL eviction |
|
| **P1 #8** | Conditional requests | dav-server 內建 ✅ | 验证 |
|
||||||
| **P3 #9** | MKCOL 405 | `vfs.exists()` check before create |
|
| **P1 #9** | Range requests | dav-server 內建 + test | 12ec190 |
|
||||||
| **額外** | Dead props 清理 | filter empty entries before persisting |
|
| **P2 #10** | Async props | `spawn_blocking` | 5000ba7 |
|
||||||
| **額外** | Metadata 改進 | `accessed()` + `executable()` + `mode` field |
|
| **P2 #11** | Cache TTL | `CachedHandler` 300s | 5000ba7 |
|
||||||
| **額外** | Error handling | `map_vfs_error()` helper |
|
| **P3 #12** | MKCOL 405 | `exists()` check | ab11983 |
|
||||||
|
| **P3 #13** | Quota enforcement | flush() quota check | a56207d |
|
||||||
|
| **額外** | Dead props 清理 | filter empty entries | 43c135e |
|
||||||
|
| **額外** | Metadata 改進 | `accessed/executable/mode` | 43c135e |
|
||||||
|
| **額外** | Error handling | `map_vfs_error()` | 0322e2d |
|
||||||
|
|
||||||
### 新增文件 ⭐⭐⭐⭐⭐
|
### 新增文件 ⭐⭐⭐⭐⭐
|
||||||
|
|
||||||
```
|
```
|
||||||
markbase-core/src/webdav_locks.rs (新增 310 行)
|
markbase-core/src/webdav_locks.rs (新增 420 行)
|
||||||
├── PersistedLs (DavLockSystem 实现)
|
├── PersistedLs (DavLockSystem 实现)
|
||||||
|
├── recover_mutex() helper
|
||||||
├── is_expired() + cleanup_expired_locks()
|
├── is_expired() + cleanup_expired_locks()
|
||||||
└── paths_overlap() 冲突检测
|
└── paths_overlap() 冲突检测
|
||||||
|
|
||||||
|
markbase-core/src/webdav_version.rs (新增 helper)
|
||||||
|
└── recover_rwlock() helper
|
||||||
```
|
```
|
||||||
|
|
||||||
### 修改文件 ⭐⭐⭐⭐⭐
|
### 修改文件 ⭐⭐⭐⭐⭐
|
||||||
|
|
||||||
```
|
```
|
||||||
markbase-core/src/webdav.rs (~1500 行)
|
markbase-core/src/webdav.rs (~1550 行)
|
||||||
├── VfsDavFile::flush() 四阶段重构
|
├── VfsDavFile::flush() 5阶段(quota check + 4 phases)
|
||||||
├── props_data RwLock error recovery
|
├── props_data RwLock error recovery
|
||||||
├── VfsDavMetaData: accessed/executable/mode
|
├── VfsDavMetaData: accessed/executable/mode
|
||||||
├── map_vfs_error() helper
|
├── map_vfs_error() helper
|
||||||
└── patch_props: spawn_blocking
|
├── patch_props: spawn_blocking
|
||||||
|
└── test_range_request
|
||||||
|
|
||||||
markbase-core/src/server.rs (~2600 行)
|
markbase-core/src/server.rs (~2600 行)
|
||||||
├── CachedHandler struct + Instant timestamp
|
├── CachedHandler struct + Instant timestamp
|
||||||
@@ -3691,6 +3700,41 @@ markbase-core/src/server.rs (~2600 行)
|
|||||||
markbase-core/src/vfs/mod.rs (+15 行)
|
markbase-core/src/vfs/mod.rs (+15 行)
|
||||||
├── set_atime() + set_mtime() trait methods
|
├── set_atime() + set_mtime() trait methods
|
||||||
|
|
||||||
|
markbase-core/src/vfs/local_fs.rs (+40 行)
|
||||||
|
├── filetime::set_file_atime/mtime
|
||||||
|
```
|
||||||
|
|
||||||
|
### 測試結果 ⭐⭐⭐⭐⭐
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cargo test -p markbase-core --lib # 289 passed, 0 failed
|
||||||
|
```
|
||||||
|
|
||||||
|
### dav-server 內建功能(已验证)✅
|
||||||
|
|
||||||
|
| 功能 | RFC | 状态 |
|
||||||
|
|------|-----|------|
|
||||||
|
| Conditional requests | RFC 7232 | ✅ If-Match/If-None-Match |
|
||||||
|
| Range requests | RFC 7233 | ✅ 206 Partial Content |
|
||||||
|
| ETag generation | RFC 7232 | ✅ DavMetaData.etag() |
|
||||||
|
| If-Range | RFC 7233 | ✅ Conditional Range |
|
||||||
|
| Multipart ranges | RFC 7233 | ✅ multipart/byteranges |
|
||||||
|
|
||||||
|
### 待解決(需架構性改變)⭐⭐⭐
|
||||||
|
|
||||||
|
| 任務 | 原因 |
|
||||||
|
|------|------|
|
||||||
|
| ACL enforcement | RFC 3744 需應用層實現 |
|
||||||
|
| Async VfsBackend | trait 改為 async |
|
||||||
|
| Streaming read | 大文件記憶體效率 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**最后更新**:2026-06-21
|
||||||
|
|
||||||
|
markbase-core/src/vfs/mod.rs (+15 行)
|
||||||
|
├── set_atime() + set_mtime() trait methods
|
||||||
|
|
||||||
markbase-core/src/vfs/local_fs.rs (+40 行)
|
markbase-core/src/vfs/local_fs.rs (+40 行)
|
||||||
├── filetime::set_file_atime() + set_file_mtime()
|
├── filetime::set_file_atime() + set_file_mtime()
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user