]> git.openstreetmap.org Git - rails.git/commitdiff
Make the cleanup script work a chunk at a time so we don't run out of
authorTom Hughes <tom@compton.nu>
Fri, 8 Aug 2008 15:49:29 +0000 (15:49 +0000)
committerTom Hughes <tom@compton.nu>
Fri, 8 Aug 2008 15:49:29 +0000 (15:49 +0000)
memory when there are lots of sessions.

script/cleanup

index 2708770965bb67979ffa0b3ce8221a35a0022c7f..72a6dec9bcd258c87adc1bef62c52cc6f375c6d3 100755 (executable)
@@ -2,17 +2,27 @@
 
 require File.dirname(__FILE__) + '/../config/environment'
 
-Session.find(:all, :conditions => ["updated_at < ?", 1.week.ago]).each do |session|
-  begin
-    if session[:user] and User.find(session[:user])
-      session.destroy if session.updated_at < 1.month.ago
-    else
+last_session_id = 0
+
+begin
+  sessions = Session.find(:all,
+                          :conditions => ["updated_at < ? and id > ?", 1.week.ago, last_session_id],
+                          :order => :id, :limit => 1000)
+
+  sessions.each do |session|
+    last_session_id = session.id
+
+    begin
+      if session[:user] and User.find(session[:user])
+        session.destroy if session.updated_at < 1.month.ago
+      else
+        session.destroy
+      end
+    rescue Exception => ex
+      puts "Invalid session #{session.session_id}: #{ex.to_s}"
       session.destroy
     end
-  rescue Exception => ex
-    puts "Invalid session #{session.session_id}: #{ex.to_s}"
-    session.destroy
   end
-end
+end while sessions.length > 0
 
 UserToken.delete_all("expiry < NOW()")