class Backup::Splitter
Attributes
Public Class Methods
# File lib/backup/splitter.rb, line 9 def initialize(model, chunk_size, suffix_length) @package = model.package @chunk_size = chunk_size @suffix_length = suffix_length end
Public Instance Methods
This is called as part of the procedure used to build the final backup package file(s). It yields it’s portion of the command line for this procedure, which will split the data being piped into it into multiple files, based on the @chunk_size, using a suffix length as specified by @suffix_length. Once the packaging procedure is complete, it will return and @package.chunk_suffixes will be set based on the resulting files.
# File lib/backup/splitter.rb, line 23 def split_with Logger.info "Splitter configured with a chunk size of #{ chunk_size }MB " + "and suffix length of #{ suffix_length }." yield split_command after_packaging end
Private Instance Methods
Finds the resulting files from the packaging procedure and stores an Array of suffixes used in @package.chunk_suffixes. If the @chunk_size was never reached and only one file was written, that file will be suffixed with ‘-aa’ (or -a; -aaa; etc depending upon suffix_length
). In which case, it will simply remove the suffix from the filename.
# File lib/backup/splitter.rb, line 48 def after_packaging suffixes = chunk_suffixes first_suffix = 'a' * suffix_length if suffixes == [first_suffix] FileUtils.mv( File.join(Config.tmp_path, "#{ package.basename }-#{ first_suffix }"), File.join(Config.tmp_path, package.basename) ) else package.chunk_suffixes = suffixes end end
Returns an array of suffixes for each chunk, in alphabetical order. For example: [aa, ab, ac, ad, ae] or [aaa, aab, aac aad]
# File lib/backup/splitter.rb, line 64 def chunk_suffixes chunks.map {|chunk| File.extname(chunk).split('-').last }.sort end
Returns an array of full paths to the backup chunks. Chunks are sorted in alphabetical order.
# File lib/backup/splitter.rb, line 71 def chunks Dir[File.join(Config.tmp_path, package.basename + '-*')].sort end
The ‘split` command reads from $stdin and will store it’s output in multiple files, based on @chunk_size and @suffix_length, using the full path to the final @package.basename, plus a ‘-’ separator as the ‘prefix`.
# File lib/backup/splitter.rb, line 36 def split_command "#{ utility(:split) } -a #{ suffix_length } -b #{ chunk_size }m - " + "'#{ File.join(Config.tmp_path, package.basename + '-') }'" end