fix(transfer): scope replay omission counts per subscriber

This commit is contained in:
t8y2 committed 2026-07-28 12:43:36 +08:00
1 parent 8ac282cc37
commit 8d1472f7af
2 files changed
+149 -22

No files matched your search

@@ -206,13 +206,58 @@ describe("data transfer failure details", () => {
expect(task.transferFailuresOmitted).toBe(150);
expect(task.transferFailures?.[0]).toEqual({ table: "table_0", error: "updated retained failure" });
});
tracker.updateDataTransferTask(task.exportId, {
...transferProgress(task.exportId, "done"),
transferFailuresOmitted: 12,
});
it("counts omitted failures once for an online subscription", () => {
const tracker = useExportTracker();
const task = tracker.addDataTransferTask("online-failures", "many tables", 250);
expect(task.transferFailuresOmitted).toBe(162);
for (let index = 0; index < 250; index += 1) {
tracker.updateDataTransferTask(task.exportId, {
...transferProgress(task.exportId, "error", false),
table: `table_${index}`,
error: `failure ${index}`,
});
}
tracker.updateDataTransferTask(task.exportId, transferProgress(task.exportId, "done"));
expect(task.transferFailures).toHaveLength(MAX_TRANSFER_FAILURE_DETAILS);
expect(task.transferFailuresOmitted).toBe(150);
});
it("combines pre-subscription and local omissions for a mid-transfer subscription", () => {
const tracker = useExportTracker();
const task = tracker.addDataTransferTask("mid-transfer-failures", "many tables", 250);
for (let index = 12; index < 250; index += 1) {
tracker.updateDataTransferTask(task.exportId, {
...transferProgress(task.exportId, "error", false),
table: `table_${index}`,
error: `failure ${index}`,
...(index === 249 ? { transferFailuresOmitted: 12 } : {}),
});
}
tracker.updateDataTransferTask(task.exportId, transferProgress(task.exportId, "done"));
expect(task.transferFailures).toHaveLength(MAX_TRANSFER_FAILURE_DETAILS);
expect(task.transferFailuresOmitted).toBe(150);
});
it("combines replay and local omissions for a delayed subscription", () => {
const tracker = useExportTracker();
const task = tracker.addDataTransferTask("delayed-failures", "many tables", 250);
for (let index = 12; index < 250; index += 1) {
tracker.updateDataTransferTask(task.exportId, {
...transferProgress(task.exportId, "error", false),
table: `table_${index}`,
error: `failure ${index}`,
});
}
tracker.updateDataTransferTask(task.exportId, { ...transferProgress(task.exportId, "done"), transferFailuresOmitted: 12 });
expect(task.transferFailures).toHaveLength(MAX_TRANSFER_FAILURE_DETAILS);
expect(task.transferFailuresOmitted).toBe(150);
});
it("limits individual and total UTF-8 error detail bytes without splitting characters", () => {