{"record":{"id":"3ba1b1e09bec1b11","repo":"xai-org/x-algorithm","slug":"invalid-request-timeout-value-config-requesttime","errorCode":null,"errorMessage":"invalid request timeout value ${config.requestTimeoutMillis} in thrift endpoint ${config.endpoint}","messagePattern":"invalid request timeout value (.+?) in thrift endpoint (.+?)","errorType":"validation","errorClass":"ConfigFailure","httpStatus":null,"severity":"error","filePath":"botmaker/botmaker_thrift/src/main/scala/com/twitter/botmaker/runtime/config/ThriftEndpointConfigs.scala","lineNumber":61,"sourceCode":"\n  final def getThriftEndpoints: Seq[ThriftEndpointConfig] = thriftEndpoints.toSeq\n\n  final def getThriftEndpoint(endpoint: String): Option[ThriftEndpointConfig] =\n    thriftEndpoints.filter(_.endpoint == endpoint).headOption\n\n  final def addThriftEndpoint(config: ThriftEndpointConfig): Unit = {\n\n    unique(Endpoint, config.endpoint)\n\n    validateEndpoint(config.endpoint)\n    if (config.isSetSessionTimeoutMillis && config.sessionTimeoutMillis <= 0) {\n      throw ConfigFailure(\n        s\"invalid session timeout value ${config.sessionTimeoutMillis} in thrift endpoint ${config.endpoint}\"\n      )\n    }\n\n    if (config.isSetRequestTimeoutMillis && config.requestTimeoutMillis <= 0) {\n      throw ConfigFailure(\n        s\"invalid request timeout value ${config.requestTimeoutMillis} in thrift endpoint ${config.endpoint}\"\n      )\n    }\n\n    config.methods.asScala foreach { tm =>\n      unique(FuncName, config.endpoint, tm.funcName)\n      validateFuncName(tm.funcName)\n      if (tm.isSetTimeoutMillis && tm.timeoutMillis <= 0) {\n        throw ConfigFailure(\n          s\"invalid timeout value ${tm.timeoutMillis} in thrift method ${tm.funcName} of ${config.endpoint}\"\n        )\n      }\n\n    }\n\n    thriftEndpoints.append(config)\n  }\n","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/botmaker/botmaker_thrift/src/main/scala/com/twitter/botmaker/runtime/config/ThriftEndpointConfigs.scala#L43-L79","documentation":"ConfigFailure thrown when a ThriftEndpointConfig explicitly sets requestTimeoutMillis <= 0. Same guard pattern as the session timeout: only fires when the field is present in the config.","triggerScenarios":"Adding a thrift endpoint with request_timeout_millis set to 0 or negative.","commonSituations":"Placeholder zero in templated configs; disabling timeouts by setting 0 (not supported — omit the field instead).","solutions":["Use a positive request_timeout_millis value or omit it","If intent was 'no override', delete the key from config"],"exampleFix":"# before\nrequest_timeout_millis: 0\n# after\nrequest_timeout_millis: 5000  # or omit","handlingStrategy":"validation","validationCode":"require(!config.isSetRequestTimeoutMillis || config.requestTimeoutMillis > 0)","typeGuard":null,"tryCatchPattern":"catch { case e: ConfigFailure => fail config load with endpoint name and value }","preventionTips":["Treat timeouts as optional-or-positive in your config schema","Grep configs for _timeout_millis: 0 during review"],"tags":["thrift","scala","config-validation","timeout"],"backgroundTag":"invalid-timeout-config","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}