mirror of
				https://github.com/gristlabs/grist-core.git
				synced 2025-06-13 20:53:59 +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