Skip to content

feat(oauth2): Add secondary indexes to raft driver - #1327

Merged
gtema merged 1 commit into
mainfrom
issue_1255
Sep 19, 2026
Merged

gtema merged 1 commit into
mainfrom
issue_1255

Conversation

@gtema

@gtema gtema commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

Refresh token revocation and expiry sweeps were full scans: nothing
mapped a user/client/domain to its refresh families, and no index
ordered records by expires_at. Add refresh_user_idx,
refresh_client_idx, refresh_domain_idx and expiry_idx, written
atomically with their primary record via StorageApi::transaction,
plus the corresponding list_refresh_families_by_* and list_expired
backend methods.

Closes: #1255
Signed-off-by: artem.goncharov artem.goncharov@gmail.com

Refresh token revocation and expiry sweeps were full scans: nothing
mapped a user/client/domain to its refresh families, and no index
ordered records by expires_at. Add refresh_user_idx,
refresh_client_idx, refresh_domain_idx and expiry_idx, written
atomically with their primary record via StorageApi::transaction,
plus the corresponding list_refresh_families_by_* and list_expired
backend methods.

Closes: #1255
Signed-off-by: artem.goncharov <artem.goncharov@gmail.com>
@gtema
gtema enabled auto-merge September 19, 2026 07:22
@gtema
gtema added this pull request to the merge queue Sep 19, 2026
@github-actions

Copy link
Copy Markdown

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

rust

Totals
======
Ran: 132 tests in 27.0017 sec.
 - Passed: 65
 - Skipped: 4
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 63
Sum of execute time for each test: 21.4065 sec.
Failed test IDs
===== FAILED TESTS (target=rust) =====
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_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]
setUpClass (tempest.api.identity.admin.v3.test_credentials.CredentialsTestJSON)
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_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_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_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_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_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_trusts.TrustsV3TestJSON.test_get_trusts_all[id-4773ebd5-ecbf-4255-b8d8-b63e6f72b65d,smoke]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_get_trusts_query[id-6268b345-87ca-47c0-9ce3-37792b43403a]
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_list_users.UsersV3TestJSON.test_list_users_with_not_enabled[id-bff8bf2f-9408-4ef5-b63a-753c8c2124eb]
tempest.api.identity.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_expire[id-0ed14b66-cefd-4b5c-a964-65759453e292]
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_trusts.TrustsV3TestJSON.test_trust_noimpersonate[id-ed2a8779-a7ac-49dc-afd7-30f32f936ed2]
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_project_tags.IdentityV3ProjectTagsTest.test_list_update_delete_project_tags[id-7c123aac-999d-416a-a0fb-84b915ab10de]
tempest.api.identity.admin.v3.test_groups.GroupsV3TestJSON.test_list_user_groups[id-64573281-d26a-4a52-b899-503cb0f4e4ec]
tempest.api.identity.admin.v3.test_list_projects.ListProjectsStaticTestJSON.test_list_projects[id-1d830662-22ad-427c-8c3e-4ec854b0af44]
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_users.UsersV3TestJSON.test_list_user_projects[id-a831e70c-e35b-430b-92ed-81ebbc5437b8]
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_projects_negative.ProjectsNegativeStaticTestJSON.test_create_projects_name_length_over_64[id-502b6ceb-b0c8-4422-bf53-f08fdb21e2f0,negative]
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_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.admin.v3.test_tokens.TokensV3TestJSON.test_rescope_token[id-565fa210-1da1-4563-999b-f7b5b67cf112]
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_catalog.IdentityCatalogTest.test_catalog_standardization[id-56b57ced-22b8-4127-9b8a-565dfb0207e2]
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.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_tokens.TokensV3Test.test_validate_token[id-a9512ac3-3909-48a4-b395-11f438e16260]
tempest.api.identity.v3.test_application_credentials.ApplicationCredentialsV3Test.test_create_application_credential[id-8080c75c-eddc-4786-941a-c2da7039ae61]
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.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

@github-actions

Copy link
Copy Markdown

🦢 Load Test Results

Goose Attack Report

Plan Overview

