[sheepdog] [PATCH] sheep: exit when vdi bitmap collection is failed
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Mon Oct 20 10:28:52 CEST 2014
In our test environment, we found an inconsistency of vdi bitmap
caused by failed colleciton process. The inconsistency is really
critical so calling panic() is much safer.
Cc: Saeki Masaki <saeki.masaki at po.ntts.co.jp>
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
sheep/group.c | 33 ++++++++++++++++++++++++---------
1 file changed, 24 insertions(+), 9 deletions(-)
diff --git a/sheep/group.c b/sheep/group.c
index 14c106a..f1104c1 100644
--- a/sheep/group.c
+++ b/sheep/group.c
@@ -525,9 +525,19 @@ static void do_get_vdis(struct work *work)
sd_debug("try to get vdi bitmap from %s",
node_to_str(&w->joined));
ret = get_vdis_from(&w->joined);
- if (ret != SD_RES_SUCCESS)
- sd_alert("failed to get vdi bitmap from %s",
- node_to_str(&w->joined));
+ if (ret != SD_RES_SUCCESS) {
+ if (sys->cinfo.status == SD_STATUS_OK)
+ /*
+ * SD_STATUS_OK means enough zones are gathered,
+ * so failed vdi bitmap collection isn't
+ * critical
+ */
+ sd_alert("failed to get vdi bitmap from %s",
+ node_to_str(&w->joined));
+ else
+ panic("failed to get vdi bitmap from %s",
+ node_to_str(&w->joined));
+ }
return;
}
@@ -538,12 +548,17 @@ static void do_get_vdis(struct work *work)
sd_debug("try to get vdi bitmap from %s", node_to_str(n));
ret = get_vdis_from(n);
- if (ret != SD_RES_SUCCESS) {
- /* try to read from another node */
- sd_alert("failed to get vdi bitmap from %s",
- node_to_str(n));
- continue;
- }
+ if (ret != SD_RES_SUCCESS)
+ /*
+ * It means this sheep has missing vdi bitmap, and
+ * reading bitmap from other sheep cannot be guaranteed
+ * to success.
+ *
+ * Inconsistency of vdi bitmap between nodes is deathly
+ * critical, so dying here is safer.
+ */
+ panic("failed to get vdi bitmap from %s",
+ node_to_str(n));
/*
* TODO: If the target node has a valid vdi bitmap (the node has
--
1.8.3.2
More information about the sheepdog
mailing list