Skip to content

feat(adr0034): Route assignment ops per domain - #1219

Merged
gtema merged 1 commit into
mainfrom
claude/per-domain-assignments-provider-k0tp5e
Sep 7, 2026
Merged

feat(adr0034): Route assignment ops per domain#1219
gtema merged 1 commit into
mainfrom
claude/per-domain-assignments-provider-k0tp5e

Conversation

@gtema

@gtema gtema commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Replace the single fixed backend_driver with an immutable
AssignmentBundle behind an ArcSwap: a global backend, per-instance named
[assignment.backends.*] backends, and an untargeted fan-out set. Routing
keys on the assignment target - system and unconfigured domains use the
global driver, a bound domain uses its mapped block's shared instance.

  • driver_for_target resolves domain/project targets to a backend via a
    per-domain binding-name cache; project targets resolve through the
    owning domain
  • list_role_assignments dispatches on system/project/domain filters and
    fans out over every active backend when untargeted, unioning and
    re-paginating the deduplicated result (ADR 0034 section 5)
  • reload/refresh_bindings rebuild the bundle and clear the cache in
    place; a failed rebuild keeps the last-known-good bundle
  • paginate_in_memory lifted into core-types so the SQL driver and the
    fan-out union share one implementation
  • PartialEq on AssignmentBackendConfig / OpenFGAAssignmentDriver for
    byte-equal block comparison on instance reuse

reload/refresh_bindings take &ServiceState, not &Config: bound_domains
and effective_config need it. Provider construction has no ServiceState,
so new() builds a global-only bootstrap bundle; the named instances and
fan-out set populate on the first reload (startup reactor lands in PR
5). Until then routing is the pre-ADR-0034 global-only behaviour.

Signed-off-by: Artem Goncharov artem.goncharov@gmail.com

Replace the single fixed backend_driver with an immutable
AssignmentBundle behind an ArcSwap: a global backend, per-instance named
[assignment.backends.*] backends, and an untargeted fan-out set. Routing
keys on the assignment target - system and unconfigured domains use the
global driver, a bound domain uses its mapped block's shared instance.

- driver_for_target resolves domain/project targets to a backend via a
  per-domain binding-name cache; project targets resolve through the
owning domain
- list_role_assignments dispatches on system/project/domain filters and
  fans out over every active backend when untargeted, unioning and
re-paginating the deduplicated result (ADR 0034 section 5)
- reload/refresh_bindings rebuild the bundle and clear the cache in
  place; a failed rebuild keeps the last-known-good bundle
- paginate_in_memory lifted into core-types so the SQL driver and the
  fan-out union share one implementation
- PartialEq on AssignmentBackendConfig / OpenFGAAssignmentDriver for
  byte-equal block comparison on instance reuse

reload/refresh_bindings take &ServiceState, not &Config: bound_domains
and effective_config need it. Provider construction has no ServiceState,
so new() builds a global-only bootstrap bundle; the named instances and
fan-out set populate on the first reload (startup reactor lands in PR
5). Until then routing is the pre-ADR-0034 global-only behaviour.

Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

🦢 Load Test Results

Goose Attack Report

Plan Overview

Action Started Stopped Elapsed Users
Increasing 26-09-07 18:20:13 26-09-07 18:20:36 00:00:23 0 → 45
Maintaining 26-09-07 18:20:36 26-09-07 18:21:06 00:00:30 45
Decreasing 26-09-07 18:21:06 26-09-07 18:21:06 00:00:00 0 ← 45

Request Metrics

