BeesRoots::scan_mode_ntoa(BeesRoots::ScanMode mode)
{
static const bits_ntoa_table table[] = {
- NTOA_TABLE_ENTRY_ENUM(SCAN_MODE_ZERO),
- NTOA_TABLE_ENTRY_ENUM(SCAN_MODE_ONE),
- NTOA_TABLE_ENTRY_ENUM(SCAN_MODE_TWO),
- NTOA_TABLE_ENTRY_ENUM(SCAN_MODE_COUNT),
+ { .n = SCAN_MODE_LOCKSTEP, .mask = ~0ULL, .a = "lockstep" },
+ { .n = SCAN_MODE_INDEPENDENT, .mask = ~0ULL, .a = "independent" },
+ { .n = SCAN_MODE_SEQUENTIAL, .mask = ~0ULL, .a = "sequential" },
NTOA_TABLE_ENTRY_END()
};
return bits_ntoa(mode, table);
switch (m_scan_mode) {
- case SCAN_MODE_ZERO: {
- // Scan the same inode/offset tuple in each subvol (good for snapshots)
+ case SCAN_MODE_LOCKSTEP: {
+ // Scan the same inode/offset tuple in each subvol (bad for locking)
BeesFileRange first_range;
shared_ptr<BeesCrawl> first_crawl;
for (auto i : crawl_map_copy) {
break;
}
- case SCAN_MODE_ONE: {
+ case SCAN_MODE_INDEPENDENT: {
// Scan each subvol one extent at a time (good for continuous forward progress)
size_t batch_count = 0;
for (auto i : crawl_map_copy) {
break;
}
- case SCAN_MODE_TWO: {
+ case SCAN_MODE_SEQUENTIAL: {
// Scan oldest crawl first (requires maximum amount of temporary space)
vector<shared_ptr<BeesCrawl>> crawl_vector;
for (auto i : crawl_map_copy) {
Fd open_root_ino(const BeesFileId &bfi) { return open_root_ino(bfi.root(), bfi.ino()); }
bool is_root_ro(uint64_t root);
- // TODO: think of better names for these.
- // or TODO: do extent-tree scans instead
+ // TODO: do extent-tree scans instead
enum ScanMode {
- SCAN_MODE_ZERO,
- SCAN_MODE_ONE,
- SCAN_MODE_TWO,
+ SCAN_MODE_LOCKSTEP,
+ SCAN_MODE_INDEPENDENT,
+ SCAN_MODE_SEQUENTIAL,
SCAN_MODE_COUNT, // must be last
};
void set_workaround_btrfs_send(bool do_avoid);
private:
- ScanMode m_scan_mode = SCAN_MODE_ZERO;
+ ScanMode m_scan_mode = SCAN_MODE_LOCKSTEP;
static string scan_mode_ntoa(ScanMode new_mode);
};