Alex Kukhar created FLINK-41222:
-----------------------------------

             Summary: Autoscaler reports an error when a ConfigMap write is 
applied but the client's retry conflicts
                 Key: FLINK-41222
                 URL: https://issues.apache.org/jira/browse/FLINK-41222
             Project: Flink
          Issue Type: Bug
          Components: Autoscaler, Kubernetes Operator
    Affects Versions: kubernetes-operator-1.16.1, kubernetes-operator-1.15.0
         Environment: Flink Kubernetes Operator 1.15.0 (fabric8 
kubernetes-client 7.3.1), GKE control plane 1.35.6-gke.1250001
            Reporter: Alex Kukhar


The autoscaler stores its state in a ConfigMap through 
{{{}ConfigMapView.flush(){}}}. If the API server applies a write but its 
response arrives after the client's request timeout (fabric8 default 10 s), the 
fabric8 client retries the request. The retry fails with 409. An update fails 
because its {{resourceVersion}} is now stale, and a create fails because the 
ConfigMap already exists. {{ConfigMapStore.flush()}} then drops its cache entry 
and rethrows. {{JobAutoScalerImpl}} counts an autoscaler error and emits an 
{{AutoscalerError}} event, even though Kubernetes already holds the state the 
operator wrote.



We saw this on GKE while control-plane storage writes stalled for 10–25 s. The 
retried autoscaler ConfigMap updates failed with 409 "the object has been 
modified", and no other writer had changed those ConfigMaps in between.


Proposed fix: when the update or the create gets a 409, re-read the ConfigMap 
and adopt it if its data and owner references equal the local state. Any other 
conflict is rethrown as before.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to