Action Started Stopped Elapsed Users
Increasing 26-09-19 07:47:03 26-09-19 07:47:25 00:00:22 0 → 45
Maintaining 26-09-19 07:47:25 26-09-19 07:47:56 00:00:31 45
Decreasing 26-09-19 07:47:56 26-09-19 07:47:56 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 61 0 401.72 38 537 2.03 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 149.00 149 149 0.03 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 84.00 84 84 0.03 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 77.50 49 106 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 131.00 131 131 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 147.00 147 147 0.03 0.00
GET 828 0 422.98 221 672 27.60 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 2201 2201 13.31 1 1029 73.37 73.37
GET GET /v3/auth/tokens (validate new) 60 0 375.77 80 507 2.00 0.00
GET GET /v3/auth/tokens (validate revoked) 61 0 378.54 10 532 2.03 0.00
GET GET /v3/projects/:id 77 0 395.60 266 576 2.57 0.00
GET GET /v3/projects/:id (catalog) 114 0 390.70 245 558 3.80 0.00
GET GET /v3/role_assignments 59 0 415.83 276 541 1.97 0.00
GET GET /v3/role_assignments?role.id 59 0 402.17 240 536 1.97 0.00
GET GET /v3/role_assignments?scope.domain.id 57 0 367.05 225 570 1.90 0.00
GET GET /v3/role_assignments?user.id 58 0 380.43 203 549 1.93 0.00
GET GET /v3/roles 151 0 402.25 256 586 5.03 0.00
GET GET /v3/roles/:id 76 0 398.57 254 598 2.53 0.00
GET GET /v3/users/:id 147 0 415.03 251 573 4.90 0.00
GET GET /v3/users/:id (catalog) 145 0 415.31 263 592 4.83 0.00
GET GET /v4/api-keys 36 0 404.39 245 542 1.20 0.00
GET GET /v4/api-keys/:client_id 36 0 438.94 288 590 1.20 0.00
GET GET /v4/mappings/rulesets 37 0 398.19 254 535 1.23 0.00
GET GET /v4/mappings/rulesets/:mapping_id 38 0 410.47 268 551 1.27 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 1012 0 44.39 6 211 33.73 0.00
GET GET /v4/oauth2/:domain_id/clients 39 0 401.05 244 575 1.30 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 38 0 393.26 270 590 1.27 0.00
GET GET /v4/oauth2/:domain_id/jwks 1012 0 43.90 7 210 33.73 0.00
GET GET /v4/scim_realms 24 0 405.50 264 588 0.80 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 24 0 399.83 292 544 0.80 0.00
POST POST /v3/auth/tokens 58 0 366.97 220 542 1.93 0.00
POST POST /v3/auth/tokens (password, invalid) 38 0 833.47 425 1426 1.27 0.00
POST POST /v3/auth/tokens (password, project-scoped) 65 0 1014.85 626 1609 2.17 0.00
POST POST /v3/auth/tokens (password, unscoped) 66 0 867.82 485 1307 2.20 0.00
POST POST /v3/auth/tokens (rescope to system) 138 0 443.57 266 671 4.60 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 82 0 370.79 187 536 2.73 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 61 0 1024.13 540 1592 2.03 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 147.00 147 147 0.03 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 25 0 456.16 287 571 0.83 0.00
Aggregated 6990 2201 196.08 1 1609 233.00 73.37

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 410 420 440 460 490 500 500 500
DELETE DELETE /v3/projects/:id (teardown) 149 149 149 149 149 149 149 149
DELETE DELETE /v3/roles/:id (teardown) 84 84 84 84 84 84 84 84
DELETE DELETE /v3/users/:id (teardown) 49 49 49 106 106 106 106 106
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 131 131 131 131 131 131 131 131
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 147 147 147 147 147 147 147 147
GET 420 440 460 490 500 500 600 672
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 5 6 8 10 13 18 380 1,000
GET GET /v3/auth/tokens (validate new) 380 400 410 440 460 460 480 500
GET GET /v3/auth/tokens (validate revoked) 390 410 420 440 460 470 500 500
GET GET /v3/projects/:id 400 410 430 460 470 480 500 576
GET GET /v3/projects/:id (catalog) 390 410 430 450 480 500 500 558
GET GET /v3/role_assignments 420 440 460 480 500 500 500 500
GET GET /v3/role_assignments?role.id 400 420 440 450 470 500 500 500
GET GET /v3/role_assignments?scope.domain.id 370 380 400 420 450 490 500 570
GET GET /v3/role_assignments?user.id 380 400 420 430 460 480 500 500
GET GET /v3/roles 410 420 450 470 480 490 586 586
GET GET /v3/roles/:id 390 410 430 450 480 500 500 598
GET GET /v3/users/:id 420 440 460 480 500 500 573 573
GET GET /v3/users/:id (catalog) 410 430 450 470 500 500 592 592
GET GET /v4/api-keys 400 420 450 460 470 480 500 500
GET GET /v4/api-keys/:client_id 430 440 460 500 500 500 590 590
GET GET /v4/mappings/rulesets 410 410 420 440 480 500 500 500
GET GET /v4/mappings/rulesets/:mapping_id 410 430 440 460 490 500 551 551
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 37 43 53 63 78 93 140 210
GET GET /v4/oauth2/:domain_id/clients 410 430 450 460 480 500 575 575
GET GET /v4/oauth2/:domain_id/clients/:provider_id 380 410 430 440 470 490 590 590
GET GET /v4/oauth2/:domain_id/jwks 37 44 52 65 79 92 120 210
GET GET /v4/scim_realms 400 410 430 460 500 500 588 588
GET GET /v4/scim_realms/:domain_id/:provider_id 400 410 440 460 470 490 500 500
POST POST /v3/auth/tokens 370 390 420 420 440 450 480 500
POST POST /v3/auth/tokens (password, invalid) 800 800 900 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 1,000 1,000 1,609 1,609
POST POST /v3/auth/tokens (password, unscoped) 900 900 1,000 1,000 1,000 1,000 1,000 1,000
POST POST /v3/auth/tokens (rescope to system) 440 460 480 500 600 600 671 671
POST POST /v3/auth/tokens (rescope, invalid project) 370 390 410 430 450 470 500 500
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 1,000 1,000 1,000 1,000 1,000 1,000 1,592 1,592
POST POST /v4/api-keys/:client_id/revoke (teardown) 147 147 147 147 147 147 147 147
PUT PUT /v4/scim_realms/:domain_id/:provider_id 470 480 500 500 571 571 571 571
Aggregated 48 150 360 420 480 500 1,000 1,609

