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
30 lines
1.4 KiB
TypeScript
30 lines
1.4 KiB
TypeScript
/**
|
|
* This module was automatically generated by `ts-interface-builder`
|
|
*/
|
|
import * as t from "ts-interface-checker";
|
|
// tslint:disable:object-literal-key-quotes
|
|
|
|
export const ITestingHooks = t.iface([], {
|
|
"getOwnPort": t.func("number"),
|
|
"getPort": t.func("number"),
|
|
"setLoginSessionProfile": t.func("void", t.param("gristSidCookie", "string"), t.param("profile", t.union("UserProfile", "null")), t.param("org", "string", true)),
|
|
"setServerVersion": t.func("void", t.param("version", t.union("string", "null"))),
|
|
"disconnectClients": t.func("void"),
|
|
"commShutdown": t.func("void"),
|
|
"commRestart": t.func("void"),
|
|
"commSetClientPersistence": t.func("void", t.param("ttlMs", "number")),
|
|
"closeDocs": t.func("void"),
|
|
"setDocWorkerActivation": t.func("void", t.param("workerId", "string"), t.param("active", t.union(t.lit('active'), t.lit('inactive'), t.lit('crash')))),
|
|
"flushAuthorizerCache": t.func("void"),
|
|
"flushDocs": t.func("void"),
|
|
"getDocClientCounts": t.func(t.array(t.tuple("string", "number"))),
|
|
"setActiveDocTimeout": t.func("number", t.param("seconds", "number")),
|
|
"setDiscourseConnectVar": t.func(t.union("string", "null"), t.param("varName", "string"), t.param("value", t.union("string", "null"))),
|
|
"setWidgetRepositoryUrl": t.func("void", t.param("url", "string")),
|
|
});
|
|
|
|
const exportedTypeSuite: t.ITypeSuite = {
|
|
ITestingHooks,
|
|
};
|
|
export default exportedTypeSuite;
|