{"record":{"id":"2dde8313809e7132","repo":"xai-org/x-algorithm","slug":"invalid-seekstrage-config-seekstrategy","errorCode":null,"errorMessage":"invalid seekStrage ${config.seekStrategy}","messagePattern":"invalid seekStrage (.+?)","errorType":"validation","errorClass":"ConfigFailure","httpStatus":null,"severity":"error","filePath":"botmaker/botmaker_eventbus/src/main/scala/com/twitter/botmaker/runtime/KafkaConsumer.scala","lineNumber":38,"sourceCode":"\nabstract class KafkaConsumerRegistry(val config: KafkaConsumerConfig)\n    extends ServiceRegistry[KafkaConsumerConfig] {\n\n  override val name: String = config.eventType\n}\n\ntrait KafkaConsumerFactory extends TwitterRuntime with EventProcessor with KafkaSerdes {\n\n  def build(config: KafkaConsumerConfig, scoped: StatsReceiver): KafkaConsumerRegistry = {\n    val keyDeser = getKeyDeserializer(config.keyType)\n    val valueDeser = getValueDeserializer(config.valueThriftClass)\n\n    val seekStrage = config.seekStrategy match {\n      case \"BEGINNING\" => SeekStrategy.BEGINNING\n      case \"RESUME\" => SeekStrategy.RESUME\n      case \"REWIND\" => SeekStrategy.REWIND\n      case \"END\" => SeekStrategy.END\n      case _ => throw ConfigFailure(s\"invalid seekStrage ${config.seekStrategy}\")\n    }\n\n    val kafkaConsumerConfig = com.twitter.finatra.kafka.consumers\n      .KafkaConsumerConfig()\n      .fromConfigMap(\n        TwitterKafkaConsumerConfig().configMap ++\n          config.configMap.asScala.toMap ++\n          TwitterKafkaUtil.k8sTlsConfigOverrides(config.dest, enableTlsAndKerberos()))\n\n    val finagleKafkaConsumerConfig = FinagleKafkaConsumerConfig[AnyRef, AnyRef](kafkaConsumerConfig)\n    var builder = FinagleKafkaConsumerBuilder[AnyRef, AnyRef](finagleKafkaConsumerConfig)\n      .dest(TwitterKafkaUtil.normalizeDest(config.dest, enableTlsAndKerberos()))\n      .keyDeserializer(keyDeser)\n      .valueDeserializer(valueDeser)\n      .groupId(KafkaGroupId(config.groupId))\n      .seekStrategy(seekStrage)\n      .includeNodeMetrics(config.includeNodeMetrics)\n      .clientId(config.clientId)","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/xai-org/x-algorithm/blob/24c60942c5c5fdad3a6addffb4c6e6d2f228f04f/botmaker/botmaker_eventbus/src/main/scala/com/twitter/botmaker/runtime/KafkaConsumer.scala#L20-L56","documentation":"ConfigFailure thrown when constructing the botmaker KafkaConsumer because config.seekStrategy is not one of BEGINNING, RESUME, REWIND, END. The value is matched literally (case-sensitive) before building the Finatra KafkaConsumerConfig.","triggerScenarios":"Setting seek_strategy to an unsupported or misspelled value — e.g. \"beginning\" (lowercase), \"LATEST\", \"FROM_START\", or leaving a typo like \"RESUME \" with whitespace.","commonSituations":"Copying example YAML with different casing; migrating configs from another Kafka client that uses different offset-reset semantics names (auto.offset.reset earliest/latest).","solutions":["Set seekStrategy to exactly one of BEGINNING, RESUME, REWIND, END (uppercase)","Check for trailing whitespace/typos in the config value","Map auto.offset.reset semantics: earliest->BEGINNING, latest->END"],"exampleFix":"# before\nseek_strategy: beginning\n# after\nseek_strategy: BEGINNING","handlingStrategy":"validation","validationCode":"val allowed = Set(\"BEGINNING\",\"RESUME\",\"REWIND\",\"END\")\nrequire(allowed(config.seekStrategy), s\"seekStrategy must be one of $allowed\")","typeGuard":null,"tryCatchPattern":"catch { case e: ConfigFailure => fail fast at startup with the allowed values listed }","preventionTips":["Uppercase and trim the value before validation","Lint config enums against the allowed set in CI"],"tags":["kafka","scala","config-validation","seek-strategy"],"backgroundTag":"invalid-enum-config-value","analyzedSha":"24c60942c5c5fdad3a6addffb4c6e6d2f228f04f","analyzedAt":"2026-08-28T11:40:14.686Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}