class Snapsync::Sync
Single-target synchronization
Attributes
config[R]
target[R]
Public Class Methods
new(config, target, autoclean: nil)
click to toggle source
# File lib/snapsync/sync.rb, line 8 def initialize(config, target, autoclean: nil) @config = config @target = target @autoclean = if autoclean.nil? then target.autoclean? else autoclean end end
Public Instance Methods
autoclean?()
click to toggle source
Whether the target should be cleaned after synchronization.
This is determined either by {#autoclean?} if {.new} was called with true or false, or by the target's own autoclean flag if {.new} was called with nil
# File lib/snapsync/sync.rb, line 22 def autoclean? @autoclean end
remove_partially_synchronized_snapshots()
click to toggle source
# File lib/snapsync/sync.rb, line 34 def remove_partially_synchronized_snapshots target.each_snapshot_raw do |path, snapshot, error| next if !error && !snapshot.partial? Snapsync.info "Removing partial snapshot at #{path}" begin if (path + "snapshot").exist? Btrfs.run("subvolume", "delete", (path + "snapshot").to_s) elsif (path + "snapshot.partial").exist? Btrfs.run("subvolume", "delete", (path + "snapshot.partial").to_s) end rescue Btrfs::Error => e Snapsync.warn "failed to remove snapshot at #{path}, keeping the rest of the snapshot" Snapsync.warn e.message next end path.rmtree Snapsync.info "Flushing data to disk" begin Btrfs.run("subvolume", "sync", path.to_s) rescue Btrfs::Error end end end
run()
click to toggle source
# File lib/snapsync/sync.rb, line 60 def run if autoclean? remove_partially_synchronized_snapshots end sync if autoclean? if target.cleanup Snapsync.info "running cleanup for #{target.dir}" target.cleanup.cleanup(target) else Snapsync.info "#{target.sync_policy.class.name} policy set, no cleanup to do for #{target.dir}" end else Snapsync.info "autoclean not set on #{target.dir}" end end
sync()
click to toggle source
The method that performs synchronization
One usually wants to call {#run}, which also takes care of running cleanup if {#autoclean?} is true
# File lib/snapsync/sync.rb, line 30 def sync LocalSync.new(config, target).sync end