From: Tom Hughes Date: Fri, 8 Aug 2008 15:49:29 +0000 (+0000) Subject: Make the cleanup script work a chunk at a time so we don't run out of X-Git-Tag: live~7677 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/b8f3742bc39a8aa4a90f6f1bd151a0c5cdaa42ec Make the cleanup script work a chunk at a time so we don't run out of memory when there are lots of sessions. --- diff --git a/script/cleanup b/script/cleanup index 270877096..72a6dec9b 100755 --- a/script/cleanup +++ b/script/cleanup @@ -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()")