Santwana Verma created FLINK-41262:
--------------------------------------

             Summary: Suspended job runs again from scratch if its JobManager 
restarts (no HA)
                 Key: FLINK-41262
                 URL: https://issues.apache.org/jira/browse/FLINK-41262
             Project: Flink
          Issue Type: Bug
          Components: Kubernetes Operator
            Reporter: Santwana Verma


When you suspend an application-mode FlinkDeployment with `upgradeMode: 
savepoint`, the operator stops the job with a savepoint but leaves the 
JobManager running until jm-`deployment.shutdown-ttl `runs out, which is a day 
by default.

If you don't have HA configured and that JobManager pod restarts in the 
meantime (OOMKill, eviction, node drain, someone deleting the pod), the 
entrypoint just submits the job again. It starts over from its initial state. 
With a Kafka source that means it reads from the startup offsets again and 
writes everything to the sink a second time.

The operator doesn't notice any of this. It stops observing the job once the 
spec is suspended, so the resource still says SUSPENDED / FINISHED while the 
job runs.

We hit this when a kept JobManager got OOMKilled overnight. To reproduce it on 
demand:
 # Deploy a streaming job in native application mode without 
high-availability.type, and wait until it's RUNNING.
 # Set job.state: suspended with upgradeMode: savepoint. The resource goes to 
SUSPENDED, but the JobManager pod stays up.
 # Delete the JobManager pod.
 # The new JobManager logs "Submitting Job with JobId=..." and "No checkpoint 
found during restore", and the job goes back to RUNNING. The resource still 
shows SUSPENDED.

With Kubernetes HA turned on, the same steps don't resubmit the job. The 
operator sets job-result-store.delete-on-commit: false, so the restarted 
JobManager can see that the job already finished.

The CANCEL suspend mode has the same problem, and so does suspending a job that 
has already finished. Standalone mode isn't affected, because it always deletes 
the cluster on suspend.

I'd suggest deleting the JobManager Deployment as part of the suspend when HA 
isn't enabled, like the stateless and last-state modes already do. With HA we 
can keep the current behaviour. The downside is that without HA you lose the 
Flink UI for a suspended job right away instead of a day later.



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

Reply via email to