filecluster 0.0.9 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/daemon.rb +2 -1
 - data/lib/daemon/task_thread.rb +1 -1
 - data/lib/fc/db.rb +2 -5
 - data/lib/fc/item.rb +5 -3
 - data/lib/fc/policy.rb +7 -1
 - data/lib/fc/version.rb +1 -1
 - data/test/policy_test.rb +6 -0
 - metadata +4 -4
 
    
        data/lib/daemon.rb
    CHANGED
    
    | 
         @@ -39,7 +39,8 @@ end 
     | 
|
| 
       39 
39 
     | 
    
         | 
| 
       40 
40 
     | 
    
         
             
            def update_storages
         
     | 
| 
       41 
41 
     | 
    
         
             
              $log.debug('Update storages')
         
     | 
| 
       42 
     | 
    
         
            -
              $ 
     | 
| 
      
 42 
     | 
    
         
            +
              $all_storages = FC::Storage.where
         
     | 
| 
      
 43 
     | 
    
         
            +
              $storages = $all_storages.select{|s| s.host == FC::Storage.curr_host}
         
     | 
| 
       43 
44 
     | 
    
         
             
            end
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
       45 
46 
     | 
    
         
             
            def storages_check
         
     | 
    
        data/lib/daemon/task_thread.rb
    CHANGED
    
    | 
         @@ -29,7 +29,7 @@ class TaskThread < BaseThread 
     | 
|
| 
       29 
29 
     | 
    
         
             
                storage = $storages.detect{|s| s.name == item_storage.storage_name}
         
     | 
| 
       30 
30 
     | 
    
         
             
                item = FC::Item.find(item_storage.item_id)
         
     | 
| 
       31 
31 
     | 
    
         
             
                src_item_storage = FC::ItemStorage.where("item_id = ? AND status = 'ready'", item.id).sample
         
     | 
| 
       32 
     | 
    
         
            -
                src_storage = $ 
     | 
| 
      
 32 
     | 
    
         
            +
                src_storage = $all_storages.detect{|s| s.name == src_item_storage.storage_name}
         
     | 
| 
       33 
33 
     | 
    
         
             
                item.copy_item_storage(src_storage, storage, item_storage)
         
     | 
| 
       34 
34 
     | 
    
         
             
              rescue Exception => e
         
     | 
| 
       35 
35 
     | 
    
         
             
                error "Copy item_storage error: #{e.message}; #{e.backtrace.join(', ')}", :item_id => item_storage.item_id, :item_storage_id => item_storage.id
         
     | 
    
        data/lib/fc/db.rb
    CHANGED
    
    | 
         @@ -21,10 +21,7 @@ module FC 
     | 
|
| 
       21 
21 
     | 
    
         
             
                end
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                def self.connect=(connect, options = {})
         
     | 
| 
       24 
     | 
    
         
            -
                   
     | 
| 
       25 
     | 
    
         
            -
                  @prefix = @options[:prefix].to_s
         
     | 
| 
       26 
     | 
    
         
            -
                  @connects = {}
         
     | 
| 
       27 
     | 
    
         
            -
                  @connects[Thread.current.object_id] = connect
         
     | 
| 
      
 24 
     | 
    
         
            +
                  self.connect_by_config connect.query_options.merge(options).merge(:as => :hash)
         
     | 
| 
       28 
25 
     | 
    
         
             
                end
         
     | 
| 
       29 
26 
     | 
    
         | 
| 
       30 
27 
     | 
    
         
             
                def self.close
         
     | 
| 
         @@ -52,7 +49,7 @@ module FC 
     | 
|
| 
       52 
49 
     | 
    
         
             
                      time int DEFAULT NULL,
         
     | 
| 
       53 
50 
     | 
    
         
             
                      copies int NOT NULL DEFAULT 0,
         
     | 
| 
       54 
51 
     | 
    
         
             
                      PRIMARY KEY (id), UNIQUE KEY (name(255), policy_id), 
         
     | 
| 
       55 
     | 
    
         
            -
                      KEY (outer_id), KEY (time, status), KEY (status), 
     | 
| 
      
 52 
     | 
    
         
            +
                      KEY (outer_id), KEY (time, status), KEY (status, policy_id, copies), KEY (copies, status, policy_id)
         
     | 
| 
       56 
53 
     | 
    
         
             
                    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
         
     | 
| 
       57 
54 
     | 
    
         
             
                  })
         
     | 
| 
       58 
