Files

Return to Package Diff Home.
Brought to you by Intrinsic.

Package Diff: gatsby @ 2.2.1 .. 2.2.2

cache-dir/commonjs/loader.js

@@ -397,7 +397,7 @@
if (process.env.NODE_ENV === `production`) {
// We got all resources needed for first mount,
- // we can fetch resoures for all pages.
+ // we can fetch resources for all pages.
fetchPageResourceMap();
}
};

cache-dir/loader.js

@@ -428,7 +428,7 @@
inInitialRender = false
if (process.env.NODE_ENV === `production`) {
// We got all resources needed for first mount,
- // we can fetch resoures for all pages.
+ // we can fetch resources for all pages.
fetchPageResourceMap()
}
}

CHANGELOG.md

@@ -3,6 +3,12 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
+## [2.2.2](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.2.1...gatsby@2.2.2) (2019-03-19)
+
+### Bug Fixes
+
+- **develop:** query runner queue - use priority buckets for tasks instead of sorting ([#12365](https://github.com/gatsbyjs/gatsby/issues/12365)) ([653d771](https://github.com/gatsbyjs/gatsby/commit/653d771)), closes [#12343](https://github.com/gatsbyjs/gatsby/issues/12343)
+
## [2.2.1](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.2.0...gatsby@2.2.1) (2019-03-19)
### Bug Fixes

dist/internal-plugins/query-runner/better-queue-custom-store.js

@@ -0,0 +1,214 @@
+"use strict";
+
+function MemoryStoreWithPriorityBuckets() {
+ let uuid = 0;
+ /**
+ * Task ids grouped by priority
+ */
+
+ const queueMap = new Map();
+ /**
+ * Task id to task lookup
+ */
+
+ const tasks = new Map();
+ /**
+ * Task id to priority lookup
+ */
+
+ const taskIdToPriority = new Map();
+ /**
+ * Lock to running tasks object
+ */
+
+ const running = {};
+ let priorityKeys = [];
+
+ const updatePriorityKeys = () => {
+ priorityKeys = Array.from(queueMap.keys()).sort((a, b) => b - a);
+ };
+
+ const addTaskWithPriority = (taskId, priority) => {
+ let needToUpdatePriorityKeys = false;
+ let priorityTasks = queueMap.get(priority);
+
+ if (!priorityTasks) {
+ priorityTasks = [];
+ queueMap.set(priority, priorityTasks);
+ needToUpdatePriorityKeys = true;
+ }
+
+ taskIdToPriority.set(taskId, priority);
+ priorityTasks.push(taskId);
+ return needToUpdatePriorityKeys;
+ };
+
+ return {
+ connect: function connect(cb) {
+ cb(null, tasks.size);
+ },
+ getTask: function getTask(taskId, cb) {
+ cb(null, tasks.get(taskId));
+ },
+ deleteTask: function deleteTask(taskId, cb) {
+ if (tasks.get(taskId)) {
+ tasks.delete(taskId);
+ const priority = taskIdToPriority.get(taskId);
+ const priorityTasks = queueMap.get(priority);
+ priorityTasks.splice(priorityTasks.indexOf(taskId), 1);
+ taskIdToPriority.delete(taskId);
+ }
+
+ cb();
+ },
+ putTask: function putTask(taskId, task, priority = 0, cb) {
+ const oldTask = tasks.get(taskId);
+ tasks.set(taskId, task);
+ let needToUpdatePriorityKeys = false;
+
+ if (oldTask) {
+ const oldPriority = taskIdToPriority.get(taskId);
+
+ if (oldPriority !== priority) {
+ const oldPriorityTasks = queueMap.get(oldPriority);
+ oldPriorityTasks.splice(oldPriorityTasks.indexOf(taskId), 1);
+
+ if (addTaskWithPriority(taskId, priority) || oldPriority.length === 0) {
+ needToUpdatePriorityKeys = true;
+ }
+ }
+ } else {
+ needToUpdatePriorityKeys = addTaskWithPriority(taskId, priority);
+ }
+
+ if (needToUpdatePriorityKeys) {
+ updatePriorityKeys();
+ }
+
+ cb();
+ },
+ takeFirstN: function takeFirstN(n, cb) {
+ const lockId = uuid++;
+ let remainingTasks = n;
+ let needToUpdatePriorityKeys = false;
+ let haveSomeTasks = false;
+ const tasksToRun = {};
+
+ for (var _iterator = priorityKeys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ let priority = _ref;
+ const taskWithSamePriority = queueMap.get(priority);
+ const grabbedTaskIds = taskWithSamePriority.splice(0, remainingTasks);
+ grabbedTaskIds.forEach(taskId => {
+ // add task to task that will run
+ // and remove it from waiting list
+ tasksToRun[taskId] = tasks.get(taskId);
+ tasks.delete(taskId);
+ taskIdToPriority.delete(taskId);
+ haveSomeTasks = true;
+ });
+ remainingTasks -= grabbedTaskIds.length;
+
+ if (taskWithSamePriority.length === 0) {
+ queueMap.delete(priority);
+ needToUpdatePriorityKeys = true;
+ }
+
+ if (remainingTasks <= 0) {
+ break;
+ }
+ }
+
+ if (needToUpdatePriorityKeys) {
+ updatePriorityKeys();
+ }
+
+ if (haveSomeTasks) {
+ running[lockId] = tasksToRun;
+ }
+
+ cb(null, lockId);
+ },
+ takeLastN: function takeLastN(n, cb) {
+ // This is not really used by Gatsby, but will be implemented for
+ // completion in easiest possible way (so not very performant).
+ // Mostly done so generic test suite used by other stores passes.
+ // This is mostly C&P from takeFirstN, with array reversal and different
+ // splice args
+ const lockId = uuid++;
+ let remainingTasks = n;
+ let needToUpdatePriorityKeys = false;
+ let haveSomeTasks = false;
+ const tasksToRun = {};
+
+ for (var _iterator2 = priorityKeys.reverse(), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+ var _ref2;
+
+ if (_isArray2) {
+ if (_i2 >= _iterator2.length) break;
+ _ref2 = _iterator2[_i2++];
+ } else {
+ _i2 = _iterator2.next();
+ if (_i2.done) break;
+ _ref2 = _i2.value;
+ }
+
+ let priority = _ref2;
+ const taskWithSamePriority = queueMap.get(priority);
+ const deleteCount = Math.min(remainingTasks, taskWithSamePriority.length);
+ const grabbedTaskIds = taskWithSamePriority.splice(taskWithSamePriority.length - deleteCount, deleteCount);
+ grabbedTaskIds.forEach(taskId => {
+ // add task to task that will run
+ // and remove it from waiting list
+ tasksToRun[taskId] = tasks.get(taskId);
+ tasks.delete(taskId);
+ taskIdToPriority.delete(taskId);
+ haveSomeTasks = true;
+ });
+ remainingTasks -= grabbedTaskIds.length;
+
+ if (taskWithSamePriority.length === 0) {
+ queueMap.delete(priority);
+ needToUpdatePriorityKeys = true;
+ }
+
+ if (remainingTasks <= 0) {
+ break;
+ }
+ }
+
+ if (needToUpdatePriorityKeys) {
+ updatePriorityKeys();
+ }
+
+ if (haveSomeTasks) {
+ running[lockId] = tasksToRun;
+ }
+
+ cb(null, lockId);
+ },
+ getRunningTasks: function getRunningTasks(cb) {
+ cb(null, running);
+ },
+ getLock: function getLock(lockId, cb) {
+ cb(null, running[lockId]);
+ },
+ releaseLock: function releaseLock(lockId, cb) {
+ delete running[lockId];
+ cb();
+ }
+ };
+}
+
+module.exports = MemoryStoreWithPriorityBuckets;
+//# sourceMappingURL=better-queue-custom-store.js.map
\ No newline at end of file

dist/internal-plugins/query-runner/better-queue-custom-store.js.map

@@ -0,0 +1 @@
+{"version":3,"sources":["../../../src/internal-plugins/query-runner/better-queue-custom-store.js"],"names":["MemoryStoreWithPriorityBuckets","uuid","queueMap","Map","tasks","taskIdToPriority","running","priorityKeys","updatePriorityKeys","Array","from","keys","sort","a","b","addTaskWithPriority","taskId","priority","needToUpdatePriorityKeys","priorityTasks","get","set","push","connect","cb","size","getTask","deleteTask","delete","splice","indexOf","putTask","task","oldTask","oldPriority","oldPriorityTasks","length","takeFirstN","n","lockId","remainingTasks","haveSomeTasks","tasksToRun","taskWithSamePriority","grabbedTaskIds","forEach","takeLastN","reverse","deleteCount","Math","min","getRunningTasks","getLock","releaseLock","module","exports"],"mappings":"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","sourcesContent":["function MemoryStoreWithPriorityBuckets() {\n let uuid = 0\n\n /**\n * Task ids grouped by priority\n */\n const queueMap = new Map()\n\n /**\n * Task id to task lookup\n */\n const tasks = new Map()\n\n /**\n * Task id to priority lookup\n */\n const taskIdToPriority = new Map()\n\n /**\n * Lock to running tasks object\n */\n const running = {}\n\n let priorityKeys = []\n const updatePriorityKeys = () => {\n priorityKeys = Array.from(queueMap.keys()).sort((a, b) => b - a)\n }\n\n const addTaskWithPriority = (taskId, priority) => {\n let needToUpdatePriorityKeys = false\n let priorityTasks = queueMap.get(priority)\n if (!priorityTasks) {\n priorityTasks = []\n queueMap.set(priority, priorityTasks)\n needToUpdatePriorityKeys = true\n }\n\n taskIdToPriority.set(taskId, priority)\n priorityTasks.push(taskId)\n return needToUpdatePriorityKeys\n }\n\n return {\n connect: function(cb) {\n cb(null, tasks.size)\n },\n getTask: function(taskId, cb) {\n cb(null, tasks.get(taskId))\n },\n deleteTask: function(taskId, cb) {\n if (tasks.get(taskId)) {\n tasks.delete(taskId)\n const priority = taskIdToPriority.get(taskId)\n const priorityTasks = queueMap.get(priority)\n priorityTasks.splice(priorityTasks.indexOf(taskId), 1)\n taskIdToPriority.delete(taskId)\n }\n cb()\n },\n putTask: function(taskId, task, priority = 0, cb) {\n const oldTask = tasks.get(taskId)\n tasks.set(taskId, task)\n let needToUpdatePriorityKeys = false\n if (oldTask) {\n const oldPriority = taskIdToPriority.get(taskId)\n\n if (oldPriority !== priority) {\n const oldPriorityTasks = queueMap.get(oldPriority)\n oldPriorityTasks.splice(oldPriorityTasks.indexOf(taskId), 1)\n\n if (\n addTaskWithPriority(taskId, priority) ||\n oldPriority.length === 0\n ) {\n needToUpdatePriorityKeys = true\n }\n }\n } else {\n needToUpdatePriorityKeys = addTaskWithPriority(taskId, priority)\n }\n\n if (needToUpdatePriorityKeys) {\n updatePriorityKeys()\n }\n cb()\n },\n takeFirstN: function(n, cb) {\n const lockId = uuid++\n let remainingTasks = n\n let needToUpdatePriorityKeys = false\n let haveSomeTasks = false\n const tasksToRun = {}\n\n for (let priority of priorityKeys) {\n const taskWithSamePriority = queueMap.get(priority)\n const grabbedTaskIds = taskWithSamePriority.splice(0, remainingTasks)\n grabbedTaskIds.forEach(taskId => {\n // add task to task that will run\n // and remove it from waiting list\n tasksToRun[taskId] = tasks.get(taskId)\n tasks.delete(taskId)\n taskIdToPriority.delete(taskId)\n haveSomeTasks = true\n })\n\n remainingTasks -= grabbedTaskIds.length\n if (taskWithSamePriority.length === 0) {\n queueMap.delete(priority)\n needToUpdatePriorityKeys = true\n }\n if (remainingTasks <= 0) {\n break\n }\n }\n\n if (needToUpdatePriorityKeys) {\n updatePriorityKeys()\n }\n\n if (haveSomeTasks) {\n running[lockId] = tasksToRun\n }\n\n cb(null, lockId)\n },\n takeLastN: function(n, cb) {\n // This is not really used by Gatsby, but will be implemented for\n // completion in easiest possible way (so not very performant).\n // Mostly done so generic test suite used by other stores passes.\n // This is mostly C&P from takeFirstN, with array reversal and different\n // splice args\n const lockId = uuid++\n let remainingTasks = n\n let needToUpdatePriorityKeys = false\n let haveSomeTasks = false\n const tasksToRun = {}\n\n for (let priority of priorityKeys.reverse()) {\n const taskWithSamePriority = queueMap.get(priority)\n const deleteCount = Math.min(\n remainingTasks,\n taskWithSamePriority.length\n )\n const grabbedTaskIds = taskWithSamePriority.splice(\n taskWithSamePriority.length - deleteCount,\n deleteCount\n )\n grabbedTaskIds.forEach(taskId => {\n // add task to task that will run\n // and remove it from waiting list\n tasksToRun[taskId] = tasks.get(taskId)\n tasks.delete(taskId)\n taskIdToPriority.delete(taskId)\n haveSomeTasks = true\n })\n\n remainingTasks -= grabbedTaskIds.length\n if (taskWithSamePriority.length === 0) {\n queueMap.delete(priority)\n needToUpdatePriorityKeys = true\n }\n if (remainingTasks <= 0) {\n break\n }\n }\n\n if (needToUpdatePriorityKeys) {\n updatePriorityKeys()\n }\n\n if (haveSomeTasks) {\n running[lockId] = tasksToRun\n }\n\n cb(null, lockId)\n },\n getRunningTasks: function(cb) {\n cb(null, running)\n },\n getLock: function(lockId, cb) {\n cb(null, running[lockId])\n },\n releaseLock: function(lockId, cb) {\n delete running[lockId]\n cb()\n },\n }\n}\n\nmodule.exports = MemoryStoreWithPriorityBuckets\n"],"file":"better-queue-custom-store.js"}
\ No newline at end of file

dist/internal-plugins/query-runner/query-queue.js

@@ -10,6 +10,8 @@
const websocketManager = require(`../../utils/websocket-manager`);
+const FastMemoryStore = require(`./better-queue-custom-store`);
+
const processing = new Set();
const waiting = new Map();
const queueOptions = {
@@ -37,7 +39,8 @@
} else {
cb(null, job);
}
- } // During builds we don't need all the filtering, etc. so we
+ },
+ store: FastMemoryStore() // During builds we don't need all the filtering, etc. so we
// remove them to speed up queries
};

