Problem
Application start/stop checks (isCanBeStart) and state updates (starting()) are not atomic. Rapid duplicate clicks can submit multiple start/cancel requests before startFutureMap/cancelFutureMap is populated.
Proposed solution
- Use in-memory
pendingStarts / pendingCancels guards per application id
- Atomically transition DB state to STARTING/CANCELLING via conditional
lambdaUpdate
- Clean up pending flags in async completion callbacks and on submission failure
Scope
FlinkApplicationActionServiceImpl
SparkApplicationActionServiceImpl
Problem
Application start/stop checks (
isCanBeStart) and state updates (starting()) are not atomic. Rapid duplicate clicks can submit multiple start/cancel requests beforestartFutureMap/cancelFutureMapis populated.Proposed solution
pendingStarts/pendingCancelsguards per application idlambdaUpdateScope
FlinkApplicationActionServiceImplSparkApplicationActionServiceImpl