[ 
https://issues.apache.org/jira/browse/YUNIKORN-3425?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

weichen lai reassigned YUNIKORN-3425:
-------------------------------------

    Assignee: weichen lai

> Admission controller serving goroutine reads the server field Shutdown nils
> ---------------------------------------------------------------------------
>
>                 Key: YUNIKORN-3425
>                 URL: https://issues.apache.org/jira/browse/YUNIKORN-3425
>             Project: Apache YuniKorn
>          Issue Type: Sub-task
>          Components: shim - kubernetes
>            Reporter: Dale Richardson
>            Assignee: weichen lai
>            Priority: Major
>
> {{WebHook.Startup}} assigns {{wh.server}} under the mutex and then starts a 
> goroutine that calls {{wh.server.ListenAndServeTLS}} after the lock is 
> released. {{WebHook.Shutdown}} sets the field to {{nil}} under the same 
> mutex. The reload loop in {{main}} runs {{Shutdown()}} then {{Startup()}} on 
> {{SIGUSR1}} and on the certificate-expiry timer, so every rotation exercises 
> the sequence.
> Reproduced on the fork fix branch: the pre-fix test produces both the data 
> race report and the nil-receiver SIGSEGV ({{ListenAndServeTLS(0x0, ...)}}), 
> and the controller's own sequential reload cycle trips the detector without 
> any timing luck. A crash here takes admission down until the pod restarts. In 
> the same critical section {{Shutdown}} holds the mutex across 
> {{http.Server.Shutdown(context.Background())}}, draining in-flight admissions 
> with no timeout while the reload's {{Startup}} waits for the lock.
> Fix: capture the server in a local under the lock at both ends so neither 
> goroutine touches the field outside the critical section; keep the drain 
> synchronous so the port is free before rebinding. A drain timeout is a 
> separate change. A fix exists on the tigerquoll fork (PR #10 there) and will 
> be filed once this has a number.
> Marker: the serving goroutine in {{cmd/admissioncontroller/main.go}} carries 
> this JIRA; the fix removes it.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to