[thin_delta] Allow optional arg when using -m
This commit is contained in:
parent
93fb540bd4
commit
3a881e9513
5
CHANGES
5
CHANGES
@ -1,3 +1,8 @@
|
|||||||
|
v0.5.5
|
||||||
|
======
|
||||||
|
|
||||||
|
You may now give the --metadata_snap option to thin_delta without specifying where the snap is.
|
||||||
|
|
||||||
v0.5.1
|
v0.5.1
|
||||||
======
|
======
|
||||||
|
|
||||||
|
@ -188,10 +188,8 @@ namespace thin_provisioning {
|
|||||||
read_superblock(open_bm(path, block_manager<>::READ_ONLY, false), 0);
|
read_superblock(open_bm(path, block_manager<>::READ_ONLY, false), 0);
|
||||||
uint64_t ms = sb.metadata_snap_;
|
uint64_t ms = sb.metadata_snap_;
|
||||||
|
|
||||||
if (!ms) {
|
if (!ms)
|
||||||
cerr << "no metadata snapshot found!" << endl;
|
throw runtime_error("no metadata snapshot found!\n");
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ms;
|
return ms;
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,8 @@ namespace local {
|
|||||||
|
|
||||||
struct flags {
|
struct flags {
|
||||||
flags()
|
flags()
|
||||||
: verbose(false) {
|
: verbose(false),
|
||||||
|
find_metadata_snap(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
boost::optional<string> dev;
|
boost::optional<string> dev;
|
||||||
@ -72,17 +73,11 @@ namespace local {
|
|||||||
boost::optional<uint64_t> snap1;
|
boost::optional<uint64_t> snap1;
|
||||||
boost::optional<uint64_t> snap2;
|
boost::optional<uint64_t> snap2;
|
||||||
bool verbose;
|
bool verbose;
|
||||||
|
bool find_metadata_snap;
|
||||||
};
|
};
|
||||||
|
|
||||||
//--------------------------------
|
//--------------------------------
|
||||||
|
|
||||||
block_manager<>::ptr
|
|
||||||
open_bm(string const &path) {
|
|
||||||
block_address nr_blocks = get_nr_blocks(path);
|
|
||||||
block_manager<>::mode m = block_manager<>::READ_ONLY;
|
|
||||||
return block_manager<>::ptr(new block_manager<>(path, nr_blocks, 1, m));
|
|
||||||
}
|
|
||||||
|
|
||||||
transaction_manager::ptr
|
transaction_manager::ptr
|
||||||
open_tm(block_manager<>::ptr bm) {
|
open_tm(block_manager<>::ptr bm) {
|
||||||
space_map::ptr sm(new core_map(bm->get_nr_blocks()));
|
space_map::ptr sm(new core_map(bm->get_nr_blocks()));
|
||||||
@ -533,7 +528,7 @@ namespace local {
|
|||||||
checked_space_map::ptr data_sm;
|
checked_space_map::ptr data_sm;
|
||||||
|
|
||||||
{
|
{
|
||||||
block_manager<>::ptr bm = open_bm(*fs.dev);
|
block_manager<>::ptr bm = open_bm(*fs.dev, block_manager<>::READ_ONLY, !fs.metadata_snap);
|
||||||
transaction_manager::ptr tm = open_tm(bm);
|
transaction_manager::ptr tm = open_tm(bm);
|
||||||
|
|
||||||
sb = fs.metadata_snap ? read_superblock(bm, *fs.metadata_snap) : read_superblock(bm);
|
sb = fs.metadata_snap ? read_superblock(bm, *fs.metadata_snap) : read_superblock(bm);
|
||||||
@ -616,7 +611,7 @@ int thin_delta_main(int argc, char **argv)
|
|||||||
flags fs;
|
flags fs;
|
||||||
local::application app(basename(argv[0]));
|
local::application app(basename(argv[0]));
|
||||||
|
|
||||||
char const shortopts[] = "hVm";
|
char const shortopts[] = "hVm::";
|
||||||
option const longopts[] = {
|
option const longopts[] = {
|
||||||
{ "help", no_argument, NULL, 'h' },
|
{ "help", no_argument, NULL, 'h' },
|
||||||
{ "version", no_argument, NULL, 'V' },
|
{ "version", no_argument, NULL, 'V' },
|
||||||
@ -624,7 +619,7 @@ int thin_delta_main(int argc, char **argv)
|
|||||||
{ "snap1", required_argument, NULL, 1 },
|
{ "snap1", required_argument, NULL, 1 },
|
||||||
{ "thin2", required_argument, NULL, 2 },
|
{ "thin2", required_argument, NULL, 2 },
|
||||||
{ "snap2", required_argument, NULL, 2 },
|
{ "snap2", required_argument, NULL, 2 },
|
||||||
{ "metadata-snap", no_argument, NULL, 'm' },
|
{ "metadata-snap", optional_argument, NULL, 'm' },
|
||||||
{ "verbose", no_argument, NULL, 4 }
|
{ "verbose", no_argument, NULL, 4 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -647,7 +642,10 @@ int thin_delta_main(int argc, char **argv)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'm':
|
case 'm':
|
||||||
fs.metadata_snap = app.parse_int(optarg, "metadata snapshot block");
|
if (optarg)
|
||||||
|
fs.metadata_snap = app.parse_int(optarg, "metadata snapshot block");
|
||||||
|
else
|
||||||
|
fs.find_metadata_snap = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
@ -671,6 +669,11 @@ int thin_delta_main(int argc, char **argv)
|
|||||||
if (!fs.snap2)
|
if (!fs.snap2)
|
||||||
app.die("--snap2 not specified.");
|
app.die("--snap2 not specified.");
|
||||||
|
|
||||||
|
if (fs.find_metadata_snap) {
|
||||||
|
fs.metadata_snap = find_metadata_snap(*fs.dev);
|
||||||
|
cerr << "metadata snap = " << fs.metadata_snap << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
return delta(app, fs);
|
return delta(app, fs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user