[go: up one dir, main page]

Skip to content

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

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

Merge request reports

Loading