Skip to content

Commit

Permalink
Merge pull request #7927 from ikiw/throttler
Browse files Browse the repository at this point in the history
Throttle fetch requests in the setting registry's data connector
  • Loading branch information
saulshanabrook committed Mar 25, 2020
2 parents 3462a22 + 35a1b7e commit 621e43b
Show file tree
Hide file tree
Showing 15 changed files with 37 additions and 36 deletions.
2 changes: 1 addition & 1 deletion packages/application/package.json
Expand Up @@ -50,7 +50,7 @@
"@lumino/coreutils": "^1.4.2",
"@lumino/disposable": "^1.3.5",
"@lumino/messaging": "^1.3.3",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"@lumino/properties": "^1.1.6",
"@lumino/signaling": "^1.3.5",
"@lumino/widgets": "^1.11.1"
Expand Down
2 changes: 1 addition & 1 deletion packages/apputils-extension/package.json
Expand Up @@ -48,7 +48,7 @@
"@lumino/commands": "^1.10.1",
"@lumino/coreutils": "^1.4.2",
"@lumino/disposable": "^1.3.5",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"@lumino/widgets": "^1.11.1",
"es6-promise": "~4.2.8"
},
Expand Down
18 changes: 16 additions & 2 deletions packages/apputils-extension/src/settingconnector.ts
@@ -1,8 +1,10 @@
import { PageConfig } from '@jupyterlab/coreutils';

import { ISettingRegistry } from '@jupyterlab/settingregistry';

import { DataConnector, IDataConnector } from '@jupyterlab/statedb';

import { ISettingRegistry } from '@jupyterlab/settingregistry';
import { Throttler } from '@lumino/polling';

/**
* A data connector for fetching settings.
Expand All @@ -19,8 +21,19 @@ export class SettingConnector extends DataConnector<
this._connector = connector;
}

/**
* Fetch settings for a plugin.
* @param id - The plugin ID
*
* #### Notes
* The REST API requests are throttled at one request per plugin per 100ms.
*/
fetch(id: string): Promise<ISettingRegistry.IPlugin | undefined> {
return this._connector.fetch(id);
const throttlers = this._throttlers;
if (!(id in throttlers)) {
throttlers[id] = new Throttler(() => this._connector.fetch(id), 100);
}
return throttlers[id].invoke();
}

async list(
Expand All @@ -44,4 +57,5 @@ export class SettingConnector extends DataConnector<
}

