Changeset 325

Show
Ignore:
Timestamp:
05/08/08 02:49:52 (7 months ago)
Author:
eric.dumin..@gmail.com
Message:

Forcing reload of every process sharing the same index by touching a file.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/picolena/templates/app/models/finder.rb

    r314 r325  
    1010    @raw_query= raw_query 
    1111    Indexer.ensure_index_existence 
     12    reload! if should_be_reloaded? 
    1213    @per_page=results_per_page 
    1314    @offset=(page.to_i-1)*results_per_page 
     
    5354  } 
    5455 
    55   def self.reload! 
     56  private 
     57   
     58  def reload! 
     59    Indexer.close 
    5660    @@index = nil 
     61    @@last_reload = Time.now 
    5762  end 
    5863 
    59   private 
     64  def should_be_reloaded? 
     65    Indexer.reload_file_mtime > last_reload 
     66  end 
     67  
     68  def last_reload 
     69    @@last_reload ||= Time.at(0) 
     70  end 
    6071   
    6172  def sort_by_date 
  • trunk/lib/picolena/templates/app/models/indexer.rb

    r323 r325  
    2222      clear! if remove_first 
    2323      @from_scratch = remove_first 
    24       # Forces Finder.searcher and Finder.index to be reloaded, by removing them from the cache
    25       Finder.reload
     24      # Forces Finder.index to be reloaded
     25      touch_reload_file
    2626      logger.start_indexing 
    2727      Picolena::IndexedDirectories.each{|dir, alias_dir| 
     
    129129    end 
    130130     
     131    # Returns the time at which the reload file was last touched. 
     132    # Useful to know if other processes have modified the shared index, 
     133    # and if the Indexer should be reloaded. 
     134    def reload_file_mtime 
     135      touch_reload_file! unless File.exists?(reload_file) 
     136      File.mtime(reload_file) 
     137    end 
     138     
    131139    # For a given document, it retrieves the time it was last indexed, compare it to 
    132140    # its modification time and returns false unless the file has been 
     
    138146 
    139147    private 
     148     
     149    def touch_reload_file! 
     150      FileUtils.touch(reload_file) 
     151    end 
     152     
     153    def reload_file 
     154      File.join(Picolena::IndexSavePath,'reload') 
     155    end 
    140156 
    141157    def logger 
  • trunk/lib/picolena/templates/spec/models/basic_finder_spec.rb

    r283 r325  
    1212  before(:each) do 
    1313    Indexer.clear! 
     14    Finder.send(:class_variable_set,'@@last_reload',nil) 
    1415  end 
    1516