Skip to content

Commit

Permalink
common: add pagination support to allocation queries
Browse files Browse the repository at this point in the history
  • Loading branch information
dwerner committed Nov 19, 2024
1 parent b663c65 commit 07c4aae
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ describe('Monitor: CI', () => {
test('Fetch subgraph deployments (unconstrained block)', async () => {
const deployments = await networkMonitor.subgraphDeployments()
await expect(deployments.length).toBeGreaterThan(500)
}, 30000)
}, 40000)
})

describe('Network layer detection', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,13 @@ interface AllocationInfo {

const ALLOCATION_QUERIES = {
[AllocationQuery.all]: gql`
query allocations($indexer: String!) {
allocations(where: { indexer: $indexer }, first: 1000) {
query allocations($indexer: String!, $lastId: String!) {
allocations(
where: { indexer: $indexer, id_gt: $lastId }
orderBy: id
orderDirection: asc
first: 1000
) {
id
subgraphDeployment {
id
Expand All @@ -87,8 +92,13 @@ const ALLOCATION_QUERIES = {
}
`,
[AllocationQuery.active]: gql`
query allocations($indexer: String!) {
allocations(where: { indexer: $indexer, status: Active }, first: 1000) {
query allocations($indexer: String!, $lastId: String!) {
allocations(
where: { indexer: $indexer, id_gt: $lastId, status: Active }
orderBy: id
orderDirection: asc
first: 1000
) {
id
subgraphDeployment {
id
Expand All @@ -108,8 +118,13 @@ const ALLOCATION_QUERIES = {
}
`,
[AllocationQuery.closed]: gql`
query allocations($indexer: String!) {
allocations(where: { indexer: $indexer, status: Closed }, first: 1000) {
query allocations($indexer: String!, $lastId: String!) {
allocations(
where: { indexer: $indexer, id_gt: $lastId, status: Closed }
orderBy: id
orderDirection: asc
first: 1000
) {
id
subgraphDeployment {
id
Expand All @@ -129,8 +144,13 @@ const ALLOCATION_QUERIES = {
}
`,
[AllocationQuery.allocation]: gql`
query allocations($allocation: String!) {
allocations(where: { id: $allocation }, first: 1000) {
query allocations($allocation: String!, $lastId: String!) {
allocations(
where: { id: $allocation, id_gt: $lastId }
orderBy: id
orderDirection: asc
first: 1000
) {
id
subgraphDeployment {
id
Expand Down Expand Up @@ -203,27 +223,44 @@ async function queryAllocations(
)
}

const result = await networkSubgraph.checkedQuery(
ALLOCATION_QUERIES[filterType],
filterVars,
)
let lastId = ''
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const resultAllocations: any[] = []
for (;;) {
const pageVars = {
...filterVars,
lastId,
}
const result = await networkSubgraph.checkedQuery(
ALLOCATION_QUERIES[filterType],
pageVars,
)

if (result.error) {
logger.warning('Querying allocations failed', {
error: result.error,
lastId: lastId,
})
throw result.error
}

if (result.data.allocations.length == 0) {
if (result.data.allocations.length == 0) {
break
}
// merge results
resultAllocations.push(...result.data.allocations)
lastId = result.data.allocations.slice(-1)[0].id
}

if (resultAllocations.length == 0) {
// TODO: Is 'Claimable' still the correct term here, after Exponential Rebates?
logger.info(`No 'Claimable' allocations found`)
return []
}

if (result.error) {
logger.warning('Query failed', {
error: result.error,
})
throw result.error
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
return pMap(
result.data.allocations,
resultAllocations,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
async (allocation: any): Promise<AllocationInfo> => {
const deadlineEpoch = allocation.createdAtEpoch + context.maxAllocationEpochs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,33 +124,52 @@ export default {
const address = network.specification.indexerOptions.address

try {
const result = await network.networkSubgraph.checkedQuery(
gql`
query allocations($indexer: String!) {
allocations(
where: { indexer: $indexer, status: Active }
first: 1000
orderDirection: desc
) {
id
allocatedTokens
createdAtEpoch
closedAtEpoch
subgraphDeployment {
let lastId = ''
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const allAllocations: any[] = []
for (;;) {
const result = await network.networkSubgraph.checkedQuery(
gql`
query allocations($indexer: String!, $lastId: String!) {
allocations(
where: { indexer: $indexer, status: Active, id_gt: $lastId }
first: 1000
orderBy: id
orderDirection: asc
) {
id
stakedTokens
signalledTokens
allocatedTokens
createdAtEpoch
closedAtEpoch
subgraphDeployment {
id
stakedTokens
signalledTokens
}
}
}
}
`,
{ indexer: address.toLocaleLowerCase() },
)
if (result.error) {
throw result.error
`,
{ indexer: address.toLocaleLowerCase(), lastId },
)

if (result.error) {
logger.warning('Querying allocations failed', {
error: result.error,
lastId: lastId,
})
throw result.error
}

if (result.data.allocations.length === 0) {
break
}

allAllocations.push(...result.data.allocations)
lastId = result.data.allocations.slice(-1)[0].id
}

// eslint-disable-next-line @typescript-eslint/no-explicit-any
return result.data.allocations.map((allocation: any) => ({
return allAllocations.map((allocation: any) => ({
...allocation,
subgraphDeployment: new SubgraphDeploymentID(allocation.subgraphDeployment.id)
.ipfsHash,
Expand Down

0 comments on commit 07c4aae

Please sign in to comment.