Status Code Metrics

Method Name Status Codes
DELETE DELETE /v3/auth/tokens 61 [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 828 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 2,170 [429], 31 [401]
GET GET /v3/auth/tokens (validate new) 60 [200]
GET GET /v3/auth/tokens (validate revoked) 61 [404]
GET GET /v3/projects/:id 77 [200]
GET GET /v3/projects/:id (catalog) 114 [200]
GET GET /v3/role_assignments 59 [200]
GET GET /v3/role_assignments?role.id 59 [200]
GET GET /v3/role_assignments?scope.domain.id 57 [200]
GET GET /v3/role_assignments?user.id 58 [200]
GET GET /v3/roles 151 [200]
GET GET /v3/roles/:id 76 [200]
GET GET /v3/users/:id 147 [200]
GET GET /v3/users/:id (catalog) 145 [200]
GET GET /v4/api-keys 36 [200]
GET GET /v4/api-keys/:client_id 36 [200]
GET GET /v4/mappings/rulesets 37 [200]
GET GET /v4/mappings/rulesets/:mapping_id 38 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 1,012 [200]
GET GET /v4/oauth2/:domain_id/clients 39 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 38 [200]
GET GET /v4/oauth2/:domain_id/jwks 1,012 [200]
GET GET /v4/scim_realms 24 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 24 [200]
POST POST /v3/auth/tokens 58 [201]
POST POST /v3/auth/tokens (password, invalid) 38 [401]
POST POST /v3/auth/tokens (password, project-scoped) 65 [201]
POST POST /v3/auth/tokens (password, unscoped) 66 [201]
POST POST /v3/auth/tokens (rescope to system) 138 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 82 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 61 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 25 [200]
Aggregated 61 [404], 4,153 [200], 388 [201], 2,170 [429], 151 [401], 67 [204]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 1 0 29.00 29 29 0.03 0.00
0.1 149 0 425.97 262 617 4.97 0.00
0.2 148 0 401.18 239 557 4.93 0.00
0.3 147 0 403.37 221 557 4.90 0.00
TokenLifecycle
1.0 0 0 0.00 0 0 0.00 0.00
1.1 61 0 1525.38 481 1888 2.03 0.00
ValidateToken
2.0 0 0 0.00 0 0 0.00 0.00
2.1 128 0 472.77 305 672 4.27 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 147 0 415.06 251 573 4.90 0.00
3.3 2 0 77.50 49 106 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 77 0 395.64 266 576 2.57 0.00
4.3 1 0 149.00 149 149 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 76 0 398.58 254 598 2.53 0.00
5.3 1 0 84.00 84 84 0.03 0.00
RoleList
6.0 0 0 0.00 0 0 0.00 0.00
6.1 151 0 402.28 256 586 5.03 0.00
RoleAssignmentList
7.0 0 0 0.00 0 0 0.00 0.00
7.1 59 0 415.86 276 541 1.97 0.00
7.2 58 0 380.47 203 549 1.93 0.00
7.3 57 0 367.07 226 570 1.90 0.00
7.4 59 0 402.25 240 536 1.97 0.00
UserRead
8.0 0 0 0.00 0 0 0.00 0.00
8.1 143 0 427.75 263 604 4.77 0.00
8.2 145 0 415.36 263 592 4.83 0.00
ProjectRead
9.0 0 0 0.00 0 0 0.00 0.00
9.1 113 0 410.87 239 605 3.77 0.00
9.2 114 0 390.75 245 558 3.80 0.00
PasswordAuth
10.0 66 0 867.83 485 1307 2.20 0.00
10.1 65 0 1014.85 626 1609 2.17 0.00
PasswordAuthNegative
11.0 38 0 833.47 425 1426 1.27 0.00
Rescope
12.0 0 0 0.00 0 0 0.00 0.00
12.1 138 0 443.61 266 671 4.60 0.00
RescopeNegative
13.0 0 0 0.00 0 0 0.00 0.00
13.1 82 0 370.80 187 536 2.73 0.00
SystemScopeAuth
14.0 61 0 1024.23 540 1592 2.03 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 36 0 438.94 288 590 1.20 0.00
15.3 36 0 404.44 246 542 1.20 0.00
15.4 1 0 147.00 147 147 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 38 0 410.50 269 551 1.27 0.00
16.3 37 0 398.19 254 535 1.23 0.00
16.4 1 0 131.00 131 131 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 38 0 393.29 270 590 1.27 0.00
17.3 39 0 401.10 244 576 1.30 0.00
17.4 1 0 147.00 147 147 0.03 0.00
OAuth2Discovery
18.0 1012 0 43.92 7 210 33.73 0.00
18.1 1012 0 44.42 6 211 33.73 0.00
ScimRealmRead
19.0 0 0 0.00 0 0 0.00 0.00
19.1 24 0 399.88 292 544 0.80 0.00
19.2 24 0 405.50 264 588 0.80 0.00
19.3 25 0 456.16 287 571 0.83 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 2201 0 13.33 1 1029 73.37 0.00
20.4 2200 0 0.00 0 0 73.33 0.00
20.5 2200 0 0.00 0 0 73.33 0.00
20.6 1 0 0.00 0 0 0.03 0.00
Aggregated 11213 0 122.24 1 1888 373.77 0.00

Scenario Metrics

Transaction # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 6 146 1234.38 990 1483 4.87 24.33
TokenLifecycle 3 58 1544.78 1277 1888 1.93 19.33
ValidateToken 2 126 472.75 305 672 4.20 63.00
UserCRUD 2 145 416.75 265 573 4.83 72.50
ProjectCRUD 1 76 395.80 266 576 2.53 76.00
RoleCRUD 1 75 398.37 254 598 2.50 75.00
RoleList 2 149 403.09 256 586 4.97 74.50
RoleAssignmentList 3 58 1567.78 1307 1852 1.93 19.33
UserRead 4 142 846.39 627 1080 4.73 35.50
ProjectRead 3 113 803.42 594 1125 3.77 37.67
PasswordAuth 4 64 1887.66 1245 2615 2.13 16.00
PasswordAuthNegative 1 37 831.51 425 1426 1.23 37.00
Rescope 2 136 444.83 266 671 4.53 68.00
RescopeNegative 1 81 371.36 187 536 2.70 81.00
SystemScopeAuth 2 59 1031.95 741 1592 1.97 29.50
ApiKeyCRUD 1 35 844.46 634 1055 1.17 35.00
MappingCRUD 1 37 810.27 585 958 1.23 37.00
OAuth2ClientCRUD 1 38 799.08 565 1166 1.27 38.00
OAuth2Discovery 3 1010 88.86 19 300 33.67 336.67
ScimRealmRead 1 24 1262.92 1059 1539 0.80 24.00
ScimSync 1 2200 13.13 1 1029 73.33 2200.00
Aggregated 45 4809 281.48 1 2615 160.30 3399.33

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) 88 401 Unauthorized: POST /v3/auth/tokens (password, invalid)
POST POST /v3/auth/tokens (rescope, invalid project) 212 401 Unauthorized: POST /v3/auth/tokens (rescope, invalid project)
GET GET /v3/auth/tokens (validate revoked) 214 404 Not Found: GET /v3/auth/tokens (validate revoked)
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 2342 429 Too Many Requests: GET /SCIM/v2/:domain_id/Users (sync reconcile list)

