mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
c4d3d7d3bb
Summary: Importing a .grist document is implemented in a somewhat clunky way, in a multi-worker setup. * First a random worker receives the upload, and updates Grist's various stores appropriately (database, redis, s3). * Then a random worker is assigned to serve the document. If the worker serving the document fails, there is a chance the it will end up assigned to the worker that handled its upload. Currently the worker will misbehave in this case. This diff: * Ports a multi-worker test from test/home to run in test/s3, and adds a test simulating a bad scenario seen in the wild. * Fixes persistence of any existing document checksum in redis when a worker is assigned. * Adds a check when assigned a document to serve, and finding that document already cached locally. It isn't safe to rely only on the document checksum in redis, since that may have expired. * Explicitly claims the document on the uploading worker, so this situation becomes even less likely to arise. Test Plan: added test Reviewers: dsagal Reviewed By: dsagal Subscribers: dsagal Differential Revision: https://phab.getgrist.com/D3305
21 lines
930 B
TypeScript
21 lines
930 B
TypeScript
import {UserProfile} from 'app/common/LoginSessionAPI';
|
|
|
|
export interface ITestingHooks {
|
|
getOwnPort(): Promise<number>;
|
|
getPort(): Promise<number>;
|
|
setLoginSessionProfile(gristSidCookie: string, profile: UserProfile|null, org?: string): Promise<void>;
|
|
setServerVersion(version: string|null): Promise<void>;
|
|
disconnectClients(): Promise<void>;
|
|
commShutdown(): Promise<void>;
|
|
commRestart(): Promise<void>;
|
|
commSetClientPersistence(ttlMs: number): Promise<void>;
|
|
closeDocs(): Promise<void>;
|
|
setDocWorkerActivation(workerId: string, active: 'active'|'inactive'|'crash'): Promise<void>;
|
|
flushAuthorizerCache(): Promise<void>;
|
|
flushDocs(): Promise<void>;
|
|
getDocClientCounts(): Promise<Array<[string, number]>>;
|
|
setActiveDocTimeout(seconds: number): Promise<number>;
|
|
setDiscourseConnectVar(varName: string, value: string|null): Promise<string|null>;
|
|
setWidgetRepositoryUrl(url: string): Promise<void>;
|
|
}
|