Method Name # Requests # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
DELETE DELETE /v3/auth/tokens 44 0 536.23 25 685 1.47 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 88.00 88 88 0.03 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 75.00 75 75 0.03 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 189.50 169 210 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 101.00 101 101 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 133.00 133 133 0.03 0.00
GET 598 0 588.05 315 939 19.93 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 2093 2093 13.93 1 864 69.77 69.77
GET GET /v3/auth/tokens (validate new) 44 0 536.50 88 724 1.47 0.00
GET GET /v3/auth/tokens (validate revoked) 46 0 487.13 11 785 1.53 0.00
GET GET /v3/projects/:id 54 0 561.50 370 747 1.80 0.00
GET GET /v3/projects/:id (catalog) 82 0 556.52 370 782 2.73 0.00
GET GET /v3/role_assignments 41 0 577.15 397 736 1.37 0.00
GET GET /v3/role_assignments?role.id 42 0 540.40 384 731 1.40 0.00
GET GET /v3/role_assignments?scope.domain.id 41 0 534.00 331 669 1.37 0.00
GET GET /v3/role_assignments?user.id 42 0 542.71 404 703 1.40 0.00
GET GET /v3/roles 110 0 555.58 358 751 3.67 0.00
GET GET /v3/roles/:id 55 0 551.25 343 756 1.83 0.00
GET GET /v3/users/:id 105 0 577.81 371 762 3.50 0.00
GET GET /v3/users/:id (catalog) 104 0 582.41 359 823 3.47 0.00
GET GET /v4/api-keys 27 0 528.07 375 679 0.90 0.00
GET GET /v4/api-keys/:client_id 27 0 608.15 361 813 0.90 0.00
GET GET /v4/mappings/rulesets 28 0 542.43 393 746 0.93 0.00
GET GET /v4/mappings/rulesets/:mapping_id 28 0 547.79 448 720 0.93 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 921 0 48.93 9 198 30.70 0.00
GET GET /v4/oauth2/:domain_id/clients 27 0 568.70 408 700 0.90 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 28 0 547.00 408 745 0.93 0.00
GET GET /v4/oauth2/:domain_id/jwks 920 0 48.19 7 177 30.67 0.00
GET GET /v4/scim_realms 18 0 553.50 426 741 0.60 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 18 0 547.33 430 672 0.60 0.00
POST POST /v3/auth/tokens 43 0 518.56 371 680 1.43 0.00
POST POST /v3/auth/tokens (password, invalid) 34 0 909.94 478 1467 1.13 0.00
POST POST /v3/auth/tokens (password, project-scoped) 52 0 1287.79 870 2026 1.73 0.00
POST POST /v3/auth/tokens (password, unscoped) 55 0 1029.33 596 1830 1.83 0.00
POST POST /v3/auth/tokens (rescope to system) 97 0 629.51 407 833 3.23 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 59 0 514.44 305 673 1.97 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 51 0 1205.22 800 1678 1.70 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 202.00 202 202 0.03 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 18 0 595.22 406 743 0.60 0.00
Aggregated 5959 2093 230.34 1 2026 198.63 69.77

Response Time Metrics

