使用 Knative Client 替换 Route 的时候出现一下错误:
An error occurred while replacing Route with the Knative Client:
Exception in thread "main" io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: POST at: https://:6443/apis/serving.knative.dev/v1/namespaces/default/routes. Message: routes.serving.knative.dev "helloworld-nodejs-red-blue1" already exists. Received status: Status(apiVersion=v1, code=409, details=StatusDetails(causes=[], group=serving.knative.dev, kind=routes, name=helloworld-nodejs-red-blue1, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=routes.serving.knative.dev "helloworld-nodejs-red-blue1" already exists, metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=AlreadyExists, status=Failure, additionalProperties={}).
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestFailure(OperationSupport.java:568)
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.assertResponseCode(OperationSupport.java:507)
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:471)
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:430)
at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleCreate(OperationSupport.java:251)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleCreate(BaseOperation.java:844)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.create(BaseOperation.java:352)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.createOrReplace(BaseOperation.java:413)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.createOrReplace(BaseOperation.java:79)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.createOrReplace(BaseOperation.java:410)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.lambda$createOrReplaceWithNew$1(BaseOperation.java:383)
at io.fabric8.knative.serving.v1.DoneableRoute.done(DoneableRoute.java:27)
复现方式如下:
The method of recurrence is as follows:
kn.routes().createOrReplaceWithNew()
.withNewMetadata()
.withName("helloworld-nodejs-red-blue1")
.withNamespace("default")
.endMetadata()
.withNewSpec()
.withTraffic(traffic1)
.endSpec()
.done();
第一次执行的时候可正常执行,但是当第二次执行替换的时候,就会报上面的错误,经过 Debug 发现请求时没有带上 namespace:
normally the first time executed,But when you do the substitution the again executed,have a error:Failure executing:,After Debug, the request is found to have no namespace attached:

但是真实请求 URL 应该是下面这样:

Can you please add comment in english
Seems related to #2292
Seems related to #2292
Yes , Thanks
Seems related to #2292
Hi @rohanKanojia
Was this addressed in the fix for #2292 (#2372)? should we close this one?
I will check and close if it's not reproducible any more on master
When I run this code using kubernetes-client master, I'm getting a NullPointerException:
Exception in thread "main" java.lang.NullPointerException
at io.fabric8.kubernetes.client.utils.ResourceCompare.isEqualMetadata(ResourceCompare.java:94)
at io.fabric8.kubernetes.client.utils.ResourceCompare.compareKubernetesResource(ResourceCompare.java:89)
at io.fabric8.kubernetes.client.utils.ResourceCompare.equals(ResourceCompare.java:57)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.createOrReplace(BaseOperation.java:427)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.createOrReplace(BaseOperation.java:81)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.createOrReplace(BaseOperation.java:413)
at io.fabric8.kubernetes.client.dsl.base.BaseOperation.lambda$createOrReplaceWithNew$1(BaseOperation.java:385)
at io.fabric8.knative.serving.v1.DoneableRoute.done(DoneableRoute.java:27)
at io.fabric8.knative.client.demo.KnativeRouteCreateOrReplace.main(KnativeRouteCreateOrReplace.java:20)
Most helpful comment
Can you please add comment in english