diigo-cache: dispose RPC stubs after each fetch; one fetch per miss
Two bugs in page()'s miss path, found while building the fill job: - the webapp stubs (app, pathjoin, query) were never disposed, which kept the DO from being evicted (evictDurableObject hung after a single miss); they are now disposed once the page is in hand - a miss on page n > 1 also fetched page 1 and threw it away, doubling diigo calls; every page carries `total`, so only page n is fetched Regression test: a miss, then eviction, then a cache hit. tsconfig adds the ESNext.Disposable lib for Symbol.dispose. Generated-by: Claude Opus 5.5
This commit is contained in:
1 parent
cf5ccce4e2
commit
530942f5d9
3 files changed
+30
-13
No files matched your search
@@ -1,5 +1,5 @@
|
||||
import { env } from "cloudflare:workers";
|
||||
import { runInDurableObject } from "cloudflare:test";
|
||||
import { evictDurableObject, runInDurableObject } from "cloudflare:test";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import worker from "../src/index.js";
|
||||
import { toWebkey } from "../src/webkeys.js";
|
||||
@@ -68,6 +68,16 @@ describe("PublicCache", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("eviction", () => {
|
||||
it("a cache miss leaves no undisposed RPC stubs to block eviction", async () => {
|
||||
const stub = testEnv.CACHE_DO.get(testEnv.CACHE_DO.newUniqueId());
|
||||
await stub.setup({ webappId: WEBAPP_ID });
|
||||
await stub.page(1, 24);
|
||||
await evictDurableObject(stub);
|
||||
expect((await stub.page(1, 24)).cached).toBe(true);
|
||||
}, 3000);
|
||||
});
|
||||
|
||||
describe("DiigoCache", () => {
|
||||
it("keeps every item of a page, each under its own link_id", async () => {
|
||||
const stub = testEnv.CACHE_DO.get(testEnv.CACHE_DO.newUniqueId());
|
||||
|
||||
Reference in new issue
Block a user