Method Name 50%ile (ms) 60%ile (ms) 70%ile (ms) 80%ile (ms) 90%ile (ms) 95%ile (ms) 99%ile (ms) 100%ile (ms)
DELETE DELETE /v3/auth/tokens 600 600 600 600 685 685 685 685
DELETE DELETE /v3/projects/:id (teardown) 88 88 88 88 88 88 88 88
DELETE DELETE /v3/roles/:id (teardown) 75 75 75 75 75 75 75 75
DELETE DELETE /v3/users/:id (teardown) 170 170 170 210 210 210 210 210
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 101 101 101 101 101 101 101 101
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 133 133 133 133 133 133 133 133
GET 600 600 600 700 700 700 800 900
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 6 7 9 11 15 20 340 864
GET GET /v3/auth/tokens (validate new) 500 600 600 600 600 700 700 700
GET GET /v3/auth/tokens (validate revoked) 500 500 600 600 600 700 785 785
GET GET /v3/projects/:id 600 600 600 600 600 700 700 700
GET GET /v3/projects/:id (catalog) 600 600 600 600 700 700 782 782
GET GET /v3/role_assignments 600 600 600 700 700 700 700 700
GET GET /v3/role_assignments?role.id 500 600 600 600 600 700 700 700
GET GET /v3/role_assignments?scope.domain.id 500 600 600 600 600 600 669 669
GET GET /v3/role_assignments?user.id 500 500 600 600 700 700 700 700
GET GET /v3/roles 500 600 600 600 600 700 700 751
GET GET /v3/roles/:id 600 600 600 600 700 700 700 756
GET GET /v3/users/:id 600 600 600 600 700 700 700 762
GET GET /v3/users/:id (catalog) 600 600 600 600 700 700 800 800
GET GET /v4/api-keys 500 600 600 600 600 679 679 679
GET GET /v4/api-keys/:client_id 600 600 600 700 700 800 800 800
GET GET /v4/mappings/rulesets 500 600 600 600 600 700 700 700
GET GET /v4/mappings/rulesets/:mapping_id 500 600 600 600 600 600 700 700
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 43 48 57 68 83 96 120 198
GET GET /v4/oauth2/:domain_id/clients 600 600 600 600 600 700 700 700
GET GET /v4/oauth2/:domain_id/clients/:provider_id 500 500 600 600 700 700 700 700
GET GET /v4/oauth2/:domain_id/jwks 43 49 57 66 81 93 120 177
GET GET /v4/scim_realms 600 600 600 600 600 600 700 700
GET GET /v4/scim_realms/:domain_id/:provider_id 500 600 600 600 600 672 672 672
POST POST /v3/auth/tokens 500 500 600 600 600 680 680 680
POST POST /v3/auth/tokens (password, invalid) 900 900 1,000 1,000 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens (password, project-scoped) 1,000 1,000 1,000 1,000 2,000 2,000 2,000 2,000
POST POST /v3/auth/tokens (password, unscoped) 1,000 1,000 1,000 1,000 1,000 1,830 1,830 1,830
POST POST /v3/auth/tokens (rescope to system) 600 600 700 700 800 800 800 800
POST POST /v3/auth/tokens (rescope, invalid project) 500 500 600 600 600 600 673 673
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 1,000 1,000 1,000 1,000 1,000 1,000 1,678 1,678
POST POST /v4/api-keys/:client_id/revoke (teardown) 202 202 202 202 202 202 202 202
PUT PUT /v4/scim_realms/:domain_id/:provider_id 600 600 600 700 700 700 700 700
Aggregated 43 70 470 600 600 700 1,000 2,000

Status Code Metrics

