class ThinkingSphinx::Deltas::SidekiqDelta

Constants

JOB_PREFIX
JOB_TYPES

Public Class Methods

clear!() click to toggle source

Clear both the resque queues and any other state maintained in redis

# File lib/thinking_sphinx/deltas/sidekiq_delta.rb, line 22
def self.clear!
  self.clear_thinking_sphinx_queues

  FlagAsDeletedSet.clear_all!
end
clear_thinking_sphinx_queues() click to toggle source

LTRIM + LPOP deletes all items from the Resque queue without loading it into client memory (unlike Resque.dequeue). WARNING: This will clear ALL jobs in any queue used by a ResqueDelta job. If you're sharing a queue with other jobs they'll be deleted!

# File lib/thinking_sphinx/deltas/sidekiq_delta.rb, line 12
def self.clear_thinking_sphinx_queues
  JOB_TYPES.collect { |job|
    job.sidekiq_options['queue']
  }.uniq.each do |queue|
    Sidekiq.redis { |redis| redis.srem "queues", queue }
    Sidekiq.redis { |redis| redis.del  "queue:#{queue}" }
  end
end
lock(index_name) click to toggle source

Use simplistic locking. We're assuming that the user won't run more than one `rake ts:si` or `rake ts:in` task at a time.

# File lib/thinking_sphinx/deltas/sidekiq_delta.rb, line 30
def self.lock(index_name)
  Sidekiq.redis {|redis|
    redis.set("#{JOB_PREFIX}:index:#{index_name}:locked", 'true')
  }
end
locked?(index_name) click to toggle source
# File lib/thinking_sphinx/deltas/sidekiq_delta.rb, line 42
def self.locked?(index_name)
  Sidekiq.redis {|redis|
    redis.get("#{JOB_PREFIX}:index:#{index_name}:locked") == 'true'
  }
end
unlock(index_name) click to toggle source
# File lib/thinking_sphinx/deltas/sidekiq_delta.rb, line 36
def self.unlock(index_name)
  Sidekiq.redis {|redis|
    redis.del("#{JOB_PREFIX}:index:#{index_name}:locked")
  }
end

Public Instance Methods

delete(index, instance) click to toggle source
# File lib/thinking_sphinx/deltas/sidekiq_delta.rb, line 48
def delete(index, instance)
  return if self.class.locked?(index.reference)

  ThinkingSphinx::Deltas::SidekiqDelta::FlagAsDeletedJob.perform_async(
    index.name, index.document_id_for_key(instance.id)
  )
end
index(index) click to toggle source
# File lib/thinking_sphinx/deltas/sidekiq_delta.rb, line 56
def index(index)
  return if self.class.locked?(index.reference)

  ThinkingSphinx::Deltas::SidekiqDelta::DeltaJob.perform_async(index.name)
end