Skip to content

Commit 6a3b5cc

Browse files
authored
fix: expose getScheduledRemovals on storageContext (#490)
1 parent 8c7537e commit 6a3b5cc

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

packages/synapse-sdk/src/storage/context.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1149,6 +1149,25 @@ export class StorageContext {
11491149
return pieces
11501150
}
11511151

1152+
/**
1153+
* Get pieces scheduled for removal from this data set
1154+
* @returns Array of piece IDs scheduled for removal
1155+
*/
1156+
async getScheduledRemovals(): Promise<number[]> {
1157+
if (this._dataSetId == null) {
1158+
return []
1159+
}
1160+
1161+
const pdpVerifierAddress = this._warmStorageService.getPDPVerifierAddress()
1162+
const pdpVerifier = new PDPVerifier(this._synapse.getProvider(), pdpVerifierAddress)
1163+
1164+
try {
1165+
return await pdpVerifier.getScheduledRemovals(this._dataSetId)
1166+
} catch (error) {
1167+
throw createError('StorageContext', 'getScheduledRemovals', 'Failed to get scheduled removals', error)
1168+
}
1169+
}
1170+
11521171
/**
11531172
* Get all active pieces for this data set as an async generator.
11541173
* This provides lazy evaluation and better memory efficiency for large data sets.

packages/synapse-sdk/src/test/storage.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2010,6 +2010,46 @@ describe('StorageService', () => {
20102010
})
20112011
})
20122012

2013+
describe('getScheduledRemovals', () => {
2014+
it('should return scheduled removals for the data set', async () => {
2015+
server.use(
2016+
JSONRPC({
2017+
...presets.basic,
2018+
pdpVerifier: {
2019+
...presets.basic.pdpVerifier,
2020+
getScheduledRemovals: () => [[1n, 2n, 5n]],
2021+
},
2022+
})
2023+
)
2024+
2025+
const synapse = await Synapse.create({ signer })
2026+
const warmStorageService = await WarmStorageService.create(provider, ADDRESSES.calibration.warmStorage)
2027+
const context = await StorageContext.create(synapse, warmStorageService, {
2028+
dataSetId: 1,
2029+
})
2030+
2031+
const scheduledRemovals = await context.getScheduledRemovals()
2032+
2033+
assert.deepEqual(scheduledRemovals, [1, 2, 5])
2034+
})
2035+
2036+
it('should return an empty array when no data set is configured', async () => {
2037+
server.use(JSONRPC({ ...presets.basic }), PING())
2038+
2039+
const synapse = await Synapse.create({ signer })
2040+
const warmStorageService = await WarmStorageService.create(provider, ADDRESSES.calibration.warmStorage)
2041+
const context = await StorageContext.create(synapse, warmStorageService, {
2042+
dataSetId: 1,
2043+
})
2044+
2045+
;(context as any)._dataSetId = undefined
2046+
2047+
const scheduledRemovals = await context.getScheduledRemovals()
2048+
2049+
assert.deepEqual(scheduledRemovals, [])
2050+
})
2051+
})
2052+
20132053
describe('getPieces', () => {
20142054
it('should get all active pieces with pagination', async () => {
20152055
// Use actual valid PieceCIDs from test data

0 commit comments

Comments
 (0)