Dale Richardson created YUNIKORN-3424:
-----------------------------------------
Summary: createAppPlaceholders walks the application task map
without the application lock
Key: YUNIKORN-3424
URL: https://issues.apache.org/jira/browse/YUNIKORN-3424
Project: Apache YuniKorn
Issue Type: Bug
Components: shim - kubernetes
Reporter: Dale Richardson
{{PlaceholderManager.createAppPlaceholders}} holds the placeholder manager lock
and calls the internal, lock-assuming {{app.getPlaceHolderTasks()}}, which
ranges over {{app.taskMap}}. It runs on the goroutine {{onReserving}} spawns,
so no application lock is inherited, while the informer path adds tasks to the
same map, including the placeholder pods this very function creates. The
sibling {{cleanUp}} in the same file uses the locked {{GetPlaceHolderTasks()}},
and this function already takes the application lock four other ways, so the
unlocked call is an oversight, not a design.
Confirmed with the race detector on the fork fix branch (three-site report
against master). Same fatal map-iteration class as the {{postAppAccepted}}
ticket.
Fix: use the locked accessor. Hoisting the walk out of the manager lock would
widen the window for double placeholder creation, which that lock exists to
prevent. A fix exists on the tigerquoll fork (PR #13 there) and will be filed
once this has a number.
Marker: {{createAppPlaceholders}} in {{placeholder_manager.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]