Kubernetes-client: Knative Client Route createOrReplace bug

Created on 16 Jul 2020  ·  6Comments  ·  Source: fabric8io/kubernetes-client

使用 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:

企业微信截图_1594892771930

但是真实请求 URL 应该是下面这样:
企业微信截图_1594893078923

Most helpful comment

Can you please add comment in english

All 6 comments

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)
Was this page helpful?
0 / 5 - 0 ratings