From 31d878a69d1e14660612d1729eece36827034461 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matija=20=C4=8Cupi=C4=87?= <matteeyah@gmail.com>
Date: Tue, 9 Mar 2021 10:56:23 +0000
Subject: [PATCH] Reduce DB load when resetting CI minute notifications

---
 ...c-bug-reduce-ci-minute-namespace-notification-db-load.yml | 5 +++++
 ee/app/models/ee/namespace.rb                                | 5 +++++
 ee/app/services/ci/minutes/batch_reset_service.rb            | 5 +++--
 3 files changed, 13 insertions(+), 2 deletions(-)
 create mode 100644 changelogs/unreleased/mc-bug-reduce-ci-minute-namespace-notification-db-load.yml

diff --git a/changelogs/unreleased/mc-bug-reduce-ci-minute-namespace-notification-db-load.yml b/changelogs/unreleased/mc-bug-reduce-ci-minute-namespace-notification-db-load.yml
new file mode 100644
index 0000000000000..9707dc4623e32
--- /dev/null
+++ b/changelogs/unreleased/mc-bug-reduce-ci-minute-namespace-notification-db-load.yml
@@ -0,0 +1,5 @@
+---
+title: Reduce DB load when resetting CI minute notifications.
+merge_request: 55765
+author:
+type: performance
diff --git a/ee/app/models/ee/namespace.rb b/ee/app/models/ee/namespace.rb
index 49e40631a013c..295387ba4550d 100644
--- a/ee/app/models/ee/namespace.rb
+++ b/ee/app/models/ee/namespace.rb
@@ -69,6 +69,11 @@ module Namespace
         where("EXISTS (?)", matcher)
       end
 
+      scope :without_last_ci_minutes_notification, -> do
+        where.not(last_ci_minutes_notification_at: nil)
+          .or(where.not(last_ci_minutes_usage_notification_level: nil))
+      end
+
       delegate :shared_runners_seconds, :shared_runners_seconds_last_reset, to: :namespace_statistics, allow_nil: true
 
       delegate :additional_purchased_storage_size, :additional_purchased_storage_size=,
diff --git a/ee/app/services/ci/minutes/batch_reset_service.rb b/ee/app/services/ci/minutes/batch_reset_service.rb
index 98c8d7464d840..5761268ed8b83 100644
--- a/ee/app/services/ci/minutes/batch_reset_service.rb
+++ b/ee/app/services/ci/minutes/batch_reset_service.rb
@@ -111,9 +111,10 @@ def reset_shared_runners_seconds!(namespaces)
       end
 
       def reset_ci_minutes_notifications!(namespaces)
-        namespaces.update_all(
+        namespaces.without_last_ci_minutes_notification.update_all(
           last_ci_minutes_notification_at: nil,
-          last_ci_minutes_usage_notification_level: nil)
+          last_ci_minutes_usage_notification_level: nil
+        )
       end
     end
   end
-- 
GitLab