Skip to content

Commit b18703e

Browse files
authored
refactor: replace better-queue with fastq (#32941)
* refactor: replace better-queue with fastq * gatsby-transformer-screenshot * revert the change to recipes Recipes need another look as tests are failing * Update yarn.lock * Remove redundant comment
1 parent 94ac690 commit b18703e

File tree

4 files changed

+37
-41
lines changed

4 files changed

+37
-41
lines changed

packages/gatsby-source-filesystem/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"dependencies": {
1010
"@babel/runtime": "^7.14.8",
11-
"better-queue": "^3.8.10",
11+
"fastq": "^1.11.1",
1212
"chokidar": "^3.5.2",
1313
"file-type": "^16.0.0",
1414
"fs-extra": "^10.0.0",

packages/gatsby-source-filesystem/src/create-remote-file-node.js

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const fs = require(`fs-extra`)
22
const { createContentDigest, fetchRemoteFile } = require(`gatsby-core-utils`)
33
const path = require(`path`)
44
const { isWebUri } = require(`valid-url`)
5-
const Queue = require(`better-queue`)
5+
const Queue = require(`fastq`)
66
const { createFileNode } = require(`./create-file-node`)
77
const { getRemoteFileExtension, createFilePath } = require(`./utils`)
88

@@ -46,17 +46,7 @@ let showFlagWarning = !!process.env.GATSBY_EXPERIMENTAL_REMOTE_FILE_PLACEHOLDER
4646
* Queue Management *
4747
********************/
4848

49-
/**
50-
* Queue
51-
* Use the task's url as the id
52-
* When pushing a task with a similar id, prefer the original task
53-
* as it's already in the processing cache
54-
*/
55-
const queue = new Queue(pushToQueue, {
56-
id: `url`,
57-
merge: (old, _, cb) => cb(old),
58-
concurrent: process.env.GATSBY_CONCURRENT_DOWNLOAD || 200,
59-
})
49+
const queue = Queue(pushToQueue, process.env.GATSBY_CONCURRENT_DOWNLOAD || 200)
6050

6151
/**
6252
* @callback {Queue~queueCallback}
@@ -168,14 +158,13 @@ const processingCache = {}
168158
*/
169159
const pushTask = task =>
170160
new Promise((resolve, reject) => {
171-
queue
172-
.push(task)
173-
.on(`finish`, task => {
174-
resolve(task)
175-
})
176-
.on(`failed`, err => {
161+
queue.push(task, (err, node) => {
162+
if (!err) {
163+
resolve(node)
164+
} else {
177165
reject(`failed to process ${task.url}\n${err}`)
178-
})
166+
}
167+
})
179168
})
180169

181170
/***************

packages/gatsby-transformer-screenshot/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"dependencies": {
1010
"@babel/runtime": "^7.14.8",
1111
"axios": "^0.21.1",
12-
"better-queue": "^3.8.10"
12+
"fastq": "^1.11.1"
1313
},
1414
"devDependencies": {
1515
"@babel/cli": "^7.14.8",

packages/gatsby-transformer-screenshot/src/gatsby-node.js

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,19 @@ const SCREENSHOT_ENDPOINT = `https://h7iqvn4842.execute-api.us-east-2.amazonaws.
66
const LAMBDA_CONCURRENCY_LIMIT = 50
77
const USE_PLACEHOLDER_IMAGE = process.env.GATSBY_SCREENSHOT_PLACEHOLDER
88

9-
const screenshotQueue = new Queue(
10-
(input, cb) => {
11-
createScreenshotNode(input)
12-
.then(r => cb(null, r))
13-
.catch(e => cb(e))
14-
},
15-
{ concurrent: LAMBDA_CONCURRENCY_LIMIT, maxRetries: 3, retryDelay: 1000 }
16-
)
9+
const screenshotQueue = Queue.promise(worker, LAMBDA_CONCURRENCY_LIMIT)
10+
11+
async function worker(input) {
12+
// maxRetries: 3, retryDelay: 1000
13+
for (let i = 0; i < 2; i++) {
14+
try {
15+
return await createScreenshotNode(input)
16+
} catch (e) {
17+
await new Promise(resolve => setTimeout(resolve, 1000))
18+
}
19+
}
20+
return await createScreenshotNode(input)
21+
}
1722

1823
exports.onPreBootstrap = (
1924
{
@@ -70,10 +75,10 @@ exports.onPreBootstrap = (
7075
return null
7176
}
7277

73-
return new Promise((resolve, reject) => {
74-
screenshotQueue.on(`drain`, () => {
78+
return new Promise(resolve => {
79+
screenshotQueue.drain = () => {
7580
resolve()
76-
})
81+
}
7782
})
7883
}
7984

@@ -100,8 +105,8 @@ exports.onCreateNode = async (
100105

101106
try {
102107
const screenshotNode = await new Promise((resolve, reject) => {
103-
screenshotQueue
104-
.push({
108+
screenshotQueue.push(
109+
{
105110
url: node.url,
106111
parent: node.id,
107112
store,
@@ -111,13 +116,15 @@ exports.onCreateNode = async (
111116
getCache,
112117
createContentDigest,
113118
parentNodeId: node.id,
114-
})
115-
.on(`finish`, r => {
116-
resolve(r)
117-
})
118-
.on(`failed`, e => {
119-
reject(e)
120-
})
119+
},
120+
(err, result) => {
121+
if (err) {
122+
reject(err)
123+
} else {
124+
resolve(result)
125+
}
126+
}
127+
)
121128
})
122129

123130
createParentChildLink({

0 commit comments

Comments
 (0)