diff options
Diffstat (limited to 'src/rbd_replay/PendingIO.hpp')
-rw-r--r-- | src/rbd_replay/PendingIO.hpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/rbd_replay/PendingIO.hpp b/src/rbd_replay/PendingIO.hpp new file mode 100644 index 00000000..3942d5f6 --- /dev/null +++ b/src/rbd_replay/PendingIO.hpp @@ -0,0 +1,64 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2014 Adam Crume <adamcrume@gmail.com> + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#ifndef _INCLUDED_RBD_REPLAY_PENDINGIO_HPP +#define _INCLUDED_RBD_REPLAY_PENDINGIO_HPP + +#include <boost/enable_shared_from_this.hpp> +#include "actions.hpp" + +/// Do not call outside of rbd_replay::PendingIO. +extern "C" +void rbd_replay_pending_io_callback(librbd::completion_t cb, void *arg); + +namespace rbd_replay { + +/** + A PendingIO is an I/O operation that has been started but not completed. +*/ +class PendingIO : public boost::enable_shared_from_this<PendingIO> { +public: + typedef boost::shared_ptr<PendingIO> ptr; + + PendingIO(action_id_t id, + ActionCtx &worker); + + ~PendingIO(); + + action_id_t id() const { + return m_id; + } + + ceph::bufferlist &bufferlist() { + return m_bl; + } + + librbd::RBD::AioCompletion &completion() { + return *m_completion; + } + +private: + void completed(librbd::completion_t cb); + + friend void ::rbd_replay_pending_io_callback(librbd::completion_t cb, void *arg); + + const action_id_t m_id; + ceph::bufferlist m_bl; + librbd::RBD::AioCompletion *m_completion; + ActionCtx &m_worker; +}; + +} + +#endif |