![Ilya Dryomov](/assets/img/avatar_default.png)
This adds support and switches rbd to a new, more reliable version of watch/notify protocol. As with the OSD client update, this is mostly about getting the right structures linked into the right places so that reconnects are properly sent when needed. watch/notify v2 also requires sending regular pings to the OSDs - send_linger_ping(). A major change from the old watch/notify implementation is the introduction of ceph_osd_linger_request - linger requests no longer piggy back on ceph_osd_request. ceph_osd_event has been merged into ceph_osd_linger_request. All the details are now hidden within libceph, the interface consists of a simple pair of watch/unwatch functions and ceph_osdc_notify_ack(). ceph_osdc_watch() does return ceph_osd_linger_request, but only to keep the lifetime management simple. ceph_osdc_notify_ack() accepts an optional data payload, which is relayed back to the notifier. Portions of this patch are loosely based on work by Douglas Fuller <dfuller@redhat.com> and Mike Christie <michaelc@cs.wisc.edu>. Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
61 lines
1.1 KiB
C
61 lines
1.1 KiB
C
/*
|
|
* Ceph string constants
|
|
*/
|
|
#include <linux/module.h>
|
|
#include <linux/ceph/types.h>
|
|
|
|
const char *ceph_entity_type_name(int type)
|
|
{
|
|
switch (type) {
|
|
case CEPH_ENTITY_TYPE_MDS: return "mds";
|
|
case CEPH_ENTITY_TYPE_OSD: return "osd";
|
|
case CEPH_ENTITY_TYPE_MON: return "mon";
|
|
case CEPH_ENTITY_TYPE_CLIENT: return "client";
|
|
case CEPH_ENTITY_TYPE_AUTH: return "auth";
|
|
default: return "unknown";
|
|
}
|
|
}
|
|
|
|
const char *ceph_osd_op_name(int op)
|
|
{
|
|
switch (op) {
|
|
#define GENERATE_CASE(op, opcode, str) case CEPH_OSD_OP_##op: return (str);
|
|
__CEPH_FORALL_OSD_OPS(GENERATE_CASE)
|
|
#undef GENERATE_CASE
|
|
default:
|
|
return "???";
|
|
}
|
|
}
|
|
|
|
const char *ceph_osd_watch_op_name(int o)
|
|
{
|
|
switch (o) {
|
|
case CEPH_OSD_WATCH_OP_UNWATCH:
|
|
return "unwatch";
|
|
case CEPH_OSD_WATCH_OP_WATCH:
|
|
return "watch";
|
|
case CEPH_OSD_WATCH_OP_RECONNECT:
|
|
return "reconnect";
|
|
case CEPH_OSD_WATCH_OP_PING:
|
|
return "ping";
|
|
default:
|
|
return "???";
|
|
}
|
|
}
|
|
|
|
const char *ceph_osd_state_name(int s)
|
|
{
|
|
switch (s) {
|
|
case CEPH_OSD_EXISTS:
|
|
return "exists";
|
|
case CEPH_OSD_UP:
|
|
return "up";
|
|
case CEPH_OSD_AUTOOUT:
|
|
return "autoout";
|
|
case CEPH_OSD_NEW:
|
|
return "new";
|
|
default:
|
|
return "???";
|
|
}
|
|
}
|