[Sheepdog] [PATCH 4/4] sheep: use local cluster driver when corosync is not available
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Sat Oct 29 11:56:51 CEST 2011
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
sheep/cluster.h | 11 +++++++++++
sheep/group.c | 14 +++++++-------
sheep/sheep.c | 7 +------
3 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/sheep/cluster.h b/sheep/cluster.h
index 11e2922..e10e897 100644
--- a/sheep/cluster.h
+++ b/sheep/cluster.h
@@ -129,6 +129,17 @@ static void __attribute__((constructor)) regist_ ## driver(void) { \
#define FOR_EACH_CLUSTER_DRIVER(driver) \
list_for_each_entry(driver, &cluster_drivers, list)
+static inline struct cluster_driver *find_cdrv(const char *name)
+{
+ struct cluster_driver *cdrv;
+
+ FOR_EACH_CLUSTER_DRIVER(cdrv) {
+ if (strcmp(cdrv->name, name) == 0)
+ return cdrv;
+ }
+
+ return NULL;
+}
static inline char *node_to_str(struct sheepdog_node_list_entry *id)
{
diff --git a/sheep/group.c b/sheep/group.c
index d9bf201..b629654 100644
--- a/sheep/group.c
+++ b/sheep/group.c
@@ -1260,7 +1260,6 @@ oom:
int create_cluster(int port, int64_t zone)
{
int fd, ret;
- struct cluster_driver *cdrv;
struct cdrv_handlers handlers = {
.join_handler = sd_join_handler,
.leave_handler = sd_leave_handler,
@@ -1268,12 +1267,13 @@ int create_cluster(int port, int64_t zone)
};
if (!sys->cdrv) {
- FOR_EACH_CLUSTER_DRIVER(cdrv) {
- if (strcmp(cdrv->name, "corosync") == 0) {
- dprintf("use corosync driver as default\n");
- sys->cdrv = cdrv;
- break;
- }
+ sys->cdrv = find_cdrv("corosync");
+ if (sys->cdrv)
+ dprintf("use corosync cluster driver as default\n");
+ else {
+ /* corosync cluster driver is not compiled */
+ sys->cdrv = find_cdrv("local");
+ dprintf("use local cluster driver as default\n");
}
}
diff --git a/sheep/sheep.c b/sheep/sheep.c
index ad2e515..f7f9035 100644
--- a/sheep/sheep.c
+++ b/sheep/sheep.c
@@ -142,12 +142,7 @@ int main(int argc, char **argv)
sys->this_node.zone = zone;
break;
case 'c':
- FOR_EACH_CLUSTER_DRIVER(cdrv) {
- if (strcmp(cdrv->name, optarg) == 0) {
- sys->cdrv = cdrv;
- break;
- }
- }
+ sys->cdrv = find_cdrv(optarg);
if (!sys->cdrv) {
printf("No such cluster driver, %s\n", optarg);
--
1.7.2.5
More information about the sheepdog
mailing list