class Backup::Database::Riak

Attributes

node[RW]

Node is the node from which to perform the backup. Default: riak@127.0.0.1

user[RW]

Username for the riak instance Default: riak

Public Class Methods

new(model, database_id = nil, &block) click to toggle source
Calls superclass method Backup::Database::Base::new
# File lib/backup/database/riak.rb, line 19
def initialize(model, database_id = nil, &block)
  super
  instance_eval(&block) if block_given?

  @node   ||= "riak@127.0.0.1"
  @cookie ||= "riak"
  @user   ||= "riak"
end

Public Instance Methods

perform!() click to toggle source

Performs the dump using ‘riak-admin backup`.

This will be stored in the final backup package as <trigger>/databases/-

Calls superclass method Backup::Database::Base#perform!
# File lib/backup/database/riak.rb, line 33
def perform!
  super

  dump_file = File.join(dump_path, dump_filename)
  with_riak_owned_dump_path do
    run("#{riakadmin} backup #{node} #{cookie} '#{dump_file}' node")
  end

  if model.compressor
    model.compressor.compress_with do |command, ext|
      dump_file << "-#{node}" # `riak-admin` appends `node` to the filename.
      run("#{command} -c '#{dump_file}' > '#{dump_file + ext}'")
      FileUtils.rm_f(dump_file)
    end
  end

  log!(:finished)
end

Private Instance Methods

riakadmin() click to toggle source

‘riak-admin` must be run as the riak user. It will do this itself, but without `-n` and emits a message on STDERR.

# File lib/backup/database/riak.rb, line 74
def riakadmin
  "#{utility(:sudo)} -n -u #{user} #{utility("riak-admin")}"
end
with_riak_owned_dump_path() { || ... } click to toggle source

The ‘riak-admin backup` command is run as the riak user, so user must have write priviledges to the dump_path.

Note that the riak user must also have access to dump_path. This means Backup’s tmp_path can not be under the home directory of the user running Backup, since the absence of the execute bit on their home directory would deny user access.

# File lib/backup/database/riak.rb, line 62
def with_riak_owned_dump_path
  run "#{utility(:sudo)} -n #{utility(:chown)} #{user} '#{dump_path}'"
  yield
ensure
  # reclaim ownership
  run "#{utility(:sudo)} -n #{utility(:chown)} -R " \
    "#{Config.user} '#{dump_path}'"
end