Method Name Status Codes
DELETE DELETE /v3/auth/tokens 44 [204]
DELETE DELETE /v3/projects/:id (teardown) 1 [204]
DELETE DELETE /v3/roles/:id (teardown) 1 [204]
DELETE DELETE /v3/users/:id (teardown) 2 [204]
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 [204]
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 [204]
GET 598 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 2,062 [429], 31 [401]
GET GET /v3/auth/tokens (validate new) 44 [200]
GET GET /v3/auth/tokens (validate revoked) 46 [404]
GET GET /v3/projects/:id 54 [200]
GET GET /v3/projects/:id (catalog) 82 [200]
GET GET /v3/role_assignments 41 [200]
GET GET /v3/role_assignments?role.id 42 [200]
GET GET /v3/role_assignments?scope.domain.id 41 [200]
GET GET /v3/role_assignments?user.id 42 [200]
GET GET /v3/roles 110 [200]
GET GET /v3/roles/:id 55 [200]
GET GET /v3/users/:id 105 [200]
GET GET /v3/users/:id (catalog) 104 [200]
GET GET /v4/api-keys 27 [200]
GET GET /v4/api-keys/:client_id 27 [200]
GET GET /v4/mappings/rulesets 28 [200]
GET GET /v4/mappings/rulesets/:mapping_id 28 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 921 [200]
GET GET /v4/oauth2/:domain_id/clients 27 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 28 [200]
GET GET /v4/oauth2/:domain_id/jwks 920 [200]
GET GET /v4/scim_realms 18 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 18 [200]
POST POST /v3/auth/tokens 43 [201]
POST POST /v3/auth/tokens (password, invalid) 34 [401]
POST POST /v3/auth/tokens (password, project-scoped) 52 [201]
POST POST /v3/auth/tokens (password, unscoped) 55 [201]
POST POST /v3/auth/tokens (rescope to system) 97 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 59 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 51 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 18 [200]
Aggregated 50 [204], 298 [201], 2,062 [429], 124 [401], 46 [404], 3,379 [200]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 1 0 19.00 19 19 0.03 0.00
0.1 107 0 596.60 315 836 3.57 0.00
0.2 106 0 564.53 323 765 3.53 0.00
0.3 106 0 555.03 341 711 3.53 0.00
TokenLifecycle
1.0 0 0 0.00 0 0 0.00 0.00
1.1 46 0 2069.13 511 2451 1.53 0.00
ValidateToken
2.0 0 0 0.00 0 0 0.00 0.00
2.1 93 0 660.67 344 939 3.10 0.00
UserCRUD
3.0 0 0 0.00 0 0 0.00 0.00
3.1 0 0 0.00 0 0 0.00 0.00
3.2 105 0 577.84 371 762 3.50 0.00
3.3 2 0 189.50 169 210 0.07 0.00
ProjectCRUD
4.0 0 0 0.00 0 0 0.00 0.00
4.1 0 0 0.00 0 0 0.00 0.00
4.2 54 0 561.52 370 747 1.80 0.00
4.3 1 0 88.00 88 88 0.03 0.00
RoleCRUD
5.0 0 0 0.00 0 0 0.00 0.00
5.1 0 0 0.00 0 0 0.00 0.00
5.2 55 0 551.31 343 756 1.83 0.00
5.3 1 0 75.00 75 75 0.03 0.00
RoleList
6.0 0 0 0.00 0 0 0.00 0.00
6.1 110 0 555.58 358 751 3.67 0.00
RoleAssignmentList
7.0 0 0 0.00 0 0 0.00 0.00
7.1 41 0 577.15 397 736 1.37 0.00
7.2 42 0 542.71 404 703 1.40 0.00
7.3 41 0 534.02 331 669 1.37 0.00
7.4 42 0 540.48 384 731 1.40 0.00
UserRead
8.0 0 0 0.00 0 0 0.00 0.00
8.1 104 0 595.45 412 797 3.47 0.00
8.2 104 0 582.42 359 823 3.47 0.00
ProjectRead
9.0 0 0 0.00 0 0 0.00 0.00
9.1 82 0 558.38 367 894 2.73 0.00
9.2 82 0 556.52 370 782 2.73 0.00
PasswordAuth
10.0 55 0 1029.38 596 1830 1.83 0.00
10.1 52 0 1287.85 870 2026 1.73 0.00
PasswordAuthNegative
11.0 34 0 910.03 478 1467 1.13 0.00
Rescope
12.0 0 0 0.00 0 0 0.00 0.00
12.1 97 0 629.55 407 833 3.23 0.00
RescopeNegative
13.0 0 0 0.00 0 0 0.00 0.00
13.1 59 0 514.51 305 673 1.97 0.00
SystemScopeAuth
14.0 51 0 1205.24 800 1678 1.70 0.00
ApiKeyCRUD
15.0 0 0 0.00 0 0 0.00 0.00
15.1 0 0 0.00 0 0 0.00 0.00
15.2 27 0 608.22 362 813 0.90 0.00
15.3 27 0 528.11 375 679 0.90 0.00
15.4 1 0 202.00 202 202 0.03 0.00
MappingCRUD
16.0 0 0 0.00 0 0 0.00 0.00
16.1 0 0 0.00 0 0 0.00 0.00
16.2 28 0 547.79 448 720 0.93 0.00
16.3 28 0 542.46 393 746 0.93 0.00
16.4 1 0 101.00 101 101 0.03 0.00
OAuth2ClientCRUD
17.0 0 0 0.00 0 0 0.00 0.00
17.1 0 0 0.00 0 0 0.00 0.00
17.2 28 0 547.00 408 745 0.93 0.00
17.3 27 0 568.78 409 700 0.90 0.00
17.4 1 0 133.00 133 133 0.03 0.00
OAuth2Discovery
18.0 920 0 48.22 7 177 30.67 0.00
18.1 921 0 48.95 9 198 30.70 0.00
ScimRealmRead
19.0 0 0 0.00 0 0 0.00 0.00
19.1 18 0 547.39 430 672 0.60 0.00
19.2 18 0 553.56 426 741 0.60 0.00
19.3 18 0 595.28 406 743 0.60 0.00
ScimSync
20.0 0 0 0.00 0 0 0.00 0.00
20.1 0 0 0.00 0 0 0.00 0.00
20.2 0 0 0.00 0 0 0.00 0.00
20.3 2093 0 13.96 1 864 69.77 0.00
20.4 2092 0 0.00 0 0 69.73 0.00
20.5 2092 0 0.00 0 0 69.73 0.00
20.6 1 0 0.00 0 0 0.03 0.00
Aggregated 10014 0 137.07 1 2451 333.80 0.00

