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....@gmail.com>
Cc: Valerio Pachera <siri...@gmail.com>
Signed-off-by: Hitoshi Mitake <mitake.hito...@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

-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to