From c0a92cb801528f00d1317b01fd8a94274552c166 Mon Sep 17 00:00:00 2001
From: Olaf Tomalka <olaf.tomalka@gmail.com>
Date: Mon, 5 Sep 2016 22:57:56 +0200
Subject: [PATCH] Limited amount of pruned Event rows per run

Old deployments of Gitlab might have a big number of old events to be
deleted. Such numbers cause the worker to timeout.
I've limited the amount of rows that should be destroyed at once to
10000, and increased how often pruning shall take place to 4 times a
day.
---
 CHANGELOG                              | 1 +
 app/workers/prune_old_events_worker.rb | 2 +-
 config/initializers/1_settings.rb      | 2 +-
 3 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index fea56a6ef2171..1d42acfe3631e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date.
 v 8.12.0 (unreleased)
   - Add ability to fork to a specific namespace using API. (ritave)
   - Cleanup misalignments in Issue list view !6206
+  - Prune events older than 12 months. @ritave <olaf@tomalka.me>
   - Prepend blank line to `Closes` message on merge request linked to issue (lukehowell)
   - Prune events older than 12 months.
   - Filter tags by name !6121
diff --git a/app/workers/prune_old_events_worker.rb b/app/workers/prune_old_events_worker.rb
index a0182fc67d052..d75083f9ab198 100644
--- a/app/workers/prune_old_events_worker.rb
+++ b/app/workers/prune_old_events_worker.rb
@@ -3,6 +3,6 @@ class PruneOldEventsWorker
 
   def perform
     # Contribution calendar shows maximum 12 months of events
-    Event.where('created_at < ?', (12.months + 1.day).ago).destroy_all
+    Event.delete(Event.unscoped.where('created_at < ?', (12.months + 1.day).ago).limit(10_000).pluck(:id))
   end
 end
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 2fac3e34dc53f..195108b921b74 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -300,7 +300,7 @@ def host(url)
 Settings.cron_jobs['remove_expired_group_links_worker']['cron'] ||= '10 0 * * *'
 Settings.cron_jobs['remove_expired_group_links_worker']['job_class'] = 'RemoveExpiredGroupLinksWorker'
 Settings.cron_jobs['prune_old_events_worker'] ||= Settingslogic.new({})
-Settings.cron_jobs['prune_old_events_worker']['cron'] ||= '0 0 * * *'
+Settings.cron_jobs['prune_old_events_worker']['cron'] ||= '* */6 * * *'
 Settings.cron_jobs['prune_old_events_worker']['job_class'] = 'PruneOldEventsWorker'
 
 #
-- 
GitLab