[Sheepdog] [PATCH v2 0/6] introduce cluster driver
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Tue Oct 4 14:38:52 CEST 2011
This patchset introduces a cluster driver, and moves all corosync
stuff to it. The benefit of this abstraction is that we can support
other coordination systems such as ZooKeeper. I like the current
fully symmetric architecture, but corosync has a problem in its
scalability.
The interface of the cluster driver is as follows.
struct cluster_driver {
const char *name;
int (*init)(struct cdrv_handlers *handlers, struct sheepid *myid);
int (*join)(void);
int (*leave)(void);
int (*notify)(void *msg, size_t msg_len);
int (*dispatch)(void);
};
This is a thin wrapper of corosync. join() and leave() are used to
join/leave the cluster, and notify() is a multicasting to all nodes.
The sequence of their events must be totally ordered in the cluster.
This interface is designed not to affect the current Sheepdog codes so
much. In future, I'd like to add more features to the cluster driver
and simplify sheep/group.c. But, for now, this interface would be a
good start point. In addition, I believe it is pretty easy to
implement a ZooKeeper driver with this interface.
Changes from v1 to v2 are:
- split patches to make them easy to read
- address Yibin's comments
MORITA Kazutaka (6):
sheep: define cluster driver interface
sheep: remove corosync nodeid
cluster: add corosync driver
sheep: make first_cpg_node local
sheep: use cluster driver
cluster: add check for cluster driver definition
sheep/Makefile.am | 2 +-
sheep/cluster.h | 160 ++++++++++++++
sheep/cluster/corosync.c | 260 ++++++++++++++++++++++
sheep/group.c | 536 +++++++++++++++++++---------------------------
sheep/sdnet.c | 2 +
sheep/sheep.c | 24 ++-
sheep/sheep_priv.h | 16 +-
7 files changed, 671 insertions(+), 329 deletions(-)
create mode 100644 sheep/cluster.h
create mode 100644 sheep/cluster/corosync.c
--
1.7.2.5
More information about the sheepdog
mailing list