Skip to content
Draft
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
fbbe19e
add KV cache for C1 index
juliangruber Oct 1, 2025
de444fb
add passing test
juliangruber Oct 2, 2025
0d3f60a
add passing test
juliangruber Oct 2, 2025
69291bf
add missing wrangler config
juliangruber Oct 2, 2025
a093922
add test, fix implementation
juliangruber Oct 2, 2025
e8608ef
fix order
juliangruber Oct 2, 2025
8abd8ef
add passing test
juliangruber Oct 2, 2025
c504896
add passing test
juliangruber Oct 2, 2025
8f879bf
fix indentation
juliangruber Oct 2, 2025
6b5f822
fix unrelated test
juliangruber Oct 2, 2025
624b184
add passing test
juliangruber Oct 2, 2025
b66e758
Merge branch 'main' into add/index-cache
juliangruber Oct 2, 2025
5f18618
update KV ids
juliangruber Oct 2, 2025
19cb854
Update piece-retriever/bin/piece-retriever.js
juliangruber Oct 6, 2025
ed6c067
fix lint
juliangruber Oct 6, 2025
4acf720
Merge branch 'main' into add/index-cache
juliangruber Oct 7, 2025
7101bb0
fix lint & types
juliangruber Oct 7, 2025
fe5d246
refactor `sqlPlaceholders`
juliangruber Oct 7, 2025
d149614
cache bad bits separately (wip)
juliangruber Oct 7, 2025
7158b9d
Merge branch 'main' into add/index-cache
juliangruber Oct 15, 2025
f4115c4
implement strategy
juliangruber Oct 15, 2025
738399e
fmt
juliangruber Oct 15, 2025
fd35178
fix type errors
juliangruber Oct 15, 2025
93b0acc
fix test
juliangruber Oct 15, 2025
d6b095f
clean up bad bits tables
juliangruber Oct 15, 2025
117f878
fix test
juliangruber Oct 17, 2025
982b25a
fix test
juliangruber Oct 17, 2025
d4d1fec
move bad bits to kv
juliangruber Oct 20, 2025
d850cfa
chore: fix TypeScript errors
bajtos Oct 20, 2025
9107a5d
fix: remove apply-migrations.js reference from vitest.config.js
pyropy Oct 20, 2025
56e807d
Merge branch 'update/move-bad-bits-to-kv' into add/index-cache
juliangruber Oct 20, 2025
720fb95
move `getAllBadBitHashes`
juliangruber Oct 21, 2025
41ecdb9
only write etag if was capped
juliangruber Oct 21, 2025
bc780ed
give bad bits its own kv namespace
juliangruber Oct 21, 2025
c158b88
refactor `persistUpdates()`
juliangruber Oct 21, 2025
1a72ebe
allow `latest-hashes:*` to shrink
juliangruber Oct 21, 2025
112e8dd
Apply suggestion from @pyropy
juliangruber Oct 21, 2025
a818ad3
Apply suggestion from @pyropy
juliangruber Oct 21, 2025
eb3c03f
Apply suggestion from @pyropy
juliangruber Oct 21, 2025
174d6bd
refactor using `Set#difference()`
juliangruber Oct 21, 2025
97332cf
fmt
juliangruber Oct 21, 2025
30cd11b
Merge branch 'main' into update/move-bad-bits-to-kv
juliangruber Oct 21, 2025
17de33a
Merge branch 'update/move-bad-bits-to-kv' into add/index-cache
juliangruber Oct 21, 2025
3b2a846
rename `KV` to `INDEX_CACHE_KV`
juliangruber Oct 21, 2025
2270be5
refactor
juliangruber Oct 21, 2025
6e1e6cd
test: reliably clear all kv data
juliangruber Oct 22, 2025
d786f26
fix `wasCapped`
juliangruber Oct 22, 2025
0b891ef
refactor
juliangruber Oct 22, 2025
8f694c5
Update bad-bits/lib/store.js
juliangruber Oct 22, 2025
7d84c55
use r2 for `latest-hashes`
juliangruber Oct 22, 2025
e141fbe
Merge branch 'update/move-bad-bits-to-kv' of https://github.com/filbe…
juliangruber Oct 22, 2025
14c9fbc
Merge branch 'main' into update/move-bad-bits-to-kv
juliangruber Oct 22, 2025
9aed565
Merge branch 'update/move-bad-bits-to-kv' into add/index-cache
juliangruber Oct 22, 2025
248a038
fix test
juliangruber Oct 22, 2025
48597ec
Merge branch 'main' into add/index-cache
juliangruber Oct 22, 2025
041f09f
rebuild
juliangruber Oct 22, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions indexer/lib/fwss-handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,27 @@ export async function handleFWSSServiceTerminated(env, payload) {
)
.bind(String(payload.data_set_id))
.run()
await clearDataSetIndexCache(env, payload.data_set_id)
}

