[sheepdog] [PATCH v2 7/7] dog: add a new subcommand "dog vdi lock force-unlock" for unlocking VDI forcibly
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Wed Jul 30 09:24:42 CEST 2014
In a case of sudden death of qemu, tgt, and sheep, admins must unlock
locked VDIs manually. This patch provides a new subcommand "dog vdi
lock force-unlock" for this purpose.
Correct recovery process is like below:
1. unlock locked VDIs
2. repair them with "dog vdi check"
3. launch clients for the VDIs
Cc: Fabian Zimmermann <dev.faz at gmail.com>
Cc: Valerio Pachera <sirio81 at gmail.com>
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
dog/vdi.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/dog/vdi.c b/dog/vdi.c
index 77d3661..13b0ab8 100644
--- a/dog/vdi.c
+++ b/dog/vdi.c
@@ -2750,8 +2750,32 @@ out:
return ret;
}
+static int lock_force_unlock(int argc, char **argv)
+{
+ struct sd_req hdr;
+ const char *vdiname = argv[optind];
+ struct vdi_tree *vdi;
+
+ init_tree();
+ if (parse_vdi(construct_vdi_tree, SD_INODE_HEADER_SIZE, NULL) < 0)
+ return EXIT_SYSFAIL;
+
+ vdi = find_vdi_from_root_with_name(vdiname);
+ if (!vdi) {
+ sd_err("VDI: %s not found", vdiname);
+ return EXIT_SYSFAIL;
+ }
+
+ sd_init_req(&hdr, SD_OP_RELEASE_VDI);
+ hdr.vdi.base_vdi_id = vdi->vid;
+
+ return dog_exec_req(&sd_nid, &hdr, NULL);
+}
+
static struct subcommand vdi_lock_cmd[] = {
{"list", NULL, NULL, "list locked VDIs", NULL, 0, lock_list},
+ {"force-unlock", "<vdiname>", NULL, "unlock locked VDI forcibly", NULL, 0,
+ lock_force_unlock},
{NULL},
};
--
1.8.3.2
More information about the sheepdog
mailing list