mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
(core) Add unquarantine command to admin CLI
Summary: Adds a CLI command to un-quarantine an active document. Also tweaks the name of related environment variable to avoid a naming conflict. Test Plan: Server test. Reviewers: paulfitz Reviewed By: paulfitz Differential Revision: https://phab.getgrist.com/D3583
This commit is contained in:
parent
103c795aa2
commit
0c5441b176
@ -141,6 +141,10 @@ class DummyDocWorkerMap implements IDocWorkerMap {
|
|||||||
// nothing to do
|
// nothing to do
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async removeDocGroup(docId: string): Promise<void> {
|
||||||
|
// nothing to do
|
||||||
|
}
|
||||||
|
|
||||||
public getRedisClient() {
|
public getRedisClient() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -525,6 +529,10 @@ export class DocWorkerMap implements IDocWorkerMap {
|
|||||||
await this._client.setAsync(`doc-${docId}-group`, docGroup);
|
await this._client.setAsync(`doc-${docId}-group`, docGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async removeDocGroup(docId: string): Promise<void> {
|
||||||
|
await this._client.delAsync(`doc-${docId}-group`);
|
||||||
|
}
|
||||||
|
|
||||||
public getRedisClient(): RedisClient {
|
public getRedisClient(): RedisClient {
|
||||||
return this._client;
|
return this._client;
|
||||||
}
|
}
|
||||||
|
@ -166,12 +166,12 @@ export class Housekeeper {
|
|||||||
// actions.
|
// actions.
|
||||||
//
|
//
|
||||||
// Optionally accepts a `group` query param for updating the document's group prior
|
// Optionally accepts a `group` query param for updating the document's group prior
|
||||||
// to moving. This is useful for controlling which worker group the document is assigned
|
// to moving. A blank string unsets the current group, if any. This is useful for controlling
|
||||||
// a worker from.
|
// which worker group the document is assigned a worker from.
|
||||||
app.post('/api/housekeeping/docs/:docId/assign', this._withSupport(async (req, docId, headers) => {
|
app.post('/api/housekeeping/docs/:docId/assign', this._withSupport(async (req, docId, headers) => {
|
||||||
const url = new URL(await this._server.getHomeUrlByDocId(docId, `/api/docs/${docId}/assign`));
|
const url = new URL(await this._server.getHomeUrlByDocId(docId, `/api/docs/${docId}/assign`));
|
||||||
const group = optStringParam(req.query.group);
|
const group = optStringParam(req.query.group);
|
||||||
if (group) { url.searchParams.set('group', group); }
|
if (group !== undefined) { url.searchParams.set('group', group); }
|
||||||
return fetch(url.toString(), {
|
return fetch(url.toString(), {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers,
|
headers,
|
||||||
|
@ -601,12 +601,17 @@ export class DocWorkerApi {
|
|||||||
// is freed up for reassignment, otherwise false.
|
// is freed up for reassignment, otherwise false.
|
||||||
//
|
//
|
||||||
// Optionally accepts a `group` query param for updating the document's group prior
|
// Optionally accepts a `group` query param for updating the document's group prior
|
||||||
// to (possible) reassignment. (Note: Requires special permit.)
|
// to (possible) reassignment. A blank string unsets the current group, if any.
|
||||||
|
// (Requires a special permit.)
|
||||||
this._app.post('/api/docs/:docId/assign', canEdit, throttled(async (req, res) => {
|
this._app.post('/api/docs/:docId/assign', canEdit, throttled(async (req, res) => {
|
||||||
const docId = getDocId(req);
|
const docId = getDocId(req);
|
||||||
const group = optStringParam(req.query.group);
|
const group = optStringParam(req.query.group);
|
||||||
if (group && req.specialPermit?.action === 'assign-doc') {
|
if (group !== undefined && req.specialPermit?.action === 'assign-doc') {
|
||||||
await this._docWorkerMap.updateDocGroup(docId, group);
|
if (group.trim() === '') {
|
||||||
|
await this._docWorkerMap.removeDocGroup(docId);
|
||||||
|
} else {
|
||||||
|
await this._docWorkerMap.updateDocGroup(docId, group);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const status = await this._docWorkerMap.getDocWorker(docId);
|
const status = await this._docWorkerMap.getDocWorker(docId);
|
||||||
if (!status) { res.json(false); return; }
|
if (!status) { res.json(false); return; }
|
||||||
|
@ -66,8 +66,12 @@ export interface IDocWorkerMap extends IPermitStores, IElectionStore, IChecksumS
|
|||||||
getAssignments(workerId: string): Promise<string[]>;
|
getAssignments(workerId: string): Promise<string[]>;
|
||||||
|
|
||||||
getWorkerGroup(workerId: string): Promise<string|null>;
|
getWorkerGroup(workerId: string): Promise<string|null>;
|
||||||
|
|
||||||
getDocGroup(docId: string): Promise<string|null>;
|
getDocGroup(docId: string): Promise<string|null>;
|
||||||
|
|
||||||
updateDocGroup(docId: string, docGroup: string): Promise<void>;
|
updateDocGroup(docId: string, docGroup: string): Promise<void>;
|
||||||
|
|
||||||
|
removeDocGroup(docId: string): Promise<void>;
|
||||||
|
|
||||||
getRedisClient(): RedisClient|null;
|
getRedisClient(): RedisClient|null;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user