X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/aebdddd8d1449ff7f8a6ba63054276e798dd79a0..b56a28d1aa985af24a2ac61084f8f6a20ec9ef15:/services/api/lib/sweep_trashed_objects.rb diff --git a/services/api/lib/sweep_trashed_objects.rb b/services/api/lib/sweep_trashed_objects.rb index 857662ac37..c09896567f 100644 --- a/services/api/lib/sweep_trashed_objects.rb +++ b/services/api/lib/sweep_trashed_objects.rb @@ -20,7 +20,7 @@ module SweepTrashedObjects # exceptions, and delete records owned by this project skipped_classes = ['Group', 'User'] ActiveRecord::Base.descendants.reject(&:abstract_class?).each do |klass| - if !skipped_classes.include?(klass.name) && klass.columns.collect{&:name}.include?('owner_uuid') + if !skipped_classes.include?(klass.name) && klass.columns.collect(&:name).include?('owner_uuid') klass.where({owner_uuid: p_uuid}).destroy_all end end @@ -48,12 +48,15 @@ module SweepTrashedObjects where({group_class: 'project'}). where('is_trashed = false and trash_at < statement_timestamp()'). update_all('is_trashed = true') + + # Sweep expired tokens + ActiveRecord::Base.connection.execute("DELETE from api_client_authorizations where expires_at <= statement_timestamp()") end end def self.sweep_if_stale - return if Rails.configuration.trash_sweep_interval <= 0 - exp = Rails.configuration.trash_sweep_interval.seconds + return if Rails.configuration.Collections.TrashSweepInterval <= 0 + exp = Rails.configuration.Collections.TrashSweepInterval.seconds need = false Rails.cache.fetch('SweepTrashedObjects', expires_in: exp) do need = true @@ -66,7 +69,12 @@ module SweepTrashedObjects rescue => e Rails.logger.error "#{e.class}: #{e}\n#{e.backtrace.join("\n\t")}" ensure - ActiveRecord::Base.connection.close + # Rails 5.1+ makes test threads share a database connection, so we can't + # close a connection shared with other threads. + # https://github.com/rails/rails/commit/deba47799ff905f778e0c98a015789a1327d5087 + if Rails.env != "test" + ActiveRecord::Base.connection.close + end end end end