[sheepdog] [PATCH 1/2] collie: add 'collie vdi cache flush' to flush dirty cache

levin li levin108 at gmail.com
Sat Dec 15 12:37:41 CET 2012


From: levin li <xingke.lwp at taobao.com>

This command can flush cache of an VDI in specified node, which is
useful when QEMU terminates accidentally, left the dirty cache data
unflushed, this command helps us to flush and delete this cache into
the cluster.

Signed-off-by: levin li <xingke.lwp at taobao.com>
---
 collie/vdi.c |   51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/collie/vdi.c b/collie/vdi.c
index 108cb1d..9adb051 100644
--- a/collie/vdi.c
+++ b/collie/vdi.c
@@ -1857,6 +1857,54 @@ out:
 	return ret;
 }
 
+static int vdi_cache_flush(int argc, char **argv)
+{
+	const char *vdiname = argv[optind++];
+	struct sd_req hdr;
+	uint32_t vid;
+	int ret = EXIT_SUCCESS;
+
+	ret = find_vdi_name(vdiname, vdi_cmd_data.snapshot_id,
+			    vdi_cmd_data.snapshot_tag, &vid, 0);
+	if (ret < 0) {
+		fprintf(stderr, "Failed to open VDI %s\n", vdiname);
+		ret = EXIT_FAILURE;
+		goto out;
+	}
+
+	sd_init_req(&hdr, SD_OP_FLUSH_DEL_CACHE);
+	hdr.obj.oid = vid_to_vdi_oid(vid);
+
+	ret = send_light_req(&hdr, sdhost, sdport);
+	if (ret) {
+		fprintf(stderr, "failed to execute request\n");
+		return EXIT_FAILURE;
+	}
+out:
+	return ret;
+}
+
+static struct subcommand vdi_cache_cmd[] = {
+	{"flush", NULL, NULL, "flush the cache of the vdi specified.",
+	 NULL, 0, vdi_cache_flush},
+	{NULL,},
+};
+
+static int vdi_cache(int argc, char **argv)
+{
+	int i;
+
+	for (i = 0; vdi_cache_cmd[i].name; i++) {
+		if (!strcmp(vdi_cache_cmd[i].name, argv[3])) {
+			optind ++;
+			return vdi_cache_cmd[i].fn(argc, argv);
+		}
+	}
+
+	subcommand_usage(argv[1], argv[2], EXIT_FAILURE);
+	return EXIT_FAILURE;
+}
+
 static struct subcommand vdi_cmd[] = {
 	{"check", "<vdiname>", "saph", "check and repair image's consistency",
 	 NULL, SUBCMD_FLAG_NEED_NODELIST|SUBCMD_FLAG_NEED_THIRD_ARG,
@@ -1912,6 +1960,9 @@ static struct subcommand vdi_cmd[] = {
 	{"restore", "<vdiname> <backup>", "saph", "restore snapshot images from a backup",
 	 NULL, SUBCMD_FLAG_NEED_NODELIST|SUBCMD_FLAG_NEED_THIRD_ARG,
 	 vdi_restore, vdi_options},
+	{"cache", NULL, "saph", "See 'collie vdi cache' for more information\n",
+	 vdi_cache_cmd, SUBCMD_FLAG_NEED_THIRD_ARG,
+	 vdi_cache, vdi_options},
 	{NULL,},
 };
 
-- 
1.7.9.5




More information about the sheepdog mailing list