class Dopv::PersistentDisk::DB

Public Class Methods

new(state_store, node_name) click to toggle source
# File lib/dopv/persistent_disk.rb, line 56
def initialize(state_store, node_name)
  @state_store = state_store
  @node_name = node_name
  @state_store.transaction do
    @state_store[:data_volumes] ||= {}
    @state_store[:data_volumes][@node_name] ||= []
  end
end

Public Instance Methods

<<(entry) click to toggle source
# File lib/dopv/persistent_disk.rb, line 86
def <<(entry)
  append(entry)
end
Also aliased as: add
add(entry)
Alias for: <<
append(entry) click to toggle source
# File lib/dopv/persistent_disk.rb, line 69
def append(entry)
  @state_store.transaction do
    entries.each do |disk|
      if disk == entry
        raise PersistentDiskError, "Disk #{disk.name} already exists for node #{disk.node}"
      end
    end
    if entry.is_a?(Entry)
      @entries << entry
      @state_store[:data_volumes][@node_name] << entry.to_hash
    else
      @entries << Entry.new(entry)
      @state_store[:data_volumes][@node_name] << entry
    end
  end
end
delete(entry) click to toggle source
# File lib/dopv/persistent_disk.rb, line 103
def delete(entry)
  @state_store.transaction do
    index = entries.index {|stored_entry| stored_entry = entry}
    if index.nil?
      raise PersistentDiskError, "Entry update: Disk entry not found #{entry.to_s}"
    end

    @entries.delete_at(index)
    @state_store[:data_volumes][@node_name].delete_at(index)
    entry
  end
end
update(entry, attrs={}) click to toggle source
# File lib/dopv/persistent_disk.rb, line 91
def update(entry, attrs={})
  @state_store.transaction do
    index = entries.index {|stored_entry| stored_entry = entry}
    if index.nil?
      raise PersistentDiskError, "Entry update: Disk entry not found #{entry.to_s}"
    end
    @entries[index].update(attrs)
    @state_store[:data_volumes][@node_name][index] = @entries[index]
    @entries[index]
  end
end
volumes() click to toggle source
# File lib/dopv/persistent_disk.rb, line 65
def volumes
  @state_store.transaction(true) { entries }.dup
end

Private Instance Methods

entries() click to toggle source
# File lib/dopv/persistent_disk.rb, line 118
def entries
  @entries ||= @state_store[:data_volumes][@node_name].map do |raw_entry|
    symbolized_entry = Hash[raw_entry.map {|k1, v1| [k1.to_sym, v1] }]
    merged_entry = symbolized_entry.merge({:node => @node_name})
    Dopv::PersistentDisk::Entry.new(merged_entry)
  end
end