Disable exclusive lease in tests
What does this MR do and why?
This change attempts to resolve a flaky test error. I believe this originated in !197916 (merged) because the User factory was changed to use shared common_organization,
causing let_it_be
to create users within transactions. When tests run, User#update_tracked_fields!
tries to obtain an ExclusiveLease within that transaction, which is prohibited.
https://gitlab.com/gitlab-org/quality/test-failure-issues/-/issues/9374
https://gitlab.com/gitlab-org/quality/test-failure-issues/-/issues/9375
https://gitlab.com/gitlab-org/quality/test-failure-issues/-/issues/9377
16) User with read_admin_monitoring Admin::SystemInfoController GET #show
Failure/Error:
raise LeaseWithinTransactionError,
"Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions."
Gitlab::ExclusiveLease::LeaseWithinTransactionError:
Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions.
# ./lib/gitlab/exclusive_lease.rb:139:in `report_lock_attempt_inside_transaction'
# ./lib/gitlab/exclusive_lease.rb:126:in `try_obtain'
# ./lib/gitlab/exclusive_lease.rb:149:in `waiting?'
# ./lib/gitlab/exclusive_lease.rb:58:in `throttle'
# ./app/models/user.rb:133:in `update_tracked_fields!'
# ./lib/gitlab/middleware/read_only/controller.rb:40:in `call'
# ./lib/gitlab/middleware/read_only.rb:18:in `call'
# ./lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call'
# ./lib/gitlab/middleware/secure_headers.rb:11:in `call'
# ./lib/gitlab/middleware/strip_cookies.rb:29:in `call'
# ./lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
# ./lib/gitlab/middleware/path_traversal_check.rb:40:in `call'
# ./lib/gitlab/middleware/handle_malformed_strings.rb:19:in `call'
# ./lib/gitlab/middleware/basic_health_check.rb:25:in `call'
# ./lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
# ./lib/gitlab/middleware/request_context.rb:15:in `call'
# ./lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:11:in `call'
# ./lib/gitlab/middleware/compressed_json.rb:44:in `call'
# ./lib/gitlab/middleware/static.rb:11:in `call'
# ./lib/gitlab/testing/clear_process_memory_cache_middleware.rb:13:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:35:in `call'
# ./lib/gitlab/testing/robots_blocker_middleware.rb:30:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:47:in `call'
# ./lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:83:in `call'
# ./lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'
# ./ee/spec/requests/custom_roles/admin/read_admin_monitoring/request_spec.rb:48:in `block (3 levels) in <top (required)>'
# ./spec/spec_helper.rb:504:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'
# ./spec/spec_helper.rb:503:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:498:in `block (3 levels) in <top (required)>'
# ./spec/support/sidekiq_middleware.rb:9:in `with_sidekiq_server_middleware'
# ./spec/spec_helper.rb:489:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:485:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/application_context.rb:102:in `with_raw_context'
# ./spec/spec_helper.rb:485:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:456:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/ci/config/feature_flags.rb:38:in `ensure_correct_usage'
# ./spec/spec_helper.rb:455:in `block (2 levels) in <top (required)>'
# ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <top (required)>'
# ./spec/support/fast_quarantine.rb:22:in `block (2 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (3 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:60:in `with_cross_joins_prevented'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (2 levels) in <top (required)>'
17) User with read_admin_monitoring Admin::BackgroundMigrationsController GET #index
Failure/Error:
raise LeaseWithinTransactionError,
"Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions."
Gitlab::ExclusiveLease::LeaseWithinTransactionError:
Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions.
# ./lib/gitlab/exclusive_lease.rb:139:in `report_lock_attempt_inside_transaction'
# ./lib/gitlab/exclusive_lease.rb:126:in `try_obtain'
# ./lib/gitlab/exclusive_lease.rb:149:in `waiting?'
# ./lib/gitlab/exclusive_lease.rb:58:in `throttle'
# ./app/models/user.rb:133:in `update_tracked_fields!'
# ./lib/gitlab/middleware/read_only/controller.rb:40:in `call'
# ./lib/gitlab/middleware/read_only.rb:18:in `call'
# ./lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call'
# ./lib/gitlab/middleware/secure_headers.rb:11:in `call'
# ./lib/gitlab/middleware/strip_cookies.rb:29:in `call'
# ./lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
# ./lib/gitlab/middleware/path_traversal_check.rb:40:in `call'
# ./lib/gitlab/middleware/handle_malformed_strings.rb:19:in `call'
# ./lib/gitlab/middleware/basic_health_check.rb:25:in `call'
# ./lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
# ./lib/gitlab/middleware/request_context.rb:15:in `call'
# ./lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:11:in `call'
# ./lib/gitlab/middleware/compressed_json.rb:44:in `call'
# ./lib/gitlab/middleware/static.rb:11:in `call'
# ./lib/gitlab/testing/clear_process_memory_cache_middleware.rb:13:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:35:in `call'
# ./lib/gitlab/testing/robots_blocker_middleware.rb:30:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:47:in `call'
# ./lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:83:in `call'
# ./lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'
# ./ee/spec/requests/custom_roles/admin/read_admin_monitoring/request_spec.rb:17:in `block (3 levels) in <top (required)>'
# ./spec/spec_helper.rb:504:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'
# ./spec/spec_helper.rb:503:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:498:in `block (3 levels) in <top (required)>'
# ./spec/support/sidekiq_middleware.rb:9:in `with_sidekiq_server_middleware'
# ./spec/spec_helper.rb:489:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:485:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/application_context.rb:102:in `with_raw_context'
# ./spec/spec_helper.rb:485:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:456:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/ci/config/feature_flags.rb:38:in `ensure_correct_usage'
# ./spec/spec_helper.rb:455:in `block (2 levels) in <top (required)>'
# ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <top (required)>'
# ./spec/support/fast_quarantine.rb:22:in `block (2 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (3 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:60:in `with_cross_joins_prevented'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (2 levels) in <top (required)>'
18) User with read_admin_monitoring Admin::BackgroundMigrationsController GET #show
Failure/Error:
raise LeaseWithinTransactionError,
"Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions."
Gitlab::ExclusiveLease::LeaseWithinTransactionError:
Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions.
# ./lib/gitlab/exclusive_lease.rb:139:in `report_lock_attempt_inside_transaction'
# ./lib/gitlab/exclusive_lease.rb:126:in `try_obtain'
# ./lib/gitlab/exclusive_lease.rb:149:in `waiting?'
# ./lib/gitlab/exclusive_lease.rb:58:in `throttle'
# ./app/models/user.rb:133:in `update_tracked_fields!'
# ./lib/gitlab/middleware/read_only/controller.rb:40:in `call'
# ./lib/gitlab/middleware/read_only.rb:18:in `call'
# ./lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call'
# ./lib/gitlab/middleware/secure_headers.rb:11:in `call'
# ./lib/gitlab/middleware/strip_cookies.rb:29:in `call'
# ./lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
# ./lib/gitlab/middleware/path_traversal_check.rb:40:in `call'
# ./lib/gitlab/middleware/handle_malformed_strings.rb:19:in `call'
# ./lib/gitlab/middleware/basic_health_check.rb:25:in `call'
# ./lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
# ./lib/gitlab/middleware/request_context.rb:15:in `call'
# ./lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:11:in `call'
# ./lib/gitlab/middleware/compressed_json.rb:44:in `call'
# ./lib/gitlab/middleware/static.rb:11:in `call'
# ./lib/gitlab/testing/clear_process_memory_cache_middleware.rb:13:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:35:in `call'
# ./lib/gitlab/testing/robots_blocker_middleware.rb:30:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:47:in `call'
# ./lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:83:in `call'
# ./lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'
# ./ee/spec/requests/custom_roles/admin/read_admin_monitoring/request_spec.rb:24:in `block (3 levels) in <top (required)>'
# ./spec/spec_helper.rb:504:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'
# ./spec/spec_helper.rb:503:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:498:in `block (3 levels) in <top (required)>'
# ./spec/support/sidekiq_middleware.rb:9:in `with_sidekiq_server_middleware'
# ./spec/spec_helper.rb:489:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:485:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/application_context.rb:102:in `with_raw_context'
# ./spec/spec_helper.rb:485:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:456:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/ci/config/feature_flags.rb:38:in `ensure_correct_usage'
# ./spec/spec_helper.rb:455:in `block (2 levels) in <top (required)>'
# ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <top (required)>'
# ./spec/support/fast_quarantine.rb:22:in `block (2 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (3 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:60:in `with_cross_joins_prevented'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (2 levels) in <top (required)>'
19) User with read_admin_monitoring Admin::DashboardController#index user has access via a custom role
Failure/Error:
raise LeaseWithinTransactionError,
"Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions."
Gitlab::ExclusiveLease::LeaseWithinTransactionError:
Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions.
# ./lib/gitlab/exclusive_lease.rb:139:in `report_lock_attempt_inside_transaction'
# ./lib/gitlab/exclusive_lease.rb:126:in `try_obtain'
# ./lib/gitlab/exclusive_lease.rb:149:in `waiting?'
# ./lib/gitlab/exclusive_lease.rb:58:in `throttle'
# ./app/models/user.rb:133:in `update_tracked_fields!'
# ./lib/gitlab/middleware/read_only/controller.rb:40:in `call'
# ./lib/gitlab/middleware/read_only.rb:18:in `call'
# ./lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call'
# ./lib/gitlab/middleware/secure_headers.rb:11:in `call'
# ./lib/gitlab/middleware/strip_cookies.rb:29:in `call'
# ./lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
# ./lib/gitlab/middleware/path_traversal_check.rb:40:in `call'
# ./lib/gitlab/middleware/handle_malformed_strings.rb:19:in `call'
# ./lib/gitlab/middleware/basic_health_check.rb:25:in `call'
# ./lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
# ./lib/gitlab/middleware/request_context.rb:15:in `call'
# ./lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:11:in `call'
# ./lib/gitlab/middleware/compressed_json.rb:44:in `call'
# ./lib/gitlab/middleware/static.rb:11:in `call'
# ./lib/gitlab/testing/clear_process_memory_cache_middleware.rb:13:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:35:in `call'
# ./lib/gitlab/testing/robots_blocker_middleware.rb:30:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:47:in `call'
# ./lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:83:in `call'
# ./lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'
# ./ee/spec/requests/custom_roles/admin/read_admin_monitoring/request_spec.rb:57:in `block (4 levels) in <top (required)>'
# ./spec/spec_helper.rb:504:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'
# ./spec/spec_helper.rb:503:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:498:in `block (3 levels) in <top (required)>'
# ./spec/support/sidekiq_middleware.rb:9:in `with_sidekiq_server_middleware'
# ./spec/spec_helper.rb:489:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:485:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/application_context.rb:102:in `with_raw_context'
# ./spec/spec_helper.rb:485:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:456:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/ci/config/feature_flags.rb:38:in `ensure_correct_usage'
# ./spec/spec_helper.rb:455:in `block (2 levels) in <top (required)>'
# ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <top (required)>'
# ./spec/support/fast_quarantine.rb:22:in `block (2 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (3 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:60:in `with_cross_joins_prevented'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (2 levels) in <top (required)>'
20) User with read_admin_monitoring Admin::GitalyServersController GET #index
Failure/Error:
raise LeaseWithinTransactionError,
"Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions."
Gitlab::ExclusiveLease::LeaseWithinTransactionError:
Exclusive lease cannot be obtained within a transaction as it could lead to idle transactions.
# ./lib/gitlab/exclusive_lease.rb:139:in `report_lock_attempt_inside_transaction'
# ./lib/gitlab/exclusive_lease.rb:126:in `try_obtain'
# ./lib/gitlab/exclusive_lease.rb:149:in `waiting?'
# ./lib/gitlab/exclusive_lease.rb:58:in `throttle'
# ./app/models/user.rb:133:in `update_tracked_fields!'
# ./lib/gitlab/middleware/read_only/controller.rb:40:in `call'
# ./lib/gitlab/middleware/read_only.rb:18:in `call'
# ./lib/gitlab/middleware/unauthenticated_session_expiry.rb:18:in `call'
# ./lib/gitlab/middleware/secure_headers.rb:11:in `call'
# ./lib/gitlab/middleware/strip_cookies.rb:29:in `call'
# ./lib/gitlab/middleware/same_site_cookies.rb:27:in `call'
# ./lib/gitlab/middleware/path_traversal_check.rb:40:in `call'
# ./lib/gitlab/middleware/handle_malformed_strings.rb:19:in `call'
# ./lib/gitlab/middleware/basic_health_check.rb:25:in `call'
# ./lib/gitlab/middleware/handle_ip_spoof_attack_error.rb:25:in `call'
# ./lib/gitlab/middleware/request_context.rb:15:in `call'
# ./lib/gitlab/middleware/webhook_recursion_detection.rb:15:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:11:in `call'
# ./lib/gitlab/middleware/compressed_json.rb:44:in `call'
# ./lib/gitlab/middleware/static.rb:11:in `call'
# ./lib/gitlab/testing/clear_process_memory_cache_middleware.rb:13:in `call'
# ./lib/gitlab/testing/request_inspector_middleware.rb:35:in `call'
# ./lib/gitlab/testing/robots_blocker_middleware.rb:30:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:47:in `call'
# ./lib/gitlab/middleware/rack_multipart_tempfile_factory.rb:19:in `call'
# ./lib/gitlab/metrics/requests_rack_middleware.rb:83:in `call'
# ./lib/gitlab/middleware/sidekiq_web_static.rb:20:in `call'
# ./ee/spec/requests/custom_roles/admin/read_admin_monitoring/request_spec.rb:32:in `block (3 levels) in <top (required)>'
# ./spec/spec_helper.rb:504:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/sidekiq_sharding/validator.rb:42:in `enabled'
# ./spec/spec_helper.rb:503:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:498:in `block (3 levels) in <top (required)>'
# ./spec/support/sidekiq_middleware.rb:9:in `with_sidekiq_server_middleware'
# ./spec/spec_helper.rb:489:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:485:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/application_context.rb:102:in `with_raw_context'
# ./spec/spec_helper.rb:485:in `block (2 levels) in <top (required)>'
# ./spec/spec_helper.rb:456:in `block (3 levels) in <top (required)>'
# ./lib/gitlab/ci/config/feature_flags.rb:38:in `ensure_correct_usage'
# ./spec/spec_helper.rb:455:in `block (2 levels) in <top (required)>'
# ./spec/support/system_exit_detected.rb:7:in `block (2 levels) in <top (required)>'
# ./spec/support/fast_quarantine.rb:22:in `block (2 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (3 levels) in <top (required)>'
# ./spec/support/database/prevent_cross_joins.rb:60:in `with_cross_joins_prevented'
# ./spec/support/database/prevent_cross_joins.rb:106:in `block (2 levels) in <top (required)>'
References
- https://gitlab.com/gitlab-org/gitlab/-/jobs/11427393567
- https://gitlab.com/gitlab-org/gitlab/-/jobs/11470909065
- #570211 (closed)
- #570212 (closed)
- #570209 (closed)
- !197916 (merged)
MR acceptance checklist
Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Edited by Ajay Thomas