mirror of
https://github.com/gristlabs/grist-core.git
synced 2026-03-02 04:09:24 +00:00
* Shutdown Doc worker when it is not considered as available in Redis * Use isAffirmative for GRIST_MANAGED_WORKERS * Upgrade Sinon for the tests * Run Smoke test with pages in English * Add logic in /status endpoint
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
import { IChecksumStore } from 'app/server/lib/IChecksumStore';
|
||||
import { IElectionStore } from 'app/server/lib/IElectionStore';
|
||||
import { IPermitStores } from 'app/server/lib/Permit';
|
||||
import {RedisClient} from 'redis';
|
||||
import { RedisClient } from 'redis';
|
||||
|
||||
export interface DocWorkerInfo {
|
||||
id: string;
|
||||
@@ -57,6 +57,8 @@ export interface IDocWorkerMap extends IPermitStores, IElectionStore, IChecksumS
|
||||
// release existing assignments.
|
||||
setWorkerAvailability(workerId: string, available: boolean): Promise<void>;
|
||||
|
||||
isWorkerRegistered(workerInfo: DocWorkerInfo): Promise<boolean>;
|
||||
|
||||
// Releases doc from worker, freeing it to be assigned elsewhere.
|
||||
// Assignments should only be released for workers that are now unavailable.
|
||||
releaseAssignment(workerId: string, docId: string): Promise<void>;
|
||||
|
||||
@@ -445,7 +445,8 @@ export class FlexServer implements GristServer {
|
||||
// /status/hooks allows the tests to wait for them to be ready.
|
||||
// If db=1 query parameter is included, status will include the status of DB connection.
|
||||
// If redis=1 query parameter is included, status will include the status of the Redis connection.
|
||||
// If ready=1 query parameter is included, status will include whether the server is fully ready.
|
||||
// If docWorkerRegistered=1 query parameter is included, status will include the status of the
|
||||
// doc worker registration in Redis.
|
||||
this.app.get('/status(/hooks)?', async (req, res) => {
|
||||
const checks = new Map<string, Promise<boolean>|boolean>();
|
||||
const timeout = optIntegerParam(req.query.timeout, 'timeout') || 10_000;
|
||||
@@ -467,6 +468,15 @@ export class FlexServer implements GristServer {
|
||||
if (isParameterOn(req.query.redis)) {
|
||||
checks.set('redis', asyncCheck(this._docWorkerMap.getRedisClient()?.pingAsync()));
|
||||
}
|
||||
if (isParameterOn(req.query.docWorkerRegistered) && this.worker) {
|
||||
// Only check whether the doc worker is registered if we have a worker.
|
||||
// The Redis client may not be connected, but in this case this has to
|
||||
// be checked with the 'redis' parameter (the user may want to avoid
|
||||
// removing workers when connection is unstable).
|
||||
if (this._docWorkerMap.getRedisClient()?.connected) {
|
||||
checks.set('docWorkerRegistered', asyncCheck(this._docWorkerMap.isWorkerRegistered(this.worker)));
|
||||
}
|
||||
}
|
||||
if (isParameterOn(req.query.ready)) {
|
||||
checks.set('ready', this._isReady);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user