Scenario Metrics

Transaction # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 6 104 1728.72 1448 2101 3.47 17.33
TokenLifecycle 3 43 2151.95 1805 2451 1.43 14.33
ValidateToken 2 91 665.00 481 939 3.03 45.50
UserCRUD 2 103 578.56 371 762 3.43 51.50
ProjectCRUD 1 53 562.81 370 747 1.77 53.00
RoleCRUD 1 54 552.81 343 756 1.80 54.00
RoleList 2 108 556.94 358 751 3.60 54.00
RoleAssignmentList 3 40 2202.50 1808 2457 1.33 13.33
UserRead 4 101 1188.19 906 1462 3.37 25.25
ProjectRead 3 81 1118.27 833 1385 2.70 27.00
PasswordAuth 4 52 2319.46 1747 3286 1.73 13.00
PasswordAuthNegative 1 33 903.85 478 1467 1.10 33.00
Rescope 2 95 633.46 439 833 3.17 47.50
RescopeNegative 1 58 516.59 305 673 1.93 58.00
SystemScopeAuth 2 49 1207.37 800 1678 1.63 24.50
ApiKeyCRUD 1 26 1142.42 889 1309 0.87 26.00
MappingCRUD 1 27 1094.70 962 1331 0.90 27.00
OAuth2ClientCRUD 1 27 1120.44 900 1281 0.90 27.00
OAuth2Discovery 3 919 97.59 21 283 30.63 306.33
ScimRealmRead 1 18 1707.56 1498 1894 0.60 18.00
ScimSync 1 2092 13.82 1 864 69.73 2092.00
Aggregated 45 4174 323.32 1 3286 139.13 3027.58

Error Metrics

Method Name # Error
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 49 401 Unauthorized: GET /SCIM/v2/:domain_id/Users (sync reconcile list)
POST POST /SCIM/v2/:domain_id/Users (sync provision) 1 401 Unauthorized: POST /SCIM/v2/:domain_id/Users (sync provision)
POST POST /v3/auth/tokens (password, invalid) 80 401 Unauthorized: POST /v3/auth/tokens (password, invalid)
POST POST /v3/auth/tokens (rescope, invalid project) 152 401 Unauthorized: POST /v3/auth/tokens (rescope, invalid project)
GET GET /v3/auth/tokens (validate revoked) 156 404 Not Found: GET /v3/auth/tokens (validate revoked)
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 2281 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users (sync reconcile list)

View full report

@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

🧪 Tempest Identity Compatibility Results (advisory, non-blocking)

rust

