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