Skip to content

fix(trust): Match db fields to sINT for mysql - #1173

Merged
gtema merged 1 commit into
mainfrom
mysql
Aug 14, 2026
Merged

fix(trust): Match db fields to sINT for mysql#1173
gtema merged 1 commit into
mainfrom
mysql

Conversation

@gtema

@gtema gtema commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

sea-orm codegen mapped both fields to Option, which sqlx
type-checks against INT UNSIGNED at decode time. Deployed MySQL
schema (predates these fields, db sync never alters existing
columns) stores them as signed INT, so any row with a non-null
value hard-failed with a "mismatched types" decode error on every
read - 500ing GET/LIST trust for that row.

Keep the Rust field signed (Option) to match what's on disk;
convert to/from the domain's u32 at the TryFrom/create
boundary, logging and dropping to unset on the (should-never-happen)
negative case instead of hard-failing the whole read.

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

sea-orm codegen mapped both fields to Option<u32>, which sqlx
type-checks against INT UNSIGNED at decode time. Deployed MySQL
schema (predates these fields, db sync never alters existing
columns) stores them as signed INT, so any row with a non-null
value hard-failed with a "mismatched types" decode error on every
read - 500ing GET/LIST trust for that row.

Keep the Rust field signed (Option<i32>) to match what's on disk;
convert to/from the domain's u32 at the TryFrom<Model>/create
boundary, logging and dropping to unset on the (should-never-happen)
negative case instead of hard-failing the whole read.

Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
@gtema
gtema enabled auto-merge August 14, 2026 13:26
@github-actions

Copy link
Copy Markdown

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

rust