/**
* @param {Env} env
* @param {string | number} dataSetId
*/
async function clearDataSetIndexCache(env, dataSetId) {
const { results } = await env.DB.prepare(
`
SELECT data_sets.payer_address AS payerAddress, pieces.cid AS pieceCID
FROM data_sets
INNER JOIN pieces ON pieces.data_set_id = data_sets.id
WHERE data_sets.id = ?
`,
)
.bind(String(dataSetId))
.run()
await Promise.all(
results.map(async ({ payerAddress, pieceCID }) => {
await env.KV.delete(`${payerAddress}/${pieceCID}`)
}),
)
}
27 changes: 27 additions & 0 deletions indexer/lib/pdp-verifier-handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export async function insertDataSetPiece(
* @param {(number | string)[]} pieceIds
*/
export async function removeDataSetPieces(env, dataSetId, pieceIds) {
await clearDataSetPiecesIndexCache(env, dataSetId, pieceIds)
await env.DB.prepare(
`
DELETE FROM pieces
Expand All @@ -44,3 +45,29 @@ export async function removeDataSetPieces(env, dataSetId, pieceIds) {
.bind(String(dataSetId), ...pieceIds.map(String))
.run()
}

/**
* @param {Env} env
* @param {number | string} dataSetId
* @param {(number | string)[]} pieceIds
*/
async function clearDataSetPiecesIndexCache(env, dataSetId, pieceIds) {
const { results } = await env.DB.prepare(
`
SELECT data_sets.payer_address AS payerAddress, pieces.cid AS pieceCID
FROM data_sets
INNER JOIN pieces ON pieces.data_set_id = data_sets.id
WHERE data_sets.id = ? AND pieces.id IN (${new Array(pieceIds.length)
.fill(null)
.map(() => '?')
.join(', ')})
`,
)
.bind(String(dataSetId), ...pieceIds.map(String))
.run()
await Promise.all(
results.map(async ({ payerAddress, pieceCID }) => {
await env.KV.delete(`${payerAddress}/${pieceCID}`)
}),
)
}
25 changes: 25 additions & 0 deletions indexer/lib/service-provider-registry-handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ export async function handleProductRemoved(env, providerId, productType) {
return new Response('OK', { status: 200 })
}

await clearServiceProviderIndexCache(env, providerId)
const result = await env.DB.prepare(
`
DELETE FROM service_providers WHERE id = ?
Expand All @@ -111,6 +112,7 @@ export async function handleProviderRemoved(env, providerId) {
return new Response('Bad Request', { status: 400 })
}

await clearServiceProviderIndexCache(env, providerId)
const result = await env.DB.prepare(
`
DELETE FROM service_providers WHERE id = ?
Expand Down Expand Up @@ -141,6 +143,7 @@ async function handleProviderServiceUrlUpdate(env, providerId, serviceUrl) {
`Provider service url updated (providerId=${providerId}, serviceUrl=${serviceUrl})`,
)

await clearServiceProviderIndexCache(env, providerId)
await env.DB.prepare(
`
INSERT INTO service_providers (
Expand All @@ -156,3 +159,25 @@ async function handleProviderServiceUrlUpdate(env, providerId, serviceUrl) {
.run()
return new Response('OK', { status: 200 })
}

/**
* @param {Env} env
* @param {string | number} providerId
*/
async function clearServiceProviderIndexCache(env, providerId) {
const { results } = await env.DB.prepare(
`
SELECT data_sets.payer_address AS payerAddress, pieces.cid AS pieceCID
FROM data_sets
INNER JOIN pieces ON pieces.data_set_id = data_sets.id
WHERE data_sets.service_provider_id = ?
`,
)
.bind(String(providerId))
.run()
await Promise.all(
results.map(async ({ payerAddress, pieceCID }) => {
await env.KV.delete(`${payerAddress}/${pieceCID}`)
}),
)
}
Loading
Loading