Browse Source

model-server: query many limit

David Sehnal 5 years ago
parent
commit
5297dd6f11
2 changed files with 15 additions and 1 deletions
  1. 9 0
      src/servers/model/config.ts
  2. 6 1
      src/servers/model/server/api-web.ts

+ 9 - 0
src/servers/model/config.ts

@@ -46,6 +46,9 @@ const DefaultModelServerConfig = {
     /** Maximum number of requests before "server busy" */
     maxQueueLength: 30,
 
+    /** The maximum number of queries allowed by the query-many at a time */
+    maxQueryManyQueries: 50,
+
     /**
      * Provide a property config or a path a JSON file with the config.
      */
@@ -149,6 +152,12 @@ function addServerArgs(parser: argparse.ArgumentParser) {
         type: 'int',
         help: `modifies the shutdown timer by +/- timeoutVarianceMinutes (to avoid multiple instances shutting at the same time)`
     });
+    parser.addArgument([ '--maxQueryManyQueries' ], {
+        defaultValue: DefaultModelServerConfig.maxQueryManyQueries,
+        metavar: 'QUERY_MANY_LIMIT',
+        type: 'int',
+        help: `maximum number of queries allowed by the query-many at a time`
+    });
     parser.addArgument([ '--defaultSource' ], {
         defaultValue: DefaultModelServerConfig.defaultSource,
         metavar: 'DEFAULT_SOURCE',

+ 6 - 1
src/servers/model/server/api-web.ts

@@ -120,7 +120,12 @@ function serveStatic(req: express.Request, res: express.Response) {
 function createMultiJob(spec: MultipleQuerySpec, res: express.Response) {
     const writer = spec.asTarGz
         ? new TarballResponseResultWriter(getMultiQuerySpecFilename(), res)
-        : createResultWriter(res, spec.encoding?.toLowerCase() === 'bcif')
+        : createResultWriter(res, spec.encoding?.toLowerCase() === 'bcif');
+
+    if (spec.queries.length > ModelServerConfig.maxQueryManyQueries) {
+        writer.doError(403, `query-many queries limit (${ModelServerConfig.maxQueryManyQueries}) exceeded.`);
+        return;
+    }
 
     const jobId = JobManager.add({
         entries: spec.queries.map(q => JobEntry({