Class: FileStore::MemoryMetaManager
- Inherits:
-
Object
- Object
- FileStore::MemoryMetaManager
- Includes:
- Logger
- Defined in:
- lib/filestore/memory_meta.rb
Overview
Class implementing a memory based MetaManager
Constant Summary collapse
- FILE =
Constant defining the default file path
'meta.yaml'
Instance Attribute Summary collapse
-
#file ⇒ Object
readonly
Accessor for the file to store data to.
Attributes included from Logger
Instance Method Summary collapse
-
#add_or_update(id, metaData) ⇒ Object
see: MetaManager::add_or_update.
-
#get_data(id) ⇒ Object
see: MetaManager::get_data.
-
#has_id?(id) ⇒ Boolean
see: MetaManager::has_id?.
-
#initialize(persistent_file = MemoryMetaManager::FILE, logger = StdoutLogger) ⇒ MemoryMetaManager
constructor
Creates a new instance of MemoryMetaManager.
-
#remove(id) ⇒ Object
see: MetaManager::remove.
-
#restore(id) ⇒ Object
see: MetaManager::restore.
-
#save ⇒ Object
see: MetaManager::save.
-
#shutdown ⇒ Object
see: MetaManager::shutdown.
Constructor Details
#initialize(persistent_file = MemoryMetaManager::FILE, logger = StdoutLogger) ⇒ MemoryMetaManager
Creates a new instance of MemoryMetaManager
Arguments: persistentFile: The file where the manager class is persisted to
logger: The logging facility
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/filestore/memory_meta.rb', line 25 def initialize(persistent_file = MemoryMetaManager::FILE, logger = StdoutLogger) @logger = logger @data = Hash.new @removed = Hash.new @file = (persistent_file.nil? or persistent_file == '') ? MemoryMetaManager::FILE : persistent_file begin if File.exists?(@file) @logger.info "loading meta yaml from #{@file}" @mm = YAML.load_file(@file) if File.exists?(@file) @logger.info "Loaded meta yaml: #{@mm}" @data = @mm[:current] @removed = @mm[:removed] else @logger.info "Creating new meta store in #{@file}" end rescue Exception => e raise FileStoreException, "Couldn't load meta data from file #{@file}.\nCause: #{e}" end end |
Instance Attribute Details
#file ⇒ Object (readonly)
Accessor for the file to store data to
17 18 19 |
# File 'lib/filestore/memory_meta.rb', line 17 def file @file end |
Instance Method Details
#add_or_update(id, metaData) ⇒ Object
see: MetaManager::add_or_update
57 58 59 60 61 62 63 64 65 |
# File 'lib/filestore/memory_meta.rb', line 57 def add_or_update(id, ) raise FileStoreException, "Only hashsets can be added" if not .is_a?(Hash) raise FileStoreException, "Only Strings can be used as keys" if not id.is_a?(String) @data[id] = (@data.key?(id) ? @data[id].merge!() : @data[id] = ) inform ObserverAction.new(:type => ObserverAction::TYPE_META_ADD, :objects => [id, ], :msg => "Added/Updated file to meta store") if self.is_a?(ObservedSubject) end |
#get_data(id) ⇒ Object
see: MetaManager::get_data
49 50 51 52 53 |
# File 'lib/filestore/memory_meta.rb', line 49 def get_data(id) raise FileStoreException, "No meta data available for ID #{id}" if not @data.key?(id) return @data[id] end |
#has_id?(id) ⇒ Boolean
see: MetaManager::has_id?
120 121 122 |
# File 'lib/filestore/memory_meta.rb', line 120 def has_id?(id) @data.key?(id) end |
#remove(id) ⇒ Object
see: MetaManager::remove
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/filestore/memory_meta.rb', line 69 def remove(id) raise FileStoreException, "Only Strings can be used as keys" if not id.is_a?(String) raise FileStoreException, "ID #{id} not found in meta store" if not @data.key?(id) @removed[id] = @data[id] @data.delete(id) inform ObserverAction.new(:type => ObserverAction::TYPE_META_REMOVE, :objects => [id], :msg => "Removed file to meta store") if self.is_a?(ObservedSubject) end |
#restore(id) ⇒ Object
see: MetaManager::restore
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/filestore/memory_meta.rb', line 82 def restore(id) raise FileStoreException, "Only Strings can be used as keys" if not id.is_a?(String) raise FileStoreException, "ID #{id} not found in deleted meta store" if not @removed.key?(id) @data[id] = @removed[id] @removed.delete(id) inform ObserverAction.new(:type => ObserverAction::TYPE_META_RESTORE, :objects => [id], :msg => "Restored file in meta store") if self.is_a?(ObservedSubject) end |
#save ⇒ Object
see: MetaManager::save
95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/filestore/memory_meta.rb', line 95 def save begin @logger.info "Persisting meta store to #{@file}" File.open(@file, "wb+") do |fh| YAML.dump({:current => @data, :removed => @removed}, fh) end inform ObserverAction.new(:type => ObserverAction::TYPE_META_SHUTDOWN, :msg => "Shut down meta manager") if self.is_a?(ObservedSubject) rescue Exception => e raise FileStoreException, "Couldn't persist meta manager to file #{@file}.\n#{e.}" end end |
#shutdown ⇒ Object
see: MetaManager::shutdown
112 113 114 115 116 |
# File 'lib/filestore/memory_meta.rb', line 112 def shutdown save @data = @removed = nil end |