Changeset 328

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

Putting Index metadata (lock, indexing time) in Picolena::MetaIndexPath?
Using file lock for Indexer.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/History.txt

    r303 r328  
    1 == 0.1.8  2008-05- 
     1== 0.1.8  2008-05-08 
     2 
     3* 1 bug fix: 
     4  * Ensure that index is locked system-wide by using lock file. 
    25 
    36== 0.1.7  2008-04-30 
  • trunk/lib/picolena/templates/app/controllers/documents_controller.rb

    r314 r328  
    6565  def ensure_index_is_created 
    6666    Indexer.ensure_index_existence 
    67     while Indexer.do_not_disturb_while_indexing do 
     67    while Indexer.locked? do 
    6868      sleep 1 
    6969    end 
  • trunk/lib/picolena/templates/app/models/finder.rb

    r327 r328  
    33 
    44  def index 
    5     Indexer.index 
     5    @@index ||= Indexer.index  
    66  end 
    77 
     
    1111    Indexer.ensure_index_existence 
    1212    reload_index! if should_be_reloaded? 
    13     uncache_index if Indexer.do_not_disturb_while_indexing 
    1413    @per_page=results_per_page 
    1514    @offset=(page.to_i-1)*results_per_page 
     
    5958  def reload_index! 
    6059    Indexer.close 
    61     uncache_index 
     60    @@index = nil 
    6261    @@last_reload = Time.now 
    63   end 
    64    
    65   def uncache_index 
    66     @@index = nil 
    6762  end 
    6863 
  • trunk/lib/picolena/templates/app/models/indexer.rb

    r327 r328  
    99  # Number of threads that will be used during indexing process 
    1010  @@threads_number = 8 
    11    
    12   cattr_reader :do_not_disturb_while_indexing 
    1311 
    1412  class << self 
     
    1917    # case it removes the index first before re-creating it. 
    2018    def index_every_directory(remove_first=false) 
    21       @@do_not_disturb_while_indexing=true 
    2219      clear! if remove_first 
     20      lock! 
    2321      @from_scratch = remove_first 
    2422      logger.start_indexing 
     
    2927      index.optimize 
    3028      index_time_dbm_file['last']=Time.now._dump 
    31       # Forces Finder.index to be reloaded. 
    32       @@do_not_disturb_while_indexing=false 
    33       touch_reload_file! 
     29      unlock! 
    3430      logger.show_report 
    3531    end 
     
    4036    def index_directory_with_multithreads(dir) 
    4137      logger.debug "Indexing #{dir}, #{@@threads_number} threads" 
    42  
    4338      indexing_list=Dir[File.join(dir,"**/*")].select{|filename| 
    4439        File.file?(filename) && filename !~ @@exclude 
     
    4641 
    4742      indexing_list_chunks=indexing_list.in_transposed_slices(@@threads_number) 
    48        
    4943      prepare_multi_threads_environment 
    50        
     44 
    5145      indexing_list_chunks.each_with_thread{|chunk| 
    5246        chunk.each{|complete_path| 
     
    144138      @from_scratch || !last_itime || File.mtime(complete_path)> Time._load(last_itime)  
    145139    end 
     140     
     141    def locked? 
     142      File.exists?(lock_file) 
     143    end 
    146144 
    147145    private 
     
    155153     
    156154    def reload_file 
    157       File.join(Picolena::IndexSavePath,'reload') 
     155      File.join(Picolena::MetaIndexPath,'reload') 
     156    end 
     157     
     158    def lock! 
     159      FileUtils.touch(lock_file) 
     160    end 
     161     
     162    def unlock! 
     163      FileUtils.rm(lock_file) 
     164      # Forces Finder.index to be reloaded. 
     165      touch_reload_file! 
     166    end 
     167     
     168    def lock_file 
     169      File.join(Picolena::MetaIndexPath,'lock') 
    158170    end 
    159171 
     
    164176    # Copied from Ferret book, By David Balmain 
    165177    def index_time_dbm_file 
    166       @@dbm_file ||= DBM.open(File.join(Picolena::IndexSavePath, 'added_at')) 
     178      @@dbm_file ||= DBM.open(File.join(Picolena::MetaIndexPath, 'added_at')) 
    167179    end 
    168180 
  • trunk/lib/picolena/templates/config/initializers/002_load_indexed_dirs.rb

    r315 r328  
    99  IndexSavePath=File.join(IndexesSavePath,ENV["RAILS_ENV"] || "development") 
    1010  FileUtils.mkpath IndexSavePath 
     11  MetaIndexPath= File.join(IndexSavePath,'meta') 
     12  FileUtils.mkpath MetaIndexPath 
    1113end 
  • trunk/lib/picolena/templates/spec/models/basic_finder_spec.rb

    r325 r328  
    88    @new_index_path=File.join(Dir::tmpdir,'ferret_tst') 
    99    Picolena::IndexSavePath.replace(@new_index_path) 
     10    Picolena::MetaIndexPath.replace(File.join(@new_index_path,'meta')) 
     11    FileUtils.mkpath Picolena::MetaIndexPath 
    1012  end 
    1113 
     
    3133    Picolena::IndexedDirectories.replace(@original_indexed_dirs) 
    3234    Picolena::IndexSavePath.replace(@original_index_path) 
     35    Picolena::MetaIndexPath.replace(File.join(@original_index_path,'meta')) 
    3336  end 
    3437end