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

Siyao Meng updated HDDS-16859:
------------------------------
    Attachment: CR-1-ranger-sync-push-current-role-members.patch

> Ranger background sync pushes the role members loaded at the start of the 
> attempt instead of the current ones
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: HDDS-16859
>                 URL: https://issues.apache.org/jira/browse/HDDS-16859
>             Project: Apache Ozone
>          Issue Type: Bug
>            Reporter: Siyao Meng
>            Priority: Major
>         Attachments: CR-1-ranger-sync-push-current-role-members.patch
>
>
> h3. Mechanism
> Each attempt of {{OMRangerBGSyncService.executeOMDBToRangerSync}} first loads 
> the Ranger roles and the OM role members 
> ({{OMMultiTenantManagerImpl.getAllRolesFromCache}}). 
> {{processAllRolesFromOMDB}} then compares them, and for each role that 
> differs {{pushOMDBRoleToRanger}} takes the write lock and writes the members 
> from that load to Ranger. Tenant requests change Ranger and the tenant cache 
> under the same lock, so by the time of the push the loaded members can be 
> older than the tenant cache.
> The {{createRole}} branch of {{processAllRolesFromOMDB}} decides from the 
> same load. If the tenant is deleted after the load, the branch creates its 
> role again.
> h3. Impact
> * Right after a push, the members of the Ranger role can differ from the 
> tenant cache: Ranger has the members of the load, not those of the last 
> completed tenant request.
> * A role created again for a deleted tenant stays in Ranger. The sync finds 
> Ranger roles only through the labeled policies, and the deleted tenant has 
> none, so no later run deletes the role. A later tenant create with the same 
> name then fails in Ranger on the existing role (code reading, not run against 
> Ranger).
> h3. Reproduction
> There is no standalone reproduction. The two regression tests in the attached 
> patch cover it and fail on unmodified source. Both use 
> {{InMemoryMultiTenantAccessController}} in place of Ranger.
> * {{TestOMMultiTenantManagerImpl.testRangerSyncPushesCurrentRoleMembers}}: 
> the OM members of a differing role change after the load. Right after the 
> push Ranger must have the current members. Without the change it has 
> {{["user2", "seed-user1"]}} instead of {{["seed-user1"]}}.
> * 
> {{TestOMMultiTenantManagerImpl.testRangerSyncDoesNotCreateRoleOfTenantDeletedDuringSync}}:
>  the tenant is deleted after the sync created its policies again and before 
> it creates its roles. After the run Ranger must have neither role. Without 
> the change both roles are there.
> h3. Patch
> [^CR-1-ranger-sync-push-current-role-members.patch], against 
> a6b7bdb937109ba2893688b41a89470bc95c88cf. It also applies to master at 
> b0aa6475b78.
> A new private helper {{OMRangerBGSyncService.getCurrentRoleUsers}} reads the 
> role members from {{getAllRolesFromCache}}, or returns the loaded members for 
> other {{OMMultiTenantManager}} implementations, as {{loadAllRolesFromOM}} 
> does. {{pushOMDBRoleToRanger}} calls it under its write lock and writes the 
> members it returns. The {{createRole}} branch calls it under its own write 
> lock. Both skip the role when its tenant has been deleted. Without concurrent 
> tenant requests the sync writes the same data as before.
> Not changed: the orphan {{deleteRole}} branch also decides from the load. A 
> role it deletes by mistake is created again by the next run (code reading, 
> not run).
> With the patch the tenant request, manager and in-memory controller unit 
> suites pass (25 tests), as do {{TestMultiTenantVolume}} and 
> {{TestOzoneTenantShell}} (11 tests), and checkstyle on 
> {{hadoop-ozone/ozone-manager}} is clean.
> Found by code review of the OM multi-tenancy and Ranger sync paths, as part 
> of the TLA+ verification effort under HDDS-15926, on commit 
> a6b7bdb937109ba2893688b41a89470bc95c88cf. Checked against HDDS issues and 
> apache/ozone pull requests for duplicates before filing. Related but not a 
> duplicate: HDDS-7178 (introduced the optimistic read of the load). The 
> attached patch is a proposal for review. Generated with Specula (Claude Opus 
> 5.5).



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