Arvados-DCO-1.1-Signed-off-by: Radhika Chippada <radhika@curoverse.com>
[arvados.git] / services / api / lib / tasks / delete_old_job_logs.rake
index 7f2b31e1d61ae26aa1b8cfd3bb91f0b74f38c8bc..dcd92b19bcc4982b81e036d1fc76298b5fd2a673 100644 (file)
@@ -1,3 +1,7 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
 # This task finds jobs that have been finished for at least as long as
 # the duration specified in the `clean_job_log_rows_after`
 # configuration setting, and deletes their stderr logs from the logs table.
@@ -5,13 +9,8 @@
 namespace :db do
   desc "Remove old job stderr entries from the logs table"
   task delete_old_job_logs: :environment do
-    Log.select("logs.id").
-        joins("JOIN jobs ON object_uuid = jobs.uuid").
-        where("event_type = :etype AND jobs.log IS NOT NULL AND jobs.finished_at < :age",
-              etype: "stderr",
-              age: Rails.configuration.clean_job_log_rows_after.ago).
-        find_in_batches do |old_log_ids|
-      Log.where(id: old_log_ids.map(&:id)).delete_all
-    end
+    delete_sql = "DELETE FROM logs WHERE id in (SELECT logs.id FROM logs JOIN jobs ON logs.object_uuid = jobs.uuid WHERE event_type = 'stderr' AND jobs.log IS NOT NULL AND clock_timestamp() - jobs.finished_at > interval '#{Rails.configuration.clean_job_log_rows_after} seconds')"
+
+    ActiveRecord::Base.connection.execute(delete_sql)
   end
 end