View full report

@github-actions

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchissue_1255
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
145,450.00 ns
(-50.00%)Baseline: 290,921.48 ns
1,448,360.30 ns
(10.04%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
163,230.00 ns
(-64.52%)Baseline: 460,034.50 ns
3,320,932.43 ns
(4.92%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
129.21 ns
(+11.16%)Baseline: 116.23 ns
158.28 ns
(81.63%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
114.40 ns
(+10.46%)Baseline: 103.57 ns
139.50 ns
(82.01%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
216.64 ns
(+14.64%)Baseline: 188.97 ns
252.07 ns
(85.95%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
113.89 ns
(+9.98%)Baseline: 103.55 ns
140.01 ns
(81.35%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
187.79 ns
(+2.44%)Baseline: 183.32 ns
271.91 ns
(69.06%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
161.33 ns
(+5.50%)Baseline: 152.92 ns
221.14 ns
(72.95%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
300.04 ns
(+14.62%)Baseline: 261.77 ns
375.08 ns
(79.99%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
155.73 ns
(+3.32%)Baseline: 150.73 ns
215.98 ns
(72.10%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
119.72 ns
(+9.40%)Baseline: 109.43 ns
152.34 ns
(78.59%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
196.86 ns
(-0.65%)Baseline: 198.16 ns
274.59 ns
(71.69%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
209.97 ns
(+9.60%)Baseline: 191.57 ns
285.30 ns
(73.60%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
300.27 ns
(+11.07%)Baseline: 270.35 ns
390.24 ns
(76.95%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
3,713,500.00 ns
(+19.84%)Baseline: 3,098,655.45 ns
8,535,779.00 ns
(43.51%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
43,825.00 ns
(+17.93%)Baseline: 37,163.17 ns
52,924.41 ns
(82.81%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
423,320.00 ns
(-65.27%)Baseline: 1,219,026.72 ns
11,551,591.25 ns
(3.66%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
447,890.00 ns
(-55.11%)Baseline: 997,660.00 ns
7,587,427.38 ns
(5.90%)
build_snapshot/default📈 view plot
🚷 view threshold
115,440.00 ns
(-5.34%)Baseline: 121,957.52 ns
267,204.80 ns
(43.20%)
fernet token/project📈 view plot
🚷 view threshold
1,444.30 ns
(+3.49%)Baseline: 1,395.58 ns
1,831.34 ns
(78.87%)
get_data_keyspace📈 view plot
🚷 view threshold
0.31 ns
(+0.61%)Baseline: 0.31 ns
0.39 ns
(79.98%)
get_db📈 view plot
🚷 view threshold
0.31 ns
(+0.55%)Baseline: 0.31 ns
0.39 ns
(79.91%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
152.86 ns
(+10.38%)Baseline: 138.48 ns
184.29 ns
(82.94%)
get_keyspace📈 view plot
🚷 view threshold
4.46 ns
(-23.25%)Baseline: 5.81 ns
12.70 ns
(35.09%)
🐰 View full continuous benchmarking report in Bencher

Merged via the queue into main with commit d443bfa Sep 19, 2026
36 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.

oauth2-session raft driver: add user/client/domain and expiry indexes for refresh families and device grants

1 participant