Class: FC::Policy
Class Attribute Summary collapse
-
.get_create_storages_mutex ⇒ Object
Returns the value of attribute get_create_storages_mutex.
-
.storages_cache_time ⇒ Object
Returns the value of attribute storages_cache_time.
Attributes inherited from DbBase
#additional_fields, #database_fields, #id
Class Method Summary collapse
Instance Method Summary collapse
- #get_create_storages ⇒ Object
-
#get_proper_storage_for_create(size, local_path = nil) ⇒ Object
get available storage for create by size and local item path.
Methods inherited from DbBase
apply!, create_from_fiels, #delete, #dump, find, #initialize, #load, #reload, #save, set_table, where
Constructor Details
This class inherits a constructor from FC::DbBase
Class Attribute Details
.get_create_storages_mutex ⇒ Object
Returns the value of attribute get_create_storages_mutex.
8 9 10 |
# File 'lib/fc/policy.rb', line 8 def get_create_storages_mutex @get_create_storages_mutex end |
.storages_cache_time ⇒ Object
Returns the value of attribute storages_cache_time.
8 9 10 |
# File 'lib/fc/policy.rb', line 8 def storages_cache_time @storages_cache_time end |
Class Method Details
Instance Method Details
#get_create_storages ⇒ Object
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/fc/policy.rb', line 20 def get_create_storages self.class.get_create_storages_mutex.synchronize do unless @create_storages_cache && Time.new.to_i - @get_create_storages_time.to_i < self.class.storages_cache_time @get_create_storages_time = Time.new.to_i names = create_storages.to_s.split(',').map{|s| "'#{s}'"}.join(',') @create_storages_cache = names.empty? ? [] : FC::Storage.where("name IN (#{names}) ORDER BY FIELD(name, #{names})") end end @create_storages_cache end |
#get_proper_storage_for_create(size, local_path = nil) ⇒ Object
get available storage for create by size and local item path
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/fc/policy.rb', line 32 def get_proper_storage_for_create(size, local_path = nil) FC::Storage.select_proper_storage_for_create(get_create_storages, size) do |storages| local_storages = storages.select{|storage| FC::Storage.curr_host == storage.host} # find same storage device as local_path device if local_path && !local_storages.empty? dev = File.stat(local_path).dev dev_storage = local_storages.select{|storage| dev == File.stat(storage.path).dev}.first local_storages = [dev_storage] if dev_storage end # if no local storages - use all storages local_storages = storages if local_storages.empty? local_storages end end |