Totals
======
Ran: 133 tests in 29.4997 sec.
 - Passed: 65
 - Skipped: 4
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 64
Sum of execute time for each test: 23.7586 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_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_credentials.CredentialsTestJSON.test_credentials_create_get_update_delete[id-7cd59bf9-bda4-4c72-9467-d21cab278355,smoke]
tempest.api.identity.admin.v3.test_domain_configuration.DomainConfigurationTestJSON.test_create_update_and_delete_domain_config[id-7161023e-5dd0-4612-9da0-1bac6ac30b63]
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_default_project_id.TestDefaultProjectId.test_default_project_id[id-d6110661-6a71-49a7-a453-b5e26640ff6d]
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]
setUpClass (tempest.api.identity.admin.v3.test_endpoint_groups.EndPointGroupsTest)
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_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_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_project_tags.IdentityV3ProjectTagsTest.test_list_update_delete_project_tags[id-7c123aac-999d-416a-a0fb-84b915ab10de]
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_projects_negative.ProjectsNegativeStaticTestJSON.test_create_projects_name_length_over_64[id-502b6ceb-b0c8-4422-bf53-f08fdb21e2f0,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_roles.RolesV3TestJSON.test_assignments_for_domain_roles[id-3859df7e-5b78-4e4d-b10e-214c8953842a]
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_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_inherits.InheritsV3TestJSON.test_inherit_assign_list_revoke_user_roles_on_project_tree[id-9f02ccd9-9b57-46b4-8f77-dd5a736f3a06]
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_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.admin.v3.test_users.UsersV3TestJSON.test_list_user_projects[id-a831e70c-e35b-430b-92ed-81ebbc5437b8]
tempest.api.identity.admin.v3.test_list_projects.ListProjectsStaticTestJSON.test_list_projects[id-1d830662-22ad-427c-8c3e-4ec854b0af44]
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_get_trusts_all[id-4773ebd5-ecbf-4255-b8d8-b63e6f72b65d,smoke]
tempest.api.identity.admin.v3.test_tokens.TokensV3TestJSON.test_rescope_token[id-565fa210-1da1-4563-999b-f7b5b67cf112]
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.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.admin.v3.test_trusts.TrustsV3TestJSON.test_trust_expire[id-0ed14b66-cefd-4b5c-a964-65759453e292]
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_catalog.IdentityCatalogTest.test_catalog_standardization[id-56b57ced-22b8-4127-9b8a-565dfb0207e2]
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.v3.test_tokens.TokensV3Test.test_validate_token[id-a9512ac3-3909-48a4-b395-11f438e16260]
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_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-08-14 13:45:18 26-08-14 13:45:41 00:00:23 0 → 45
Maintaining 26-08-14 13:45:41 26-08-14 13:46:11 00:00:30 45
Decreasing 26-08-14 13:46:11 26-08-14 13:46:12 00:00:01 0 ← 45

Request Metrics

Method Name # Requests # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
DELETE DELETE /v3/auth/tokens 54 0 445.37 291 590 1.80 0.00
DELETE DELETE /v3/projects/:id (teardown) 1 0 161.00 161 161 0.03 0.00
DELETE DELETE /v3/roles/:id (teardown) 1 0 131.00 131 131 0.03 0.00
DELETE DELETE /v3/users/:id (teardown) 2 0 163.00 128 198 0.07 0.00
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 1 0 148.00 148 148 0.03 0.00
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 1 0 238.00 238 238 0.03 0.00
GET 745 0 471.59 250 708 24.83 0.00
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 1957 1957 15.03 1 814 65.23 65.23
GET GET /v3/auth/tokens (validate new) 53 0 444.98 304 597 1.77 0.00
GET GET /v3/auth/tokens (validate revoked) 55 0 412.67 50 599 1.83 0.00
GET GET /v3/projects/:id 69 0 441.38 287 603 2.30 0.00
GET GET /v3/projects/:id (catalog) 102 0 445.90 275 596 3.40 0.00
GET GET /v3/role_assignments 52 0 450.60 261 583 1.73 0.00
GET GET /v3/role_assignments?role.id 53 0 448.96 272 633 1.77 0.00
GET GET /v3/role_assignments?scope.domain.id 52 0 425.60 317 582 1.73 0.00
GET GET /v3/role_assignments?user.id 52 0 424.94 289 601 1.73 0.00
GET GET /v3/roles 136 0 445.27 278 586 4.53 0.00
GET GET /v3/roles/:id 69 0 440.12 254 600 2.30 0.00
GET GET /v3/users/:id 131 0 465.79 289 689 4.37 0.00
GET GET /v3/users/:id (catalog) 130 0 462.68 288 653 4.33 0.00
GET GET /v4/api-keys 33 0 444.33 342 567 1.10 0.00
GET GET /v4/api-keys/:client_id 33 0 489.27 357 656 1.10 0.00
GET GET /v4/mappings/rulesets 34 0 458.97 289 576 1.13 0.00
GET GET /v4/mappings/rulesets/:mapping_id 34 0 438.15 308 599 1.13 0.00
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 914 0 48.60 7 164 30.47 0.00
GET GET /v4/oauth2/:domain_id/clients 35 0 437.83 335 574 1.17 0.00
GET GET /v4/oauth2/:domain_id/clients/:provider_id 35 0 431.51 307 598 1.17 0.00
GET GET /v4/oauth2/:domain_id/jwks 916 0 49.21 9 213 30.53 0.00
GET GET /v4/scim_realms 22 0 433.23 357 504 0.73 0.00
GET GET /v4/scim_realms/:domain_id/:provider_id 22 0 431.09 264 534 0.73 0.00
POST POST /v3/auth/tokens 52 0 409.23 238 536 1.73 0.00
POST POST /v3/auth/tokens (password, invalid) 40 0 776.08 436 1091 1.33 0.00
POST POST /v3/auth/tokens (password, project-scoped) 60 0 1116.43 685 1464 2.00 0.00
POST POST /v3/auth/tokens (password, unscoped) 60 0 956.90 551 1520 2.00 0.00
POST POST /v3/auth/tokens (rescope to system) 123 0 497.05 294 719 4.10 0.00
POST POST /v3/auth/tokens (rescope, invalid project) 73 0 418.16 288 562 2.43 0.00
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 57 0 1084.68 731 1707 1.90 0.00
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 0 157.00 157 157 0.03 0.00
PUT PUT /v4/scim_realms/:domain_id/:provider_id 22 0 523.73 359 610 0.73 0.00
Aggregated 6282 1957 218.67 1 1707 209.40 65.23

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 450 460 480 500 500 500 590 590
DELETE DELETE /v3/projects/:id (teardown) 161 161 161 161 161 161 161 161
DELETE DELETE /v3/roles/:id (teardown) 131 131 131 131 131 131 131 131
DELETE DELETE /v3/users/:id (teardown) 130 130 130 198 198 198 198 198
DELETE DELETE /v4/mappings/rulesets/:mapping_id (teardown) 148 148 148 148 148 148 148 148
DELETE DELETE /v4/oauth2/:domain_id/clients/:provider_id (teardown) 238 238 238 238 238 238 238 238
GET 470 490 500 500 600 600 700 700
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 6 7 8 11 15 22 420 800
GET GET /v3/auth/tokens (validate new) 450 460 470 490 500 500 597 597
GET GET /v3/auth/tokens (validate revoked) 430 440 450 470 490 500 599 599
GET GET /v3/projects/:id 450 460 470 490 500 500 600 600
GET GET /v3/projects/:id (catalog) 440 460 480 500 500 596 596 596
GET GET /v3/role_assignments 460 480 490 500 500 583 583 583
GET GET /v3/role_assignments?role.id 450 470 490 500 500 600 600 600
GET GET /v3/role_assignments?scope.domain.id 420 430 460 480 500 582 582 582
GET GET /v3/role_assignments?user.id 400 430 450 500 500 500 600 600
GET GET /v3/roles 450 460 480 500 500 500 586 586
GET GET /v3/roles/:id 450 460 480 500 500 500 600 600
GET GET /v3/users/:id 460 470 500 500 600 600 689 689
GET GET /v3/users/:id (catalog) 460 480 490 500 600 600 600 653
GET GET /v4/api-keys 450 450 470 500 500 500 567 567
GET GET /v4/api-keys/:client_id 490 500 500 500 500 600 656 656
GET GET /v4/mappings/rulesets 470 480 480 500 576 576 576 576
GET GET /v4/mappings/rulesets/:mapping_id 430 460 480 500 599 599 599 599
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 41 48 57 68 88 110 130 160
GET GET /v4/oauth2/:domain_id/clients 430 470 480 500 500 500 574 574
GET GET /v4/oauth2/:domain_id/clients/:provider_id 430 450 470 480 500 598 598 598
GET GET /v4/oauth2/:domain_id/jwks 41 49 59 68 86 100 140 210
GET GET /v4/scim_realms 430 440 440 480 490 500 500 500
GET GET /v4/scim_realms/:domain_id/:provider_id 430 440 450 480 500 500 500 500
POST POST /v3/auth/tokens 420 420 430 450 500 500 500 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,000 1,000
POST POST /v3/auth/tokens (password, unscoped) 1,000 1,000 1,000 1,000 1,000 1,000 1,000 1,520
POST POST /v3/auth/tokens (rescope to system) 500 500 500 600 600 600 600 700
POST POST /v3/auth/tokens (rescope, invalid project) 420 430 440 470 500 500 562 562
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 1,000 1,000 1,000 1,000 1,000 1,000 1,707 1,707
POST POST /v4/api-keys/:client_id/revoke (teardown) 157 157 157 157 157 157 157 157
PUT PUT /v4/scim_realms/:domain_id/:provider_id 500 500 500 600 600 600 600 600
Aggregated 55 250 410 460 500 600 1,000 1,707

Status Code Metrics

Method Name Status Codes
DELETE DELETE /v3/auth/tokens 54 [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 745 [200]
GET GET /SCIM/v2/:domain_id/Users (sync reconcile list) 31 [401], 1,926 [429]
GET GET /v3/auth/tokens (validate new) 53 [200]
GET GET /v3/auth/tokens (validate revoked) 55 [404]
GET GET /v3/projects/:id 69 [200]
GET GET /v3/projects/:id (catalog) 102 [200]
GET GET /v3/role_assignments 52 [200]
GET GET /v3/role_assignments?role.id 53 [200]
GET GET /v3/role_assignments?scope.domain.id 52 [200]
GET GET /v3/role_assignments?user.id 52 [200]
GET GET /v3/roles 136 [200]
GET GET /v3/roles/:id 69 [200]
GET GET /v3/users/:id 131 [200]
GET GET /v3/users/:id (catalog) 130 [200]
GET GET /v4/api-keys 33 [200]
GET GET /v4/api-keys/:client_id 33 [200]
GET GET /v4/mappings/rulesets 34 [200]
GET GET /v4/mappings/rulesets/:mapping_id 34 [200]
GET GET /v4/oauth2/:domain_id/.well-known/openid-configuration 914 [200]
GET GET /v4/oauth2/:domain_id/clients 35 [200]
GET GET /v4/oauth2/:domain_id/clients/:provider_id 35 [200]
GET GET /v4/oauth2/:domain_id/jwks 916 [200]
GET GET /v4/scim_realms 22 [200]
GET GET /v4/scim_realms/:domain_id/:provider_id 22 [200]
POST POST /v3/auth/tokens 52 [201]
POST POST /v3/auth/tokens (password, invalid) 40 [401]
POST POST /v3/auth/tokens (password, project-scoped) 60 [201]
POST POST /v3/auth/tokens (password, unscoped) 60 [201]
POST POST /v3/auth/tokens (rescope to system) 123 [201]
POST POST /v3/auth/tokens (rescope, invalid project) 73 [401]
POST POST /v3/auth/tokens (system-scoped, bootstrap admin) 57 [201]
POST POST /v4/api-keys/:client_id/revoke (teardown) 1 [200]
PUT PUT /v4/scim_realms/:domain_id/:provider_id 22 [200]
Aggregated 352 [201], 144 [401], 3,745 [200], 60 [204], 1,926 [429], 55 [404]

Transaction Metrics

Transaction # Times Run # Fails Average (ms) Min (ms) Max (ms) RPS Failures/s
ReadHeavy
0.0 1 0 43.00 43 43 0.03 0.00
0.1 134 0 475.73 298 635 4.47 0.00
0.2 131 0 455.72 255 624 4.37 0.00
0.3 131 0 449.31 317 692 4.37 0.00
TokenLifecycle
1.0 0 0 0.00 0 0 0.00 0.00
1.1 55 0 1715.09 1197 1952 1.83 0.00
ValidateToken
2.0 0 0 0.00 0 0 0.00 0.00
2.1 117 0 520.72 308 706 3.90 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 131 0 465.82 289 689 4.37 0.00
3.3 2 0 163.00 128 198 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 69 0 441.41 287 604 2.30 0.00
4.3 1 0 161.00 161 161 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 69 0 440.12 254 600 2.30 0.00
5.3 1 0 131.00 131 131 0.03 0.00
RoleList
6.0 0 0 0.00 0 0 0.00 0.00
6.1 136 0 445.29 278 586 4.53 0.00
RoleAssignmentList
7.0 0 0 0.00 0 0 0.00 0.00
7.1 52 0 450.67 261 583 1.73 0.00
7.2 52 0 424.94 289 601 1.73 0.00
7.3 52 0 425.63 317 582 1.73 0.00
7.4 53 0 449.00 272 633 1.77 0.00
UserRead
8.0 0 0 0.00 0 0 0.00 0.00
8.1 130 0 478.56 313 708 4.33 0.00
8.2 130 0 462.70 288 653 4.33 0.00
ProjectRead
9.0 0 0 0.00 0 0 0.00 0.00
9.1 102 0 450.11 250 601 3.40 0.00
9.2 102 0 445.94 275 597 3.40 0.00
PasswordAuth
10.0 60 0 956.98 551 1520 2.00 0.00
10.1 60 0 1116.50 686 1464 2.00 0.00
PasswordAuthNegative
11.0 40 0 776.10 436 1091 1.33 0.00
Rescope
12.0 0 0 0.00 0 0 0.00 0.00
12.1 123 0 497.12 294 719 4.10 0.00
RescopeNegative
13.0 0 0 0.00 0 0 0.00 0.00
13.1 73 0 418.23 288 562 2.43 0.00
SystemScopeAuth
14.0 57 0 1084.77 731 1708 1.90 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 33 0 489.33 357 656 1.10 0.00
15.3 33 0 444.33 342 567 1.10 0.00
15.4 1 0 157.00 157 157 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 34 0 438.18 308 600 1.13 0.00
16.3 34 0 459.00 289 576 1.13 0.00
16.4 1 0 148.00 148 148 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 35 0 431.57 307 598 1.17 0.00
17.3 35 0 437.89 335 574 1.17 0.00
17.4 1 0 238.00 238 238 0.03 0.00
OAuth2Discovery
18.0 916 0 49.24 9 213 30.53 0.00
18.1 914 0 48.62 7 164 30.47 0.00
ScimRealmRead
19.0 0 0 0.00 0 0 0.00 0.00
19.1 22 0 431.14 264 534 0.73 0.00
19.2 22 0 433.27 357 504 0.73 0.00
19.3 22 0 523.82 359 611 0.73 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 1957 0 15.06 1 814 65.23 0.00
20.4 1956 0 0.00 0 0 65.20 0.00
20.5 1956 0 0.00 0 0 65.20 0.00
20.6 1 0 0.00 0 0 0.03 0.00
Aggregated 10037 0 136.87 1 1952 334.57 0.00

Scenario Metrics

Transaction # Users # Times Run Average (ms) Min (ms) Max (ms) Scenarios/s Iterations
ReadHeavy 6 131 1382.16 1087 1684 4.37 21.83
TokenLifecycle 3 52 1728.21 1449 1952 1.73 17.33
ValidateToken 2 115 518.83 308 706 3.83 57.50
UserCRUD 2 129 464.80 289 689 4.30 64.50
ProjectCRUD 1 68 439.01 287 554 2.27 68.00
RoleCRUD 1 68 437.76 254 551 2.27 68.00
RoleList 2 134 444.90 278 586 4.47 67.00
RoleAssignmentList 3 51 1752.65 1406 2060 1.70 17.00
UserRead 4 128 940.07 735 1216 4.27 32.00
ProjectRead 3 99 897.45 659 1124 3.30 33.00
PasswordAuth 4 57 2083.35 1487 2845 1.90 14.25
PasswordAuthNegative 1 39 780.00 436 1091 1.30 39.00
Rescope 2 121 497.00 294 719 4.03 60.50
RescopeNegative 1 72 416.97 288 562 2.40 72.00
SystemScopeAuth 2 55 1093.25 731 1708 1.83 27.50
ApiKeyCRUD 1 33 936.42 792 1158 1.10 33.00
MappingCRUD 1 33 893.06 683 1176 1.10 33.00
OAuth2ClientCRUD 1 35 868.40 675 1051 1.17 35.00
OAuth2Discovery 3 913 98.32 22 280 30.43 304.33
ScimRealmRead 1 22 1395.50 1061 1607 0.73 22.00
ScimSync 1 1956 14.83 1 814 65.20 1956.00
Aggregated 45 4311 312.70 1 2845 143.70 3042.75

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

View full report

@gtema
gtema added this pull request to the merge queue Aug 14, 2026
@github-actions

Copy link
Copy Markdown

🐰 Bencher Report

Projectkeystone
Branchmysql
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
144,350.00 ns
(-48.06%)Baseline: 277,919.47 ns
1,540,499.45 ns
(9.37%)
Command_Serde/apply/set📈 view plot
🚷 view threshold
146,420.00 ns
(-48.15%)Baseline: 282,404.45 ns
1,293,200.53 ns
(11.32%)
Command_Serde/pack/delete📈 view plot
🚷 view threshold
122.11 ns
(+2.11%)Baseline: 119.58 ns
155.48 ns
(78.54%)
Command_Serde/pack/delete_index📈 view plot
🚷 view threshold
109.47 ns
(+2.76%)Baseline: 106.53 ns
138.31 ns
(79.15%)
Command_Serde/pack/set📈 view plot
🚷 view threshold
196.38 ns
(+2.76%)Baseline: 191.11 ns
245.22 ns
(80.08%)
Command_Serde/pack/set_index📈 view plot
🚷 view threshold
109.25 ns
(+2.43%)Baseline: 106.66 ns
138.50 ns
(78.88%)
Command_Serde/unpack/delete📈 view plot
🚷 view threshold
188.20 ns
(+0.51%)Baseline: 187.24 ns
263.03 ns
(71.55%)
Command_Serde/unpack/delete_index📈 view plot
🚷 view threshold
157.77 ns
(+0.89%)Baseline: 156.37 ns
214.76 ns
(73.46%)
Command_Serde/unpack/set📈 view plot
🚷 view threshold
282.37 ns
(+7.70%)Baseline: 262.19 ns
348.74 ns
(80.97%)
Command_Serde/unpack/set_index📈 view plot
🚷 view threshold
156.35 ns
(+1.88%)Baseline: 153.47 ns
208.27 ns
(75.07%)
Payload_encryption/pack/remove_cmd📈 view plot
🚷 view threshold
118.37 ns
(+3.57%)Baseline: 114.29 ns
146.72 ns
(80.68%)
Payload_encryption/pack/set_cmd📈 view plot
🚷 view threshold
204.15 ns
(+2.73%)Baseline: 198.72 ns
263.91 ns
(77.35%)
Payload_encryption/unpack/remove_cmd📈 view plot
🚷 view threshold
216.98 ns
(+9.80%)Baseline: 197.62 ns
280.00 ns
(77.49%)
Payload_encryption/unpack/set_cmd📈 view plot
🚷 view threshold
312.81 ns
(+13.69%)Baseline: 275.14 ns
372.68 ns
(83.94%)
Raft_1Node_Latency/prefix/1node📈 view plot
🚷 view threshold
3,309,800.00 ns
(+15.20%)Baseline: 2,873,004.06 ns
6,813,511.95 ns
(48.58%)
Raft_1Node_Latency/read/1node📈 view plot
🚷 view threshold
42,441.00 ns
(+11.46%)Baseline: 38,075.67 ns
52,341.86 ns
(81.08%)
Raft_1Node_Latency/remove/1node📈 view plot
🚷 view threshold
374,970.00 ns
(-45.23%)Baseline: 684,664.38 ns
3,604,115.19 ns
(10.40%)
Raft_1Node_Latency/write/1node📈 view plot
🚷 view threshold
410,590.00 ns
(-47.12%)Baseline: 776,422.19 ns
4,691,516.65 ns
(8.75%)
build_snapshot/default📈 view plot
🚷 view threshold
109,730.00 ns
(-9.09%)Baseline: 120,705.55 ns
208,430.27 ns
(52.65%)
fernet token/project📈 view plot
🚷 view threshold
1,411.20 ns
(-1.81%)Baseline: 1,437.19 ns
1,784.60 ns
(79.08%)
get_data_keyspace📈 view plot
🚷 view threshold
0.31 ns
(-0.37%)Baseline: 0.32 ns
0.38 ns
(82.47%)
get_db📈 view plot
🚷 view threshold
0.32 ns
(+1.14%)Baseline: 0.32 ns
0.38 ns
(83.70%)
get_fernet_token_timestamp/project📈 view plot
🚷 view threshold
148.40 ns
(+5.32%)Baseline: 140.90 ns
176.22 ns
(84.21%)
get_keyspace📈 view plot
🚷 view threshold
4.39 ns
(-24.22%)Baseline: 5.79 ns
13.56 ns
(32.36%)
🐰 View full continuous benchmarking report in Bencher

Merged via the queue into main with commit ce85526 Aug 14, 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