{"record":{"id":"6231b307bee05d87","repo":"xai-org/x-algorithm","slug":"servicepath-is-not-set-for-memcachedendpointconfig","errorCode":null,"errorMessage":"servicePath is not set for MemCachedEndpointConfig ${config.endpoint}","messagePattern":"servicePath is not set for MemCachedEndpointConfig (.+?)","errorType":"validation","errorClass":"ConfigFailure","httpStatus":null,"severity":"error","filePath":"botmaker/botmaker_memcached/src/main/scala/com/twitter/botmaker/runtime/config/MemCachedEndpointConfigs.scala","lineNumber":37,"sourceCode":"    context.getRuntime.addMemCachedEndpoint(config)\n    config\n  }\n}\n\ntrait MemCachedEndpointConfigs extends ServiceConfigs {\n\n  final protected val memCachedEndpoints: ArrayBuffer[MemCachedEndpointConfig] =\n    ArrayBuffer[MemCachedEndpointConfig]()\n\n  final def getMemCachedEndpoints: Seq[MemCachedEndpointConfig] = memCachedEndpoints.toSeq\n\n  final def addMemCachedEndpoint(config: MemCachedEndpointConfig): Unit = {\n    unique(Endpoint, config.endpoint)\n\n    validateEndpoint(config.endpoint)\n\n    if (config.servicePath.isEmpty) {\n      throw ConfigFailure(\n        s\"servicePath is not set for MemCachedEndpointConfig ${config.endpoint}\"\n      )\n    }\n\n    memCachedEndpoints.append(config)\n  }\n\n  override def debug(dbg: RuntimeDebugger): Unit = {\n    super.debug(dbg)\n\n    dbg.open(\"memCachedEndpoints\", memCachedEndpoints) foreach { d =>\n      memCachedEndpoints foreach { mc => d.info(mc.endpoint, mc.toString) }\n    }\n  }\n}\n","sourceCodeStart":19,"sourceCodeEnd":53,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/botmaker/botmaker_memcached/src/main/scala/com/twitter/botmaker/runtime/config/MemCachedEndpointConfigs.scala#L19-L53","documentation":"ConfigFailure thrown when registering a MemCachedEndpointConfig whose servicePath field is empty. servicePath is mandatory for memcached endpoints because it identifies the dest/timeout used for client resolution.","triggerScenarios":"Calling addMemCachedEndpoint with a config where servicePath = \"\" (or unset, since an empty string is the default for optional string fields in thrift-config structs).","commonSituations":"YAML/JSON config omitting service_path; config templating leaving it blank; copy-pasting a template endpoint without filling the path.","solutions":["Set a non-empty servicePath (e.g. /s/services/memcache-foo) on the endpoint config","Validate required fields in your config loader before calling addMemCachedEndpoint"],"exampleFix":"# before\nendpoint:\n  endpoint: memcache-events\n# after\nendpoint:\n  endpoint: memcache-events\n  service_path: /s/services/memcache-events","handlingStrategy":"validation","validationCode":"require(config.servicePath.nonEmpty, s\"servicePath required for ${config.endpoint}\")","typeGuard":null,"tryCatchPattern":"catch { case e: ConfigFailure => report the endpoint missing servicePath in the config source }","preventionTips":["Use config loaders that reject blank required strings","Template configs with realistic example values, not empty strings"],"tags":["memcached","scala","config-validation"],"backgroundTag":"missing-required-config-field","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}