]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
rbdmap: per-device post-map/pre-unmap hooks 2095/head
authorDmitry Smirnov <onlyjob@member.fsf.org>
Fri, 11 Jul 2014 19:31:15 +0000 (05:31 +1000)
committerDmitry Smirnov <onlyjob@member.fsf.org>
Fri, 11 Jul 2014 20:17:22 +0000 (06:17 +1000)
commitc9e1e82d3fa1c2123af8ed2f173ce763ad55a279
tree24a821de68794c6fc678e5c9a4ca6ab6a0a5da51
parentf9d0e8ff10aee4c543a1b6a4494be122a52b5e9c
rbdmap: per-device post-map/pre-unmap hooks

There are cases when automatic (un-)mounting of file system on RBD is not
enough. Some services may need to be started when RBD device becomes
available (mapped) as well as it may be desirable to stop services in order
to release file system before unmapping RBD device.

File system(s) on RBD is not the only use case scenario. RBD devices may be
used as block devices in which case `/etc/fstab` is not sufficient to
perform action upon mapping RBD device. A handler script (hook) can be
useful to properly release RBD device before unmapping, etc.

Pre-unmap hooks can be important for clean shut down and for re-exporting
RBD device(s) as (iSCSI,AoE,DRBD) etc.

This commit introduces support for per-device hooks to perform per-device
post-map/pre-unmap actions. If hook named like "poolname/imagename" (same
as in `/etc/ceph/rbdmap` file) is found in

    /etc/ceph/rbd.d/poolname/imagename

it is executed as

    /etc/ceph/rbd.d/poolname/imagename map poolname/imagename

following after attempt to mount file system (if relevant `fstab` entry
exist) following mapping of corresponding RBD device.

Before un-mounting file system and un-mapping RBD device hook is called as
follows:

    /etc/ceph/rbd.d/poolname/imagename unmap poolname/imagename

Second argument is intentional to allow multiple RBD devices to share the
same hook (symlinked under different names).

Sample hook to use RBD device as "mdadm" hot spare may look like this:

~~~~
DEV="$2"
case "$1" in
    "map")
        mdadm /dev/md2 --add --write-mostly "${DEV}"
    ;;
    "unmap")
        mdadm /dev/md2 --fail "${DEV}"
        sleep 2
        mdadm /dev/md2 --remove "${DEV}"
    ;;
esac
~~~~

Signed-off-by: Dmitry Smirnov <onlyjob@member.fsf.org>
src/init-rbdmap