def cleanup_expired_snapshots(datasets, interval, keep, should_destroy_zero_sized_snapshots)
snapshots = Zfs::Snapshot.list.select { |snapshot| snapshot.name.include?(snapshot_prefix(interval)) }
dataset_snapshots = group_snapshots_into_datasets(snapshots, datasets['included'] + datasets['excluded'])
dataset_snapshots.select! { |dataset, snapshots| datasets['included'].include?(dataset) }
if should_destroy_zero_sized_snapshots
dataset_snapshots = datasets_destroy_zero_sized_snapshots(dataset_snapshots)
end
dataset_snapshots.each do |dataset, snapshots|
dataset_snapshots[dataset].shift(keep)
end
threads = []
dataset_snapshots.values.flatten.each do |snapshot|
threads << Thread.new do
snapshot.destroy
end
threads.last.join unless $use_threads
end
threads.each { |th| th.join }
end