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

Dale Richardson reassigned YUNIKORN-3348:
-----------------------------------------

    Assignee: Dale Richardson

> Develop doc fixups
> ------------------
>
>                 Key: YUNIKORN-3348
>                 URL: https://issues.apache.org/jira/browse/YUNIKORN-3348
>             Project: Apache YuniKorn
>          Issue Type: Improvement
>          Components: documentation
>            Reporter: Dale Richardson
>            Assignee: Dale Richardson
>            Priority: Major
>
> The only statement of the scheduler's lock-ordering rule anywhere on the site 
> is malformed, and the surrounding text has been overtaken by a feature added 
> in 2024. Two adjacent gaps make the same information hard to find. All four 
> items below are small, self-contained fixes.
> h3. 1. The lock-order rule is garbled
> {{docs/design/cache_removal.md}}, lines 424-426:
> {quote}
> It is possible to acquire another lock while holding a lock, but we need to 
> make sure that we do not allow:
> * Holding A.lock and acquire B's lock.
> * Holding B.lock and acquire B's lock.
> {quote}
> The second bullet should read "Holding *B.lock* and acquire *A's* lock". As 
> written it says "B then B", which is a tautology, so the rule as published 
> states nothing.
> This is the only lock-ordering statement in the documentation. The same text 
> appears in every versioned copy from 1.3.0 through 1.9.0.
> Suggested fix:
> {noformat}
> - Holding A.lock and acquire B's lock.
> - Holding B.lock and acquire A's lock.
> {noformat}
> h3. 2. "No known tools" is no longer true
> {{docs/design/cache_removal.md}}, line 456:
> {quote}
> There are no known tools that could be used to detect or describe lock order.
> {quote}
> This has been false since YUNIKORN-2539 (commit 5758d7a, 2024-04-05) added 
> {{pkg/locking}}, which wraps {{github.com/sasha-s/go-deadlock}} and performs 
> both lock-order (ABBA) detection and lock-wait timeout detection.
> Suggested replacement:
> {quote}
> Lock order and lock-wait timeouts can be detected at runtime. The 
> {{pkg/locking}} package wraps {{go-deadlock}} and is enabled via the 
> environment variables described in the service configuration documentation.
> {quote}
> h3. 3. Deadlock detection settings are undocumented
> {{pkg/locking}} is configured entirely by environment variables, none of 
> which appear anywhere on the site:
> || Variable || Default || Effect ||
> | {{DEADLOCK_DETECTION_ENABLED}} | false | Master switch. go-deadlock is 
> compiled in either way, it is only disabled. |
> | {{DEADLOCK_TIMEOUT_SECONDS}} | 60 | Lock-wait threshold before a potential 
> deadlock is reported. |
> | {{DEADLOCK_EXIT}} | false | Call {{os.Exit(1)}} when a potential deadlock 
> is detected. |
> | {{DEADLOCK_DISABLE_LOCK_ORDER}} | false | Disable ABBA lock-order 
> detection, keeping only the timeout check. |
> {{docs/user_guide/service_config.md}} already documents comparable runtime 
> knobs ({{GOGC}}, {{GOMEMLIMIT}}), so that is the natural home.
> This matters operationally: with {{DEADLOCK_EXIT=true}} the scheduler process 
> terminates on detection, and an operator currently has nothing to look up. 
> The detection state is also exposed over REST — {{/ws/v1/config}} returns 
> {{DeadlockDetectionEnabled}} and {{DeadlockTimeoutSeconds}} — with no 
> documentation of what those fields mean.
> h3. 4. {{make test}} runs with detection enabled, which is not stated
> {{docs/developer_guide/build.md}}, line 165, says only:
> {quote}
> * A full unit test run {{make test}}
> {quote}
> The {{test}} target in both yunikorn-core and yunikorn-k8shim exports 
> {{DEADLOCK_DETECTION_ENABLED=true}}, {{DEADLOCK_TIMEOUT_SECONDS=10}} and 
> {{DEADLOCK_EXIT=true}}, and runs the suite under {{-race}}. A contributor 
> whose test run exits with a "POTENTIAL DEADLOCK" dump has no documentation 
> explaining what produced it or how to adjust the timeout.
> h3. Proposed changes
> # Fix the A/B typo at {{cache_removal.md}} lines 425-426.
> # Replace the "no known tools" sentence at {{cache_removal.md}} line 456 with 
> a reference to {{pkg/locking}} and the variables above.
> # Add a "Deadlock detection" subsection to 
> {{docs/user_guide/service_config.md}} documenting the four environment 
> variables.
> # Extend the {{make test}} bullet in {{docs/developer_guide/build.md}} to 
> state that it runs with {{-race}} and deadlock detection enabled (exit on 
> detection, 10 second timeout).
> h3. Note on cache_removal.md
> {{cache_removal.md}} is a design proposal for a migration completed under 
> YUNIKORN-317, yet its "Current locking" section is the de facto locking 
> reference for the project. The project already has a convention for this 
> situation: documents under {{docs/archived_design/}} carry a {{:::caution}} 
> banner naming the superseding document. Either the locking content should be 
> lifted into a maintained developer guide page, or the document should state 
> plainly which parts are still current. A follow-up issue is proposed for that.



--
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