Class: FileStore::MemoryMetaManager

Inherits:
MetaManager show all
Includes:
Logger, OberservedSubject
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

Attributes included from OberservedSubject

#observers

Attributes included from Logger

#logger

Instance Method Summary collapse

Methods included from OberservedSubject

included, #inform, #initialize_obs, #register, #unregister

Constructor Details

#initialize(persistentFile = '', logger) ⇒ MemoryMetaManager

Creates a new instance of MemoryMetaManager

Arguments: persistentFile: The file where the manager class is persisted to



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/filestore/memory_meta.rb', line 25

def initialize(persistentFile = '', logger)
  @logger = logger
  @data = Hash.new
  @removed = Hash.new
  @file = (persistentFile.nil? or persistentFile == '')? MemoryMetaManager::FILE : persistentFile
  
  self.initialize_obs
  
  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

#fileObject (readonly)

Accessor for the file to store data to



18
19
20
# File 'lib/filestore/memory_meta.rb', line 18

def file
  @file
end

Instance Method Details

#add_or_update(id, metaData) ⇒ Object

see: MetaManager::add_or_update

Raises:



59
60
61
62
63
64
65
66
67
# File 'lib/filestore/memory_meta.rb', line 59

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] = )
  
  self.inform ObserverAction.new(:type => ObserverAction::TYPE_META_ADD, 
     :objects => [id, ], :msg => "Added/Updated file to meta store")
end

#get_data(id) ⇒ Object

see: MetaManager::get_data

Raises:



51
52
53
54
55
# File 'lib/filestore/memory_meta.rb', line 51

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?

Returns:

  • (Boolean)


114
115
116
# File 'lib/filestore/memory_meta.rb', line 114

def has_id?(id)
  @data.key?(id)
end

#remove(id) ⇒ Object

see: MetaManager::remove

Raises:



71
72
73
74
75
76
77
78
79
80
# File 'lib/filestore/memory_meta.rb', line 71

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)
  
  self.inform ObserverAction.new(:type => ObserverAction::TYPE_META_REMOVE, 
     :objects => [id], :msg => "Removed file to meta store")
end

#restore(id) ⇒ Object

see: MetaManager::restore

Raises:



84
85
86
87
88
89
90
91
92
93
# File 'lib/filestore/memory_meta.rb', line 84

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)
  
  self.inform ObserverAction.new(:type => ObserverAction::TYPE_META_RESTORE, 
     :objects => [id], :msg => "Restored file in meta store")
end

#shutdownObject

see: MetaManager::shutdown



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/filestore/memory_meta.rb', line 97

def shutdown
  begin
    File.open(@file, "wb+") do |fh|
      YAML.dump({:current => @data, :removed => @removed}, fh)
    end
    
    @data = nil
    
    self.inform ObserverAction.new(:type => ObserverAction::TYPE_META_SHUTDOWN, 
        :msg => "Restored file in meta store")
  rescue Exception => e
    raise FileStoreException, "Couldn't serialize meta manager to file #{@file}.\n#{e.message}"
  end
end