55 
     | 
    
         
             
                  proc_time = %{
         
     | 
    
        data/lib/fc/item.rb
    CHANGED
    
    | 
         @@ -23,16 +23,18 @@ module FC 
     | 
|
| 
       23 
23 
     | 
    
         
             
                  raise 'Zero size path' if item_params[:size] == 0
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                  if local_path.include?(item_name)
         
     | 
| 
       26 
     | 
    
         
            -
                    storage = policy.get_create_storages.detect 
     | 
| 
      
 26 
     | 
    
         
            +
                    storage = policy.get_create_storages.detect do |s| 
         
     | 
| 
      
 27 
     | 
    
         
            +
                      s.host == FC::Storage.curr_host && local_path.index(s.path) == 0 && local_path.sub(s.path, '') == item_params[:name]
         
     | 
| 
      
 28 
     | 
    
         
            +
                    end
         
     | 
| 
       27 
29 
     | 
    
         
             
                    FC::Error.raise "local_path #{local_path} is not valid path for policy ##{policy.id}" unless storage
         
     | 
| 
       28 
30 
     | 
    
         
             
                  end
         
     | 
| 
       29 
31 
     | 
    
         | 
| 
       30 
32 
     | 
    
         
             
                  # new item?
         
     | 
| 
       31 
33 
     | 
    
         
             
                  item = FC::Item.where('name=? AND policy_id=?', item_params[:name], policy.id).first
         
     | 
| 
       32 
34 
     | 
    
         
             
                  if item
         
     | 
| 
       33 
     | 
    
         
            -
                    if options[:replace]
         
     | 
| 
      
 35 
     | 
    
         
            +
                    if options[:replace] || storage
         
     | 
| 
       34 
36 
     | 
    
         
             
                      # mark delete item_storages on replace
         
     | 
| 
       35 
     | 
    
         
            -
                      FC::DB.connect.query("UPDATE #{FC::ItemStorage.table_name} SET status='delete' WHERE item_id = #{item.id}")
         
     | 
| 
      
 37 
     | 
    
         
            +
                      FC::DB.connect.query("UPDATE #{FC::ItemStorage.table_name} SET status='delete' WHERE item_id = #{item.id}") if options[:replace] && !storage
         
     | 
| 
       36 
38 
     | 
    
         
             
                      # replace all fields
         
     | 
| 
       37 
39 
     | 
    
         
             
                      item_params.each{|key, val| item.send("#{key}=", val)}
         
     | 
| 
       38 
40 
     | 
    
         
             
                    else
         
     | 
    
        data/lib/fc/policy.rb
    CHANGED
    
    | 
         @@ -32,7 +32,13 @@ module FC 
     | 
|
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                # get available storage for copy by copy_id and size
         
     | 
| 
       34 
34 
     | 
    
         
             
                def get_proper_storage_for_copy(size, copy_id = nil, exclude = [])
         
     | 
| 
       35 
     | 
    
         
            -
                  storages = get_copy_storages 
     | 
| 
      
 35 
     | 
    
         
            +
                  storages = get_copy_storages
         
     | 
| 
      
 36 
     | 
    
         
            +
                  start_storage_index = nil
         
     | 
| 
      
 37 
     | 
    
         
            +
                  storages.each_with_index do |s, i|
         
     | 
| 
      
 38 
     | 
    
         
            +
                    start_storage_index = i if copy_id.to_i == s.copy_id.to_i
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
                  storages = storages[start_storage_index..-1]+storages[0..start_storage_index-1] if storages.size > 0 && start_storage_index
         
     | 
| 
      
 41 
     | 
    
         
            +
                  storages = storages.select do |storage|
         
     | 
| 
       36 
42 
     | 
    
         
             
                    !exclude.include?(storage.name) && storage.up? && storage.size + size < storage.size_limit
         
     | 
| 
       37 
43 
     | 
    
         
             
                  end
         
     | 
| 
       38 
44 
     | 
    
         
             
                  storage = storages.detect{|s| copy_id.to_i == s.copy_id.to_i}
         
     | 
    
        data/lib/fc/version.rb
    CHANGED
    
    
    
        data/test/policy_test.rb
    CHANGED
    
    | 
         @@ -77,5 +77,11 @@ class PolicyTest < Test::Unit::TestCase 
     | 
|
| 
       77 
77 
     | 
    
         
             
                @@policy.copy_storages = 'rec2-sda,rec3-sda,rec1-sda'
         
     | 
| 
       78 
78 
     | 
    
         
             
                @@policy.save
         
     | 
| 
       79 
79 
     | 
    
         
             
                assert_equal 'rec2-sda', @@policy.get_proper_storage_for_copy(1, 4).name, 'storage by copy_id'
         
     | 
| 
      
 80 
     | 
    
         
            +
                
         
     | 
| 
      
 81 
     | 
    
         
            +
                @@policy.copy_storages = 'rec3-sda,rec1-sda,rec2-sda,'
         
     | 
| 
      
 82 
     | 
    
         
            +
                @@policy.save
         
     | 
| 
      
 83 
     | 
    
         
            +
                @@storages[0].check_time = 0
         
     | 
| 
      
 84 
     | 
    
         
            +
                @@storages[0].save
         
     | 
| 
      
 85 
     | 
    
         
            +
                assert_equal 'rec2-sda', @@policy.get_proper_storage_for_copy(1, 1).name, 'storage by copy_id'
         
     | 
| 
       80 
86 
     | 
    
         
             
              end
         
     | 
| 
       81 
87 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: filecluster
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2013-04- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2013-04-16 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rb-readline
         
     | 
| 
         @@ -186,7 +186,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       186 
186 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       187 
187 
     | 
    
         
             
                  segments:
         
     | 
| 
       188 
188 
     | 
    
         
             
                  - 0
         
     | 
| 
       189 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 189 
     | 
    
         
            +
                  hash: 2418971618198205266
         
     | 
| 
       190 
190 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       191 
191 
     | 
    
         
             
              none: false
         
     | 
| 
       192 
192 
     | 
    
         
             
              requirements:
         
     | 
| 
         @@ -195,7 +195,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       195 
195 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       196 
196 
     | 
    
         
             
                  segments:
         
     | 
| 
       197 
197 
     | 
    
         
             
                  - 0
         
     | 
| 
       198 
     | 
    
         
            -
                  hash:  
     | 
| 
      
 198 
     | 
    
         
            +
                  hash: 2418971618198205266
         
     | 
| 
       199 
199 
     | 
    
         
             
            requirements: []
         
     | 
| 
       200 
200 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       201 
201 
     | 
    
         
             
            rubygems_version: 1.8.24
         
     |