~cytrogen/masto-fe

c0605747adf028c7f5c7cc8aeca01f8285aa6802 — Claire 2 years ago ae6cf33
Fix N+1 in `tootctl search deploy` (#26710)

M app/lib/importer/public_statuses_index_importer.rb => app/lib/importer/public_statuses_index_importer.rb +7 -16
@@ 2,23 2,14 @@

class Importer::PublicStatusesIndexImporter < Importer::BaseImporter
  def import!
    indexable_statuses_scope.find_in_batches(batch_size: @batch_size) do |batch|
      in_work_unit(batch.map(&:status_id)) do |status_ids|
    scope.select(:id).find_in_batches(batch_size: @batch_size) do |batch|
      in_work_unit(batch.pluck(:id)) do |status_ids|
        bulk = ActiveRecord::Base.connection_pool.with_connection do
          Chewy::Index::Import::BulkBuilder.new(index, to_index: Status.includes(:media_attachments, :preloadable_poll).where(id: status_ids)).bulk_body
          Chewy::Index::Import::BulkBuilder.new(index, to_index: Status.includes(:media_attachments, :preloadable_poll, :preview_cards).where(id: status_ids)).bulk_body
        end

        indexed = 0
        deleted = 0

        bulk.map! do |entry|
          if entry[:index]
            indexed += 1
          else
            deleted += 1
          end
          entry
        end
        indexed = bulk.count { |entry| entry[:index] }
        deleted = bulk.count { |entry| entry[:delete] }

        Chewy::Index::Import::BulkRequest.new(index).perform(bulk)



@@ 35,7 26,7 @@ class Importer::PublicStatusesIndexImporter < Importer::BaseImporter
    PublicStatusesIndex
  end

  def indexable_statuses_scope
    Status.indexable.select('"statuses"."id", COALESCE("statuses"."reblog_of_id", "statuses"."id") AS status_id')
  def scope
    Status.indexable
  end
end

M app/lib/importer/statuses_index_importer.rb => app/lib/importer/statuses_index_importer.rb +1 -1
@@ 14,7 14,7 @@ class Importer::StatusesIndexImporter < Importer::BaseImporter
      scope.find_in_batches(batch_size: @batch_size) do |tmp|
        in_work_unit(tmp.map(&:status_id)) do |status_ids|
          bulk = ActiveRecord::Base.connection_pool.with_connection do
            Chewy::Index::Import::BulkBuilder.new(index, to_index: Status.includes(:media_attachments, :preloadable_poll).where(id: status_ids)).bulk_body
            Chewy::Index::Import::BulkBuilder.new(index, to_index: Status.includes(:media_attachments, :preloadable_poll, :preview_cards).where(id: status_ids)).bulk_body
          end

          indexed = 0