dist/internal-plugins/query-runner/query-queue.js.map

@@ -1 +1 @@
-{"version":3,"sources":["../../../src/internal-plugins/query-runner/query-queue.js"],"names":["Queue","require","queryRunner","store","emitter","websocketManager","processing","Set","waiting","Map","queueOptions","concurrent","merge","oldTask","newTask","cb","priority","job","activePaths","Array","from","values","id","includes","filter","has","set","process","env","gatsby_executing_command","queue","plObj","callback","state","getState","add","components","component","catch","e","console","log","then","result","delete","push","get","error","on","pause","resume","emit","module","exports"],"mappings":"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","sourcesContent":["const Queue = require(`better-queue`)\n\nconst queryRunner = require(`./query-runner`)\nconst { store, emitter } = require(`../../redux`)\nconst websocketManager = require(`../../utils/websocket-manager`)\n\nconst processing = new Set()\nconst waiting = new Map()\n\nconst queueOptions = {\n concurrent: 4,\n // Merge duplicate jobs.\n merge: (oldTask, newTask, cb) => {\n cb(null, newTask)\n },\n priority: (job, cb) => {\n const activePaths = Array.from(websocketManager.activePaths.values())\n if (job.id && activePaths.includes(job.id)) {\n cb(null, 10)\n } else {\n cb(null, 1)\n }\n },\n // Filter out new query jobs if that query is already running. When the\n // query finshes, it checks the waiting map and pushes another job to\n // make sure all the user changes are captured.\n filter: (job, cb) => {\n if (processing.has(job.id)) {\n waiting.set(job.id, job)\n cb(`already running`)\n } else {\n cb(null, job)\n }\n },\n}\n\n// During builds we don't need all the filtering, etc. so we\n// remove them to speed up queries\nif (process.env.gatsby_executing_command === `build`) {\n delete queueOptions.filter\n delete queueOptions.priority\n delete queueOptions.merge\n}\n\nconst queue = new Queue((plObj, callback) => {\n const state = store.getState()\n processing.add(plObj.id)\n\n return queryRunner(plObj, state.components[plObj.component])\n .catch(e => console.log(`Error running queryRunner`, e))\n .then(\n result => {\n processing.delete(plObj.id)\n if (waiting.has(plObj.id)) {\n queue.push(waiting.get(plObj.id))\n waiting.delete(plObj.id)\n }\n return callback(null, result)\n },\n error => callback(error)\n )\n}, queueOptions)\n\n// Pause running queries when new nodes are added (processing starts).\nemitter.on(`CREATE_NODE`, () => {\n queue.pause()\n})\n\n// Resume running queries as soon as the api queue is empty.\nemitter.on(`API_RUNNING_QUEUE_EMPTY`, () => {\n queue.resume()\n})\n\nqueue.on(`drain`, () => {\n emitter.emit(`QUERY_QUEUE_DRAINED`)\n})\n\nqueue.on(`task_queued`, () => {\n emitter.emit(`QUERY_ENQUEUED`)\n})\n\nmodule.exports = queue\n"],"file":"query-queue.js"}
\ No newline at end of file
+{"version":3,"sources":["../../../src/internal-plugins/query-runner/query-queue.js"],"names":["Queue","require","queryRunner","store","emitter","websocketManager","FastMemoryStore","processing","Set","waiting","Map","queueOptions","concurrent","merge","oldTask","newTask","cb","priority","job","activePaths","Array","from","values","id","includes","filter","has","set","process","env","gatsby_executing_command","queue","plObj","callback","state","getState","add","components","component","catch","e","console","log","then","result","delete","push","get","error","on","pause","resume","emit","module","exports"],"mappings":"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","sourcesContent":["const Queue = require(`better-queue`)\n\nconst queryRunner = require(`./query-runner`)\nconst { store, emitter } = require(`../../redux`)\nconst websocketManager = require(`../../utils/websocket-manager`)\nconst FastMemoryStore = require(`./better-queue-custom-store`)\n\nconst processing = new Set()\nconst waiting = new Map()\n\nconst queueOptions = {\n concurrent: 4,\n // Merge duplicate jobs.\n merge: (oldTask, newTask, cb) => {\n cb(null, newTask)\n },\n priority: (job, cb) => {\n const activePaths = Array.from(websocketManager.activePaths.values())\n if (job.id && activePaths.includes(job.id)) {\n cb(null, 10)\n } else {\n cb(null, 1)\n }\n },\n // Filter out new query jobs if that query is already running. When the\n // query finshes, it checks the waiting map and pushes another job to\n // make sure all the user changes are captured.\n filter: (job, cb) => {\n if (processing.has(job.id)) {\n waiting.set(job.id, job)\n cb(`already running`)\n } else {\n cb(null, job)\n }\n },\n store: FastMemoryStore(),\n}\n\n// During builds we don't need all the filtering, etc. so we\n// remove them to speed up queries\nif (process.env.gatsby_executing_command === `build`) {\n delete queueOptions.filter\n delete queueOptions.priority\n delete queueOptions.merge\n}\n\nconst queue = new Queue((plObj, callback) => {\n const state = store.getState()\n processing.add(plObj.id)\n\n return queryRunner(plObj, state.components[plObj.component])\n .catch(e => console.log(`Error running queryRunner`, e))\n .then(\n result => {\n processing.delete(plObj.id)\n if (waiting.has(plObj.id)) {\n queue.push(waiting.get(plObj.id))\n waiting.delete(plObj.id)\n }\n return callback(null, result)\n },\n error => callback(error)\n )\n}, queueOptions)\n\n// Pause running queries when new nodes are added (processing starts).\nemitter.on(`CREATE_NODE`, () => {\n queue.pause()\n})\n\n// Resume running queries as soon as the api queue is empty.\nemitter.on(`API_RUNNING_QUEUE_EMPTY`, () => {\n queue.resume()\n})\n\nqueue.on(`drain`, () => {\n emitter.emit(`QUERY_QUEUE_DRAINED`)\n})\n\nqueue.on(`task_queued`, () => {\n emitter.emit(`QUERY_ENQUEUED`)\n})\n\nmodule.exports = queue\n"],"file":"query-queue.js"}
\ No newline at end of file

package.json

@@ -1,7 +1,7 @@
{
"name": "gatsby",
"description": "Blazing fast modern site generator for React",
- "version": "2.2.1",
+ "version": "2.2.2",
"author": "Kyle Mathews <mathews.kyle@gmail.com>",
"bin": {
"gatsby": "./dist/bin/gatsby.js"
@@ -188,5 +188,5 @@
"yargs": {
"boolean-negation": false
},
- "gitHead": "8c8b9b5273e4da39f7a19a56f48a17090ed1e54a"
+ "gitHead": "6ffe655fee89c19a386ad9bd0cb0640edf3c06f5"
}