From ef8e94b22c41dcc8958e3fdb77c2a4e8aaa8071c Mon Sep 17 00:00:00 2001 From: Ming-Hung Tsai Date: Tue, 2 Jun 2020 19:33:50 +0800 Subject: [PATCH] [thin_generate_metadata] Support setting transaction id and metadata snapshots --- thin-provisioning/thin_generate_metadata.cc | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/thin-provisioning/thin_generate_metadata.cc b/thin-provisioning/thin_generate_metadata.cc index 0e9e65c..e535273 100644 --- a/thin-provisioning/thin_generate_metadata.cc +++ b/thin-provisioning/thin_generate_metadata.cc @@ -40,6 +40,9 @@ namespace { METADATA_OP_CREATE_THIN, METADATA_OP_CREATE_SNAP, METADATA_OP_DELETE_DEV, + METADATA_OP_SET_TRANSACTION_ID, + METADATA_OP_RESERVE_METADATA_SNAP, + METADATA_OP_RELEASE_METADATA_SNAP, METADATA_OP_LAST }; @@ -57,6 +60,7 @@ namespace { block_address nr_data_blocks; optional dev_id; optional origin; + optional trans_id; optional output; }; @@ -88,6 +92,11 @@ namespace { return false; } + if (op == METADATA_OP_SET_TRANSACTION_ID && !trans_id) { + cerr << "no transaction id provided." << endl; + return false; + } + return true; } @@ -115,6 +124,15 @@ namespace { case flags::METADATA_OP_DELETE_DEV: pool->del(*fs.dev_id); break; + case flags::METADATA_OP_SET_TRANSACTION_ID: + pool->set_transaction_id(*fs.trans_id); + break; + case flags::METADATA_OP_RESERVE_METADATA_SNAP: + pool->reserve_metadata_snap(); + break; + case flags::METADATA_OP_RELEASE_METADATA_SNAP: + pool->release_metadata_snap(); + break; default: break; } @@ -142,6 +160,9 @@ thin_generate_metadata_cmd::usage(std::ostream &out) const << " {--create-thin} \n" << " {--create-snap} \n" << " {--delete} \n" + << " {--reserve-metadata-snap}\n" + << " {--release-metadata-snap}\n" + << " {--set-transaction-id} \n" << " {--data-block-size} \n" << " {--nr-data-blocks} \n" << " {--origin} \n" @@ -163,6 +184,9 @@ thin_generate_metadata_cmd::run(int argc, char **argv) { "create-thin", required_argument, NULL, 3 }, { "create-snap", required_argument, NULL, 4 }, { "delete", required_argument, NULL, 5 }, + { "set-transaction-id", required_argument, NULL, 6 }, + { "reserve-metadata-snap", no_argument, NULL, 7 }, + { "release-metadata-snap", no_argument, NULL, 8 }, { "data-block-size", required_argument, NULL, 101 }, { "nr-data-blocks", required_argument, NULL, 102 }, { "origin", required_argument, NULL, 401 }, @@ -203,6 +227,19 @@ thin_generate_metadata_cmd::run(int argc, char **argv) fs.dev_id = parse_uint64(optarg, "device id"); break; + case 6: + fs.op = flags::METADATA_OP_SET_TRANSACTION_ID; + fs.trans_id = parse_uint64(optarg, "transaction id"); + break; + + case 7: + fs.op = flags::METADATA_OP_RESERVE_METADATA_SNAP; + break; + + case 8: + fs.op = flags::METADATA_OP_RELEASE_METADATA_SNAP; + break; + case 101: fs.data_block_size = parse_uint64(optarg, "data block size"); break;