Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

common: add pagination support to allocation queries #1046

Merged
merged 1 commit into from
Nov 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
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
Loading