private _connector: IDataConnector<ISettingRegistry.IPlugin, string>;
private _throttlers: { [key: string]: Throttler } = Object.create(null);
}
2 changes: 1 addition & 1 deletion packages/codemirror/package.json
Expand Up @@ -43,7 +43,7 @@
"@lumino/commands": "^1.10.1",
"@lumino/coreutils": "^1.4.2",
"@lumino/disposable": "^1.3.5",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"@lumino/signaling": "^1.3.5",
"@lumino/widgets": "^1.11.1",
"codemirror": "~5.49.2",
Expand Down
2 changes: 1 addition & 1 deletion packages/csvviewer-extension/package.json
Expand Up @@ -41,7 +41,7 @@
"@jupyterlab/docregistry": "^2.0.2",
"@jupyterlab/documentsearch": "^2.0.2",
"@jupyterlab/mainmenu": "^2.0.2",
"@lumino/datagrid": "^0.5.3",
"@lumino/datagrid": "^0.6.0",
"@lumino/signaling": "^1.3.5",
"@lumino/widgets": "^1.11.1"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/csvviewer/package.json
Expand Up @@ -40,7 +40,7 @@
"@jupyterlab/docregistry": "^2.0.2",
"@lumino/algorithm": "^1.2.3",
"@lumino/coreutils": "^1.4.2",
"@lumino/datagrid": "^0.5.3",
"@lumino/datagrid": "^0.6.0",
"@lumino/disposable": "^1.3.5",
"@lumino/messaging": "^1.3.3",
"@lumino/signaling": "^1.3.5",
Expand Down
15 changes: 1 addition & 14 deletions packages/docmanager-extension/src/index.ts
Expand Up @@ -242,22 +242,9 @@ ${fileTypes}`;
}
});

// callback to registry change that ensures not to invoke reload method when there is already a promise that is pending
let reloadSettingsRegistry = () => {
let promisePending = false;

return async () => {
if (!promisePending) {
promisePending = true;
await settingRegistry.reload(pluginId);
promisePending = false;
}
};
};

// If the document registry gains or loses a factory or file type,
// regenerate the settings description with the available options.
registry.changed.connect(reloadSettingsRegistry());
registry.changed.connect(() => settingRegistry.reload(pluginId));

return docManager;
}
Expand Down
2 changes: 1 addition & 1 deletion packages/documentsearch/package.json
Expand Up @@ -42,7 +42,7 @@
"@lumino/algorithm": "^1.2.3",
"@lumino/coreutils": "^1.4.2",
"@lumino/disposable": "^1.3.5",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"@lumino/signaling": "^1.3.5",
"@lumino/widgets": "^1.11.1",
"codemirror": "~5.49.2",
Expand Down
2 changes: 1 addition & 1 deletion packages/extensionmanager/package.json
Expand Up @@ -39,7 +39,7 @@
"@jupyterlab/services": "^5.0.2",
"@jupyterlab/ui-components": "^2.0.2",
"@lumino/messaging": "^1.3.3",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"react": "~16.9.0",
"react-paginate": "^6.3.2",
"semver": "^6.3.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/filebrowser/package.json
Expand Up @@ -49,7 +49,7 @@
"@lumino/domutils": "^1.1.7",
"@lumino/dragdrop": "^1.5.1",
"@lumino/messaging": "^1.3.3",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"@lumino/signaling": "^1.3.5",
"@lumino/widgets": "^1.11.1",
"react": "~16.9.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/inspector/package.json
Expand Up @@ -43,7 +43,7 @@
"@jupyterlab/statedb": "^2.0.1",
"@lumino/coreutils": "^1.4.2",
"@lumino/disposable": "^1.3.5",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"@lumino/signaling": "^1.3.5",
"@lumino/widgets": "^1.11.1"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/services/package.json
Expand Up @@ -49,7 +49,7 @@
"@lumino/algorithm": "^1.2.3",
"@lumino/coreutils": "^1.4.2",
"@lumino/disposable": "^1.3.5",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"@lumino/signaling": "^1.3.5",
"node-fetch": "^2.6.0",
"ws": "^7.2.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/statusbar/package.json
Expand Up @@ -40,7 +40,7 @@
"@lumino/coreutils": "^1.4.2",
"@lumino/disposable": "^1.3.5",
"@lumino/messaging": "^1.3.3",
"@lumino/polling": "^1.0.4",
"@lumino/polling": "^1.1.1",
"@lumino/signaling": "^1.3.5",
"@lumino/widgets": "^1.11.1",
"csstype": "~2.6.9",
Expand Down
2 changes: 1 addition & 1 deletion tests/test-csvviewer/package.json
Expand Up @@ -22,7 +22,7 @@
"@jupyterlab/services": "^5.0.2",
"@jupyterlab/testutils": "^2.0.2",
"@lumino/coreutils": "^1.4.2",
"@lumino/datagrid": "^0.5.3",
"@lumino/datagrid": "^0.6.0",
"@lumino/widgets": "^1.11.1",
"chai": "^4.2.0",
"csv-spectrum": "~1.0.0",
Expand Down
16 changes: 8 additions & 8 deletions yarn.lock
Expand Up @@ -2000,10 +2000,10 @@
resolved "https://registry.yarnpkg.com/@lumino/coreutils/-/coreutils-1.4.2.tgz#44cd3d55bb692e876c792f1ecc0df3daa1de63e9"
integrity sha512-SmQ4YDANe25rZd0bLoW7LVAHmgySjkrJmyNPnPW0GrpBt2u4/6D+EQJ8PCCMNWuJvrljBCdlmgOFsT38qYhfcw==

"@lumino/datagrid@^0.5.3":
version "0.5.3"
resolved "https://registry.yarnpkg.com/@lumino/datagrid/-/datagrid-0.5.3.tgz#62ac692a199e033d811cc2229fa979b01c058889"
integrity sha512-5W86WnbZKrX/P+WkXMPRkToM0yISjmKu2ewJ2CtyKw+OsGsBcgshM147k4wxDskAtIv/+wsgdth7sIdzx6OW+A==
"@lumino/datagrid@^0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@lumino/datagrid/-/datagrid-0.6.0.tgz#8272fe4cf8bb27f3ec9cc8fee279329c35695d19"
integrity sha512-TkpCm4AbCAVwGg3pC5618YnjfHSyzhWxRaM1FQ7RKWS+mZoKhMWVbN0I2o2OLpdaBjvf7sV9JUp08rsouHRqOQ==
dependencies:
"@lumino/algorithm" "^1.2.3"
"@lumino/coreutils" "^1.4.2"
Expand Down Expand Up @@ -2049,10 +2049,10 @@
"@lumino/algorithm" "^1.2.3"
"@lumino/collections" "^1.2.3"

"@lumino/polling@^1.0.4":
version "1.0.4"
resolved "https://registry.yarnpkg.com/@lumino/polling/-/polling-1.0.4.tgz#85f956933fa63c47edf808c141cdb9a7a1a49f4c"
integrity sha512-9OYIDTohToj6SLrxOr+FbeyPvirBU/r53FgmPxulcDgUVnVk4tqTSLIJAUu3mjJd9hnmZZqpSn9ppyjQAo3qSg==
"@lumino/polling@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@lumino/polling/-/polling-1.1.1.tgz#15dcb848dca26573d416f00493e343bc43d79d01"
integrity sha512-4ofwz9zOkh3GtTTPKfX9KmsZD66g8M0BG/lLji86GRCQvQDGJaI35c0qD62jMzacfsVxbCBfp89/sbXGDoRIZA==
dependencies:
"@lumino/coreutils" "^1.4.2"
"@lumino/disposable" "^1.3.5"
Expand Down

0 comments on commit 621e43b

Please sign in to comment.