Class: Sunspot::IndexQueue::Batch
- Inherits:
-
Object
- Object
- Sunspot::IndexQueue::Batch
- Defined in:
- lib/sunspot/index_queue/batch.rb
Overview
Batch of entries to be indexed with Solr.
Constant Summary collapse
- PASS_THROUGH_EXCEPTIONS =
Errors that cause batch processing to stop and are immediately passed on to the caller. All other are logged on the entry on the assumption that they can be fixed later while other entries can still be processed.
[SystemExit, NoMemoryError, Interrupt, SignalException, Errno::ECONNREFUSED]
Instance Attribute Summary collapse
-
#entries ⇒ Object
readonly
Returns the value of attribute entries.
Instance Method Summary collapse
-
#initialize(queue, entries = nil) ⇒ Batch
constructor
A new instance of Batch.
-
#submit! ⇒ Object
Submit the entries to solr.
Constructor Details
#initialize(queue, entries = nil) ⇒ Batch
Returns a new instance of Batch.
12 13 14 15 16 17 |
# File 'lib/sunspot/index_queue/batch.rb', line 12 def initialize(queue, entries = nil) @queue = queue @entries = [] @entries.concat(entries) if entries @delete_entries = [] end |
Instance Attribute Details
#entries ⇒ Object (readonly)
Returns the value of attribute entries.
5 6 7 |
# File 'lib/sunspot/index_queue/batch.rb', line 5 def entries @entries end |
Instance Method Details
#submit! ⇒ Object
Submit the entries to solr. If they are successfully committed, the entries will be deleted. Otherwise, any entries that generated errors will be updated with the error messages and set to be processed again in the future.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/sunspot/index_queue/batch.rb', line 22 def submit! Entry.load_all_records(entries) clear_processed(entries) begin # First try submitting the entries in a batch since that's the most efficient. # If there are errors, try each entry individually in case there's a bad document. session.batch do entries.each do |entry| submit_entry(entry) end end commit! rescue Exception => e @delete_entries.clear entries.each{|entry| entry.processed = false} if PASS_THROUGH_EXCEPTIONS.include?(e.class) raise e else submit_each_entry end end rescue Exception => e begin clear_processed(entries) entries.each{|entry| entry.reset!} if PASS_THROUGH_EXCEPTIONS.include?(e.class) ensure # Use a more specific error to indicate Solr is down. e = SolrNotResponding.new(e.) if e.is_a?(Errno::ECONNREFUSED) raise e end end |