Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-9650

Pipeline names are not validated against RFC 1123

XMLWordPrintable

    • False
    • Hide

      None

      Show
      None
    • False

      When creating a pipeline with the name Demo, the pipeline fails to be deployed with the following error:

      2025-11-04T21:15:49.273Z | Caused by: io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: PATCH at: https://10.96.0.1:443/apis/debezium.io/v1alpha1/namespaces/default/debeziumservers/Demo?fieldManager=fabric8. Message: DebeziumServer.debezium.io "Demo" is invalid: metadata.name: Invalid value: "Demo": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*'). Received status: Status(apiVersion=v1, code=422, details=StatusDetails(causes=[StatusCause(field=metadata.name, message=Invalid value: "Demo": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*'), reason=FieldValueInvalid, additionalProperties={})], group=debezium.io, kind=DebeziumServer, name=Demo, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=DebeziumServer.debezium.io "Demo" is invalid: metadata.name: Invalid value: "Demo": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*'), metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=Invalid, status=Failure, additionalProperties={}).
      2025-11-04T21:15:49.273Z |  at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.requestFailure(OperationSupport.java:642)
      2025-11-04T21:15:49.273Z |  at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.requestFailure(OperationSupport.java:622)
      2025-11-04T21:15:49.273Z |  at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.assertResponseCode(OperationSupport.java:582)
      2025-11-04T21:15:49.273Z |  at io.fabric8.kubernetes.client.dsl.internal.OperationSupport.lambda$handleResponse$0(OperationSupport.java:549)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
      2025-11-04T21:15:49.273Z |  at io.fabric8.kubernetes.client.http.StandardHttpClient.lambda$completeOrCancel$10(StandardHttpClient.java:141)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
      2025-11-04T21:15:49.273Z |  at io.fabric8.kubernetes.client.http.ByteArrayBodyHandler.onBodyDone(ByteArrayBodyHandler.java:51)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:863)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:841)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510)
      2025-11-04T21:15:49.273Z |  at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179)
      2025-11-04T21:15:49.273Z |  at io.fabric8.kubernetes.client.vertx.VertxHttpRequest.lambda$consumeBytes$1(VertxHttpRequest.java:84)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:270)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:252)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.http.impl.HttpEventHandler.handleEnd(HttpEventHandler.java:76)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.http.impl.HttpClientResponseImpl.handleEnd(HttpClientResponseImpl.java:250)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.lambda$new$0(Http1xClientConnection.java:442)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:279)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:157)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.http.impl.Http1xClientConnection$StreamImpl.handleEnd(Http1xClientConnection.java:752)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.impl.ContextImpl.execute(ContextImpl.java:327)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.impl.ContextImpl.execute(ContextImpl.java:307)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.http.impl.Http1xClientConnection.handleResponseEnd(Http1xClientConnection.java:983)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.http.impl.Http1xClientConnection.handleHttpMessage(Http1xClientConnection.java:855)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.http.impl.Http1xClientConnection.handleMessage(Http1xClientConnection.java:817)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:159)
      2025-11-04T21:15:49.273Z |  at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:153)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
      2025-11-04T21:15:49.273Z |  at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
      2025-11-04T21:15:49.273Z |  at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
      2025-11-04T21:15:49.273Z |  at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1519)
      2025-11-04T21:15:49.273Z |  at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1377)
      2025-11-04T21:15:49.273Z |  at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1428)
      2025-11-04T21:15:49.273Z |  at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)
      2025-11-04T21:15:49.273Z |  at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)
      2025-11-04T21:15:49.273Z |  at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:796)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658)
      2025-11-04T21:15:49.273Z |  at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
      2025-11-04T21:15:49.273Z |  at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998)
      2025-11-04T21:15:49.273Z |  at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
      2025-11-04T21:15:49.273Z |  at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      2025-11-04T21:15:49.273Z |  ... 1 more
      

      If the pipeline name should adhere to a specific specification, we should either add a separate field in the pipeline record where we sanitize the name to adhere to RFC 1123 or we should validate the form to enforce this requirement.

              Unassigned Unassigned
              ccranfor@redhat.com Chris Cranford
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated: