{"record":{"id":"079c84bc41209708","repo":"google/tsunami-security-scanner","slug":"number-of-plugin-server-rpc-deadlines-must-be-equal-to","errorCode":null,"errorMessage":"Number of plugin server rpc deadlines must be equal to number of plugin server ports. Paths: %s. Ports: %s. Deadlines: %s","messagePattern":"Number of plugin server rpc deadlines must be equal to number of plugin server ports\\. Paths: (.+?)\\. Ports: (.+?)\\. Deadlines: (.+?)","errorType":"validation","errorClass":"ParameterException","httpStatus":null,"severity":"error","filePath":"main/src/main/java/com/google/tsunami/main/cli/LanguageServerOptions.java","lineNumber":107,"sourceCode":"                String.format(\"Port number must be an integer. Got %s instead.\", pluginServerPort),\n                e);\n          }\n        }\n      }\n\n      var pathCounts = pluginServerFilenames == null ? 0 : pluginServerFilenames.size();\n      var portCounts = pluginServerPorts == null ? 0 : pluginServerPorts.size();\n      if (pathCounts != portCounts) {\n        throw new ParameterException(\n            String.format(\n                \"Number of plugin server paths must be equal to number of plugin server ports.\"\n                    + \" Paths: %s. Ports: %s.\",\n                pathCounts, portCounts));\n      }\n\n      if (!pluginServerRpcDeadlineSeconds.isEmpty()) {\n        if (pluginServerRpcDeadlineSeconds.size() != pathCounts) {\n          throw new ParameterException(\n              String.format(\n                  \"Number of plugin server rpc deadlines must be equal to number of plugin server\"\n                      + \" ports. Paths: %s. Ports: %s. Deadlines: %s\",\n                  pathCounts, portCounts, pluginServerRpcDeadlineSeconds.size()));\n        }\n      }\n    }\n\n    if (!remotePluginServerAddress.isEmpty()) {\n      var addrCounts = remotePluginServerAddress.size();\n      var portCounts = remotePluginServerPort.size();\n      if (addrCounts != portCounts) {\n        throw new ParameterException(\n            String.format(\n                \"Number of remote plugin server paths must be equal to number of plugin server \"\n                    + \"ports. Addresses: %s. Ports: %s.\",\n                addrCounts, portCounts));\n      }","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/google/tsunami-security-scanner/blob/363ba87b3543f8ae8e4304d3416818f03da7f262/main/src/main/java/com/google/tsunami/main/cli/LanguageServerOptions.java#L89-L125","documentation":"When --plugin-server-rpc-deadline-seconds is supplied, validate() requires its size to equal the number of plugin server paths/ports, since deadlines are matched positionally per server. A mismatch throws this ParameterException.","triggerScenarios":"Setting one deadline value while configuring two plugin servers, or setting deadlines but no paths/ports so pathCounts is 0 while the deadline list is non-empty.","commonSituations":"Tuning RPC timeouts for one plugin but running multiple servers, or default config templates that include a single deadline while deployments add more servers.","solutions":["Provide one --plugin-server-rpc-deadline-seconds value per plugin server, in the same order as the paths/ports.","Remove the deadlines flag entirely if you want defaults for all servers.","Count servers vs deadlines in your config generation script and assert equality before launch."],"exampleFix":"// before\n--plugin-server-filename=a.py --plugin-server-filename=b.py --plugin-server-port=8080 --plugin-server-port=8081 --plugin-server-rpc-deadline-seconds=30\n// after\n--plugin-server-rpc-deadline-seconds=30 --plugin-server-rpc-deadline-seconds=60","handlingStrategy":"validation","validationCode":"if (!deadlines.isEmpty() && deadlines.size() != serverCount) { throw new IllegalStateException(\"deadline/server count mismatch\"); }","typeGuard":null,"tryCatchPattern":"try { options.validate(); } catch (ParameterException e) { log.error(\"Deadline count mismatch: {}\", e.getMessage()); }","preventionTips":["Provide one deadline per server or none at all.","Keep deadline ordering aligned with path/port ordering.","Assert deadline count equals server count in deployment tooling."],"tags":["cli","configuration","count-mismatch"],"backgroundTag":"conflicting-config-options","analyzedSha":"363ba87b3543f8ae8e4304d3416818f03da7f262","analyzedAt":"2026-09-13T01:50:53.990Z","contentChangedAt":"2026-09-13T01:50:53.990Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}