dsh-session-cloud 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -1
- package/lib/sync/engine.js +5 -0
- package/lib/sync/restore.js +1 -0
- package/lib/sync/state.d.ts +2 -0
- package/lib/sync/state.js +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## 0.1.
|
|
3
|
+
## 0.1.5
|
|
4
|
+
|
|
5
|
+
### 修复
|
|
6
|
+
|
|
7
|
+
- **状态自愈:曾被「ENOENT 静默跳过」污染的会话恢复上传**
|
|
8
|
+
根因:旧版把 locate 失败的会话按「未物化」静默记录 `localRevision` 却
|
|
9
|
+
从未上传过一个字节,`needsSync` 因此永远判定「已同步」——即使修复了
|
|
10
|
+
文件名推导,这些会话也不会重新进同步队列(表现为「成功 0」且无报错)。
|
|
11
|
+
修复:
|
|
12
|
+
- `needsSync` 自愈判定:`uploadedBytes === 0` 且无恢复抑制标记的条目
|
|
13
|
+
一律视为待同步,被污染的会话自动重新上传,无需手工清理 state;
|
|
14
|
+
- `markRestoredSynced` 写入 `restoredAt` 标记区分「恢复落位待续写」
|
|
15
|
+
的合法抑制条目,自愈判定不误伤(恢复后未续写不回传)。
|
|
16
|
+
|
|
17
|
+
## 0.1.4
|
|
4
18
|
|
|
5
19
|
适配 dsh 0.1.3-alpha.1(源码版)的两处兼容修复:
|
|
6
20
|
|
package/lib/sync/engine.js
CHANGED
|
@@ -97,6 +97,11 @@ export class SyncEngine {
|
|
|
97
97
|
this.backoff.delete(snapshot.header.id);
|
|
98
98
|
return true;
|
|
99
99
|
}
|
|
100
|
+
// 自愈:从未上传过任何字节、又不是恢复抑制(restoredAt)的条目,其
|
|
101
|
+
// localRevision 记录不可信——历史上被「ENOENT 静默跳过」污染过的会话
|
|
102
|
+
// 曾因此永远卡在「已同步」假象里。一律视为待同步,宁可重试不可漏传。
|
|
103
|
+
if (state !== undefined && state.uploadedBytes === 0 && !state.restoredAt)
|
|
104
|
+
return true;
|
|
100
105
|
if (state?.localRevision === snapshot.revision && wait === undefined)
|
|
101
106
|
return false;
|
|
102
107
|
return true;
|
package/lib/sync/restore.js
CHANGED
package/lib/sync/state.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface SessionSyncState {
|
|
|
14
14
|
lastTag: string;
|
|
15
15
|
/** 上次处理到的 sessionPersistence revision(不透明令牌) */
|
|
16
16
|
localRevision: string;
|
|
17
|
+
/** 恢复抑制标记(markRestoredSynced 写入):本地续写前不回传 */
|
|
18
|
+
restoredAt?: number;
|
|
17
19
|
/** meta 折叠累积 */
|
|
18
20
|
eventCount: number;
|
|
19
21
|
title?: string;
|
package/lib/sync/state.js
CHANGED
|
@@ -12,6 +12,7 @@ const sessionStateSchema = z.object({
|
|
|
12
12
|
lastSegmentIndex: z.number().int().min(-1),
|
|
13
13
|
lastTag: z.string(),
|
|
14
14
|
localRevision: z.string(),
|
|
15
|
+
restoredAt: z.number().optional(),
|
|
15
16
|
eventCount: z.number().int().nonnegative(),
|
|
16
17
|
title: z.string().optional(),
|
|
17
18
|
updatedAt: z.number(),
|