Totals
======
Ran: 133 tests in 29.5074 sec.
 - Passed: 66
 - Skipped: 4
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 63
Sum of execute time for each test: 23.7268 sec.
Failed test IDs
===== FAILED TESTS (target=rust) =====
tempest.api.identity.admin.v3.test_credentials.CredentialsTestJSON.test_credentials_create_get_update_delete[id-7cd59bf9-bda4-4c72-9467-d21cab278355,smoke]
tempest.api.identity.admin.v3.test_application_credentials.ApplicationCredentialsV3AdminTest.test_create_application_credential_with_roles[id-3b3dd48f-3388-406a-a9e6-4d078a552d0e]
tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON.test_group_users_add_list_delete[id-1598521a-2f36-4606-8df9-30772bd51339,smoke]
tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON.test_list_user_groups[id-64573281-d26a-4a52-b899-503cb0f4e4ec]
tempest.api.identity.admin.v3.test_domains_negative.DomainsNegativeTestJSON.test_create_domain_with_name_length_over_64[id-37b1bbf2-d664-4785-9a11-333438586eae,negative]
tempest.api.identity.admin.v3.test_domains_negative.DomainsNegativeTestJSON.test_delete_active_domain[gate,id-1f3fbff5-4e44-400d-9ca1-d953f05f609b,negative]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_check_revoke_roles_on_projects_group[id-26021436-d5a4-4256-943c-ded01e0d4b45]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_check_revoke_roles_on_projects_user[id-18b70e45-7687-4b72-8277-b8f1a47d7591]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_check_revoke_roles_on_domains_group[id-c7a8dda2-be50-4fb4-9a9c-e830771078b1]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_check_revoke_roles_on_domains_user[id-4e6f0366-97c8-423c-b2be-41eae6ac91c8]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_domain[id-3acf666e-5354-42ac-8e17-8b68893bcd36]
tempest.api.identity.admin.v3.test_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_project_tree[id-9f02ccd9-9b57-46b4-8f77-dd5a736f3a06]
tempest.api.identity.admin.v3.test_default_project_id.TestDefaultProjectId.test_default_project_id[id-d6110661-6a71-49a7-a453-b5e26640ff6d]
tempest.api.identity.admin.v3.test_list_projects.ListProjectsStaticTestJSON.test_list_projects[id-1d830662-22ad-427c-8c3e-4ec854b0af44]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_domain_config_and_show_config_groups_and_options[id-9e3ff13c-f597-4f01-9377-d6c06c2a1477]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_update_and_delete_domain_config_groups_and_opts[id-c7510fa2-6661-4170-9c6b-4783a80651e9]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_show_default_group_config_and_options[id-11a02bf0-6f94-4380-b3b0-c8dc18fc0d22]
tempest.api.identity.admin.v3.test_list_projects.ListProjectsTestJSON.test_list_projects_with_enabled[id-0fe7a334-675a-4509-b00e-1c4b95d5dae8]
tempest.api.identity.admin.v3.test_list_projects.ListProjectsTestJSON.test_list_projects_with_parent[id-6edc66f5-2941-4a17-9526-4073311c1fac]
tempest.api.identity.admin.v3.test_project_tags.IdentityV3ProjectTagsTest.test_list_update_delete_project_tags[id-7c123aac-999d-416a-a0fb-84b915ab10de]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_create_domain_without_description[id-2abf8764-309a-4fa9-bc58-201b799817ad]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_create_update_delete_domain[id-f2f5b44a-82e8-4dad-8084-0661ea3b18cf,smoke]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_domain_delete_cascades_content[id-d8d318b7-d1b3-4c37-94c5-3c5ba0b121ea]
tempest.api.identity.admin.v3.test_domains.DomainsTestJSON.test_list_domains_filter_by_enabled[id-3fd19840-65c1-43f8-b48c-51bdd066dff9]
tempest.api.identity.admin.v3.test_list_users.UsersV3TestJSON.test_list_users_with_not_enabled[id-bff8bf2f-9408-4ef5-b63a-753c8c2124eb]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_all[id-4773ebd5-ecbf-4255-b8d8-b63e6f72b65d,smoke]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_query[id-6268b345-87ca-47c0-9ce3-37792b43403a]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_get_available_domain_scopes[id-ec5ecb05-af64-4c04-ac86-4d9f6f12f185]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_expire[id-0ed14b66-cefd-4b5c-a964-65759453e292]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_rescope_token[id-565fa210-1da1-4563-999b-f7b5b67cf112]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_create_is_domain_project[id-a7eb9416-6f9b-4dbb-b71b-7f73aaef59d5]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_project_create_with_parent[id-1854f9c0-70bc-4d11-a08a-1c789d339e3d]
tempest.api.identity.admin.v3.test_projects.ProjectsTestJSON.test_project_get_equals_list[id-d1db68b6-aebe-4fa0-b79d-d724d2e21162]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_create_and_show_consumer[id-c8307ea6-a86c-47fd-ae7b-5b3b2caca76d]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_delete_consumer[id-fdfa1b7f-2a31-4354-b2c7-f6ae20554f93]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_list_consumers[id-09ca50de-78f2-4ffb-ac71-f2254036b2b8]
tempest.api.identity.admin.v3.test_oauth_consumers.OAUTHConsumersV3Test.test_update_consumer[id-080a9b1a-c009-47c0-9979-5305bf72e3dc]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_impersonate[id-5a0a91a4-baef-4a14-baba-59bf4d7fcace]
tempest.api.identity.admin.v3.test_users_negative.UsersNegativeTest.test_create_user_for_non_existent_domain[id-e75f006c-89cc-477b-874d-588e4eab4b17,negative]
tempest.api.identity.admin.v3.test_projects_negative.ProjectsNegativeStaticTestJSON.test_create_projects_name_length_over_64[id-502b6ceb-b0c8-4422-bf53-f08fdb21e2f0,negative]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_noimpersonate[id-ed2a8779-a7ac-49dc-afd7-30f32f936ed2]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_assignments_for_domain_roles[id-3859df7e-5b78-4e4d-b10e-214c8953842a]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_assignments_for_implied_roles_create_delete[id-c8828027-df48-4021-95df-b65b92c7429e]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_domain[id-4bf8a70b-e785-413a-ad53-9f91ce02faa7]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_project[id-cbf11737-1904-4690-9613-97bcbb3df1c4]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_group_on_system[id-c888fe4f-8018-48db-b959-542225c1b4b6]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_grant_list_revoke_role_to_user_on_domain[id-6c9a2940-3625-43a3-ac02-5dcec62ef3bd]
tempest.api.identity.v3.test_catalog.IdentityCatalogTest.test_catalog_standardization[id-56b57ced-22b8-4127-9b8a-565dfb0207e2]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_implied_domain_roles[id-eb1e1c24-1bc4-4d47-9748-e127a1852c82]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_implied_roles_create_check_show_delete[id-c90c316c-d706-4728-bcba-eb1912081b69]
tempest.api.identity.admin.v3.test_roles.RolesV3TestJSON.test_role_create_update_show_list[id-18afc6c0-46cf-4911-824e-9989cc056c3a,smoke]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential[id-8080c75c-eddc-4786-941a-c2da7039ae61]
tempest.api.identity.v3.test_tokens.TokensV3Test.test_validate_token[id-a9512ac3-3909-48a4-b395-11f438e16260]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential_expires[id-852daf0c-42b5-4239-8466-d193d0543ed3]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_list_application_credentials[id-ff0cd457-6224-46e7-b79e-0ada4964a8a6]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_query_application_credentials[id-9bb5e5cc-5250-493a-8869-8b665f6aa5f6]
tempest.api.identity.admin.v3.test_users.UsersV3TestJSON.test_list_user_projects[id-a831e70c-e35b-430b-92ed-81ebbc5437b8]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_media_types[id-657c1970-4722-4189-8831-7325f3bc4265,smoke]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_resources[id-b9232f5e-d9e5-4d97-b96c-28d3db4de1bd,smoke]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_identity_v3_existence[id-79aec9ae-710f-4c54-a4fc-3aa25b4feac3]
tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_list_api_versions[id-721f480f-35b6-46c7-846e-047e6acea0dc,smoke]
tempest.api.identity.v3.test_projects.IdentityV3ProjectsTest.test_list_projects_returns_only_authorized_projects[id-86128d46-e170-4644-866a-cc487f699e1d]
===== END FAILED TESTS (target=rust) =====

