License expiration notification logic causes 500 errors
The following discussion from !77608 (merged) should be addressed:
-
@pgascouvaillancourt started a discussion: (+1 comment) @tyleramos I wanted to ping you here because I've started seeing some strange errors in my GDK that seem related to the changes here. Currently, all pages throw a 500 error:
NoMethodError at /admin/subscription undefined method `-' for nil:NilClass
Stacktrace
Hint: Something is `nil` when it probably shouldn't be. notify_admins? ee/app/models/license.rb, line 635 with_enabled_notifications? ee/lib/gitlab/expiring_subscription_message.rb, line 128 notifiable? ee/lib/gitlab/expiring_subscription_message.rb, line 124 message ee/lib/gitlab/expiring_subscription_message.rb, line 23 license_message ee/app/helpers/ee/subscribable_banner_helper.rb, line 50 gitlab_subscription_message_or_license_message ee/app/helpers/ee/subscribable_banner_helper.rb, line 16 _ee_app_views_layouts_header__ee_subscribable_banner_html_haml__4353384094099273026_188040 ee/app/views/layouts/header/_ee_subscribable_banner.html.haml, line 2 render_if_exists app/helpers/application_helper.rb, line 17 _app_views_layouts__page_html_haml___1420944583386245944_187600 app/views/layouts/_page.html.haml, line 19 _app_views_layouts_application_html_haml__420114217205778492_186580 app/views/layouts/application.html.haml, line 14 _app_views_layouts_admin_html_haml___2773134153248362241_186560 app/views/layouts/admin.html.haml, line 11 render app/controllers/application_controller.rb, line 133 with ee/lib/gitlab/ip_address_state.rb, line 10 set_current_ip_address ee/app/controllers/ee/application_controller.rb, line 44 set_current_admin app/controllers/application_controller.rb, line 490 with_session lib/gitlab/session.rb, line 11 set_session_storage app/controllers/application_controller.rb, line 481 with_locale lib/gitlab/i18n.rb, line 105 with_user_locale lib/gitlab/i18n.rb, line 111 set_locale app/controllers/application_controller.rb, line 475 set_current_context app/controllers/application_controller.rb, line 469 call lib/gitlab/metrics/elasticsearch_rack_middleware.rb, line 16 call lib/gitlab/middleware/rails_queue_duration.rb, line 33 call lib/gitlab/middleware/speedscope.rb, line 13 call lib/gitlab/request_profiler/middleware.rb, line 17 block in call lib/gitlab/query_limiting/middleware.rb, line 17 run lib/gitlab/query_limiting/transaction.rb, line 40 call lib/gitlab/query_limiting/middleware.rb, line 16 call lib/gitlab/database/load_balancing/rack_middleware.rb, line 23 block in call lib/gitlab/metrics/rack_middleware.rb, line 16 run lib/gitlab/metrics/web_transaction.rb, line 46 call lib/gitlab/metrics/rack_middleware.rb, line 16 call lib/gitlab/jira/middleware.rb, line 19 call lib/gitlab/middleware/go.rb, line 20 call lib/gitlab/etag_caching/middleware.rb, line 21 block in call lib/gitlab/middleware/query_analyzer.rb, line 11 within lib/gitlab/database/query_analyzer.rb, line 42 call lib/gitlab/middleware/query_analyzer.rb, line 11 call lib/gitlab/middleware/multipart.rb, line 173 call lib/gitlab/middleware/read_only/controller.rb, line 50 call lib/gitlab/middleware/read_only.rb, line 18 call lib/gitlab/middleware/same_site_cookies.rb, line 27 call lib/gitlab/middleware/handle_malformed_strings.rb, line 21 call lib/gitlab/middleware/basic_health_check.rb, line 25 call lib/gitlab/middleware/handle_ip_spoof_attack_error.rb, line 25 call lib/gitlab/middleware/request_context.rb, line 21 call lib/gitlab/middleware/webhook_recursion_detection.rb, line 15 call config/initializers/fix_local_cache_middleware.rb, line 11 call lib/gitlab/middleware/compressed_json.rb, line 26 call lib/gitlab/middleware/static.rb, line 11 perform_request lib/gitlab/webpack/dev_server_middleware.rb, line 34 call lib/gitlab/middleware/rack_multipart_tempfile_factory.rb, line 19 call lib/gitlab/middleware/sidekiq_web_static.rb, line 20 call lib/gitlab/metrics/requests_rack_middleware.rb, line 75 call lib/gitlab/middleware/release_env.rb, line 13
If I bypass this method by returning
false
instead ofDate.today >= (expires_at - notification_days)
, then the next method starts throwing as well:comparison of Date with nil failed
Stacktrace
>= ee/app/models/license.rb, line 642 notify_users? ee/app/models/license.rb, line 642 with_enabled_notifications? ee/lib/gitlab/expiring_subscription_message.rb, line 128 notifiable? ee/lib/gitlab/expiring_subscription_message.rb, line 124 message ee/lib/gitlab/expiring_subscription_message.rb, line 23 license_message ee/app/helpers/ee/subscribable_banner_helper.rb, line 50 gitlab_subscription_message_or_license_message ee/app/helpers/ee/subscribable_banner_helper.rb, line 16 _ee_app_views_layouts_header__ee_subscribable_banner_html_haml__4353384094099273026_188040 ee/app/views/layouts/header/_ee_subscribable_banner.html.haml, line 2 render_if_exists app/helpers/application_helper.rb, line 17 _app_views_layouts__page_html_haml___1420944583386245944_187600 app/views/layouts/_page.html.haml, line 19 _app_views_layouts_application_html_haml__420114217205778492_186580 app/views/layouts/application.html.haml, line 14 _app_views_layouts_admin_html_haml___2773134153248362241_186560 app/views/layouts/admin.html.haml, line 11 render app/controllers/application_controller.rb, line 133 with ee/lib/gitlab/ip_address_state.rb, line 10 set_current_ip_address ee/app/controllers/ee/application_controller.rb, line 44 set_current_admin app/controllers/application_controller.rb, line 490 with_session lib/gitlab/session.rb, line 11 set_session_storage app/controllers/application_controller.rb, line 481 with_locale lib/gitlab/i18n.rb, line 105 with_user_locale lib/gitlab/i18n.rb, line 111 set_locale app/controllers/application_controller.rb, line 475 set_current_context app/controllers/application_controller.rb, line 469 call lib/gitlab/metrics/elasticsearch_rack_middleware.rb, line 16 call lib/gitlab/middleware/rails_queue_duration.rb, line 33 call lib/gitlab/middleware/speedscope.rb, line 13 call lib/gitlab/request_profiler/middleware.rb, line 17 block in call lib/gitlab/query_limiting/middleware.rb, line 17 run lib/gitlab/query_limiting/transaction.rb, line 40 call lib/gitlab/query_limiting/middleware.rb, line 16 call lib/gitlab/database/load_balancing/rack_middleware.rb, line 23 block in call lib/gitlab/metrics/rack_middleware.rb, line 16 run lib/gitlab/metrics/web_transaction.rb, line 46 call lib/gitlab/metrics/rack_middleware.rb, line 16 call lib/gitlab/jira/middleware.rb, line 19 call lib/gitlab/middleware/go.rb, line 20 call lib/gitlab/etag_caching/middleware.rb, line 21 block in call lib/gitlab/middleware/query_analyzer.rb, line 11 within lib/gitlab/database/query_analyzer.rb, line 42 call lib/gitlab/middleware/query_analyzer.rb, line 11 call lib/gitlab/middleware/multipart.rb, line 173 call lib/gitlab/middleware/read_only/controller.rb, line 50 call lib/gitlab/middleware/read_only.rb, line 18 call lib/gitlab/middleware/same_site_cookies.rb, line 27 call lib/gitlab/middleware/handle_malformed_strings.rb, line 21 call lib/gitlab/middleware/basic_health_check.rb, line 25 call lib/gitlab/middleware/handle_ip_spoof_attack_error.rb, line 25 call lib/gitlab/middleware/request_context.rb, line 21 call lib/gitlab/middleware/webhook_recursion_detection.rb, line 15 call config/initializers/fix_local_cache_middleware.rb, line 11 call lib/gitlab/middleware/compressed_json.rb, line 26 call lib/gitlab/middleware/static.rb, line 11 perform_request lib/gitlab/webpack/dev_server_middleware.rb, line 34 call lib/gitlab/middleware/rack_multipart_tempfile_factory.rb, line 19 call lib/gitlab/middleware/sidekiq_web_static.rb, line 20 call lib/gitlab/metrics/requests_rack_middleware.rb, line 75 call lib/gitlab/middleware/release_env.rb, line 13
It's worth noting that this started happening shortly after following the testing instructions in an MR I was testing locally: !64540 (merged). So it is possible that I broke something in my GDK and that the code itself is fine, but I thought I would let you know in case this rings a bell.