Class: FileStore::MemoryMetaManager

Inherits:
Object
  • Object
show all
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

Attributes included from Logger

#logger

Instance Method Summary collapse

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

#fileObject (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

Raises:



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

Raises:



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?

Returns:

  • (Boolean)


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

Raises:



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

Raises:



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

#saveObject

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.message}"
  end
end

#shutdownObject

see: MetaManager::shutdown



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

def shutdown
  save
  
  @data = @removed = nil
end