View full run

@gtema
gtema added this pull request to the merge queue Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchclaude/per-domain-assignments-provider-k0tp5e
Testbedubuntu-latest
Click to view all benchmark results
BenchmarkLatencyBenchmark Result
nanoseconds (ns)
(Result Δ%)
Upper Boundary
nanoseconds (ns)
(Limit %)
Command_Serde/apply/remove📈 view plot
🚷 view threshold
86,057.00 ns
(-66.06%)Baseline: 253,576.47 ns
1,303,074.01 ns
(6.60%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
89,822.00 ns
(-77.86%)Baseline: 405,791.00 ns
3,193,799.49 ns
(2.81%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
124.62 ns
(+5.63%)Baseline: 117.98 ns
152.31 ns
(81.82%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
109.85 ns
(+4.40%)Baseline: 105.22 ns
135.17 ns
(81.27%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
222.57 ns
(+16.61%)Baseline: 190.87 ns
241.34 ns
(92.22%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
110.04 ns
(+4.62%)Baseline: 105.18 ns
135.76 ns
(81.05%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
162.50 ns
(-13.44%)Baseline: 187.73 ns
268.49 ns
(60.52%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
127.08 ns
(-18.52%)Baseline: 155.96 ns
217.07 ns
(58.54%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
251.35 ns
(-4.67%)Baseline: 263.67 ns
357.59 ns
(70.29%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
125.73 ns
(-18.12%)Baseline: 153.55 ns
211.56 ns
(59.43%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
112.80 ns
(+0.15%)Baseline: 112.63 ns
148.88 ns
(75.76%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
220.96 ns
(+10.83%)Baseline: 199.36 ns
261.91 ns
(84.36%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
159.00 ns
(-18.88%)Baseline: 196.01 ns
282.35 ns
(56.31%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
251.44 ns
(-7.87%)Baseline: 272.92 ns
374.50 ns
(67.14%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
5,792,500.00 ns
(+85.61%)Baseline: 3,120,808.42 ns
8,025,262.34 ns
(72.18%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
31,513.00 ns
(-15.63%)Baseline: 37,352.17 ns
51,472.44 ns
(61.22%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
241,840.00 ns
(-79.31%)Baseline: 1,169,061.41 ns
11,495,283.01 ns
(2.10%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
258,550.00 ns
(-73.50%)Baseline: 975,718.59 ns
7,555,252.10 ns
(3.42%)
build_snapshot/default📈 view plot
🚷 view threshold
89,740.00 ns
(-26.77%)Baseline: 122,537.34 ns
268,577.57 ns
(33.41%)
fernet token/project📈 view plot
🚷 view threshold
1,492.30 ns
(+4.48%)Baseline: 1,428.26 ns
1,797.14 ns
(83.04%)
get_data_keyspace📈 view plot
🚷 view threshold
0.29 ns
(-8.53%)Baseline: 0.32 ns
0.39 ns
(74.66%)
get_db📈 view plot
🚷 view threshold
0.29 ns
(-8.94%)Baseline: 0.32 ns
0.39 ns
(74.44%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
144.68 ns
(+3.03%)Baseline: 140.43 ns
180.01 ns
(80.37%)
get_keyspace📈 view plot
🚷 view threshold
12.11 ns
(+105.12%)Baseline: 5.90 ns
13.71 ns
(88.28%)
🐰 View full continuous benchmarking report in Bencher

Merged via the queue into main with commit 5bd13ec Sep 7, 2026
35 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant