librados: add symbol versioning to the C++ API

The future goal would be to change the version for each Ceph major
release to ensure C++ applications will need to be recompiled against
the librados C++ API since we don't guarentee ABI stability.

Fixes: https://tracker.ceph.com/issues/38177
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
This commit is contained in:
Jason Dillaman 2019-02-04 16:13:45 -05:00
parent 7bf6b5ee12
commit d2b1ab49f5
51 changed files with 156 additions and 216 deletions

View File

@ -1868,6 +1868,7 @@ fi
%{_includedir}/rados/crc32c.h
%{_includedir}/rados/inline_memory.h
%{_includedir}/rados/librados.hpp
%{_includedir}/rados/librados_fwd.hpp
%{_includedir}/rados/page.h
%{_includedir}/rados/rados_types.hpp

4
debian/control vendored
View File

@ -864,7 +864,7 @@ Description: Meta-package for python libraries for the Ceph libraries
Package: python-rados
Architecture: linux-any
Section: python
Depends: librados2 | librados2
Depends: librados2
${misc:Depends},
${python:Depends},
${shlibs:Depends},
@ -898,7 +898,7 @@ Description: Python 2 libraries for the Ceph librados library
Package: python3-rados
Architecture: linux-any
Section: python
Depends: librados2 | librados2,
Depends: librados2,
${misc:Depends},
${python3:Depends},
${shlibs:Depends},

View File

@ -3,5 +3,6 @@ usr/include/rados/buffer_fwd.h
usr/include/rados/crc32c.h
usr/include/rados/inline_memory.h
usr/include/rados/librados.hpp
usr/include/rados/librados_fwd.hpp
usr/include/rados/page.h
usr/include/rados/rados_types.hpp

View File

@ -2,13 +2,9 @@
#define CEPH_CLS_CAS_CLIENT_H
#include "include/types.h"
#include "include/rados/librados_fwd.hpp"
#include "common/hobject.h"
namespace librados {
class ObjectWriteOperation;
class IoCtx;
}
void cls_chunk_refcount_get(librados::ObjectWriteOperation& op, const hobject_t& soid);
void cls_chunk_refcount_put(librados::ObjectWriteOperation& op, const hobject_t& soid);
void cls_chunk_refcount_set(librados::ObjectWriteOperation& op, set<hobject_t>& refs);

View File

@ -1,11 +1,9 @@
#include "include/rados/librados_fwd.hpp"
#include "mds/mdstypes.h"
#include "cls_cephfs.h"
class AccumulateArgs;
namespace librados {
class IoCtx;
}
class ClsCephFSClient
{

View File

@ -4,16 +4,12 @@
#ifndef CEPH_CLS_JOURNAL_CLIENT_H
#define CEPH_CLS_JOURNAL_CLIENT_H
#include "include/rados/librados_fwd.hpp"
#include "cls/journal/cls_journal_types.h"
#include <set>
#include <boost/optional.hpp>
class Context;
namespace librados {
class IoCtx;
class ObjectWriteOperation;
class ObjectReadOperation;
}
namespace cls {
namespace journal {

View File

@ -6,16 +6,9 @@
#include <chrono>
#include "include/rados/librados_fwd.hpp"
#include "cls/lock/cls_lock_types.h"
namespace librados {
class AioCompletion;
class ObjectWriteOperation;
class IoCtx;
class ObjectReadOperation;
class ObjectOperation;
}
namespace rados {
namespace cls {
namespace lock {

View File

@ -1,14 +1,9 @@
#ifndef CEPH_CLS_LOG_CLIENT_H
#define CEPH_CLS_LOG_CLIENT_H
#include "include/rados/librados_fwd.hpp"
#include "cls_log_types.h"
namespace librados {
class ObjectWriteOperation;
class ObjectReadOperation;
class IoCtx;
}
/*
* log objclass
*/

View File

@ -4,10 +4,6 @@
#include "include/rados/librados.hpp"
namespace librados {
class IoCtx;
}
namespace cls_lua_client {
int exec(librados::IoCtx& ioctx, const std::string& oid,
const std::string& script, const std::string& handler,

View File

@ -15,12 +15,9 @@
#ifndef CEPH_LIBRBD_CLS_NUMOPS_CLIENT_H
#define CEPH_LIBRBD_CLS_NUMOPS_CLIENT_H
#include "include/rados/librados_fwd.hpp"
#include <string>
namespace librados {
class IoCtx;
}
namespace rados {
namespace cls {
namespace numops {

View File

@ -4,13 +4,9 @@
#ifndef CEPH_CLS_OTP_CLIENT_H
#define CEPH_CLS_OTP_CLIENT_H
#include "include/rados/librados_fwd.hpp"
#include "cls/otp/cls_otp_types.h"
namespace librados {
class ObjectWriteOperation;
class IoCtx;
}
namespace rados {
namespace cls {
namespace otp {

View File

@ -9,14 +9,9 @@
#include "common/bit_vector.hpp"
#include "common/snap_types.h"
#include "include/types.h"
#include "include/rados/librados_fwd.hpp"
class Context;
namespace librados {
class IoCtx;
class ObjectOperation;
class ObjectReadOperation;
class ObjectWriteOperation;
}
namespace librbd {
namespace cls_client {

View File

@ -1,13 +1,9 @@
#ifndef CEPH_CLS_REFCOUNT_CLIENT_H
#define CEPH_CLS_REFCOUNT_CLIENT_H
#include "include/rados/librados_fwd.hpp"
#include "include/types.h"
namespace librados {
class ObjectWriteOperation;
class IoCtx;
}
/*
* refcount objclass
*

View File

@ -8,12 +8,6 @@
#include "cls_timeindex_ops.h"
namespace librados {
class ObjectWriteOperation;
class ObjectReadOperation;
class IoCtx;
}
/**
* timeindex objclass
*/

View File

@ -4,15 +4,10 @@
#ifndef CEPH_CLS_USER_CLIENT_H
#define CEPH_CLS_USER_CLIENT_H
#include "include/rados/librados_fwd.hpp"
#include "cls_user_ops.h"
#include "common/RefCountedObj.h"
namespace librados {
class ObjectWriteOperation;
class ObjectReadOperation;
class IoCtx;
}
class RGWGetUserHeader_CB : public RefCountedObject {
public:
~RGWGetUserHeader_CB() override {}

View File

@ -1,15 +1,9 @@
#ifndef CEPH_CLS_VERSION_CLIENT_H
#define CEPH_CLS_VERSION_CLIENT_H
#include "include/rados/librados_fwd.hpp"
#include "cls_version_ops.h"
namespace librados {
class ObjectWriteOperation;
class ObjectReadOperation;
class ObjectOperation;
class IoCtx;
}
/*
* version objclass
*/

View File

@ -1,6 +1,8 @@
install(FILES rados/librados.h
install(FILES
rados/librados.h
rados/rados_types.h
rados/rados_types.hpp
rados/librados_fwd.hpp
rados/librados.hpp
buffer.h
buffer_fwd.h

View File

@ -189,6 +189,8 @@ namespace buffer CEPH_BUFFER_API {
raw* create_msg(unsigned len, char *buf, XioDispatchHook *m_hook);
#endif
inline namespace v14_2_0 {
/*
* a buffer pointer. references (a subsequence of) a raw buffer.
*/
@ -1243,6 +1245,8 @@ namespace buffer CEPH_BUFFER_API {
static list static_from_string(std::string& s);
};
} // inline namespace v14_2_0
/*
* efficient hash of one or more bufferlists
*/

View File

@ -3,8 +3,10 @@
namespace ceph {
namespace buffer {
class ptr;
class list;
inline namespace v14_2_0 {
class ptr;
class list;
}
class hash;
}

View File

@ -11,6 +11,7 @@
#include "buffer.h"
#include "librados.h"
#include "librados_fwd.hpp"
#include "rados_types.hpp"
namespace libradosstriper
@ -18,37 +19,41 @@ namespace libradosstriper
class RadosStriper;
}
namespace librados
{
using ceph::bufferlist;
namespace librados {
using ceph::bufferlist;
struct AioCompletionImpl;
struct IoCtxImpl;
struct ListObjectImpl;
class NObjectIteratorImpl;
struct ObjListCtx;
class ObjectOperationImpl;
struct PlacementGroupImpl;
struct PoolAsyncCompletionImpl;
typedef struct rados_cluster_stat_t cluster_stat_t;
typedef struct rados_pool_stat_t pool_stat_t;
typedef void *list_ctx_t;
typedef uint64_t auid_t;
typedef void *config_t;
typedef struct {
std::string client;
std::string cookie;
std::string address;
} locker_t;
typedef std::map<std::string, pool_stat_t> stats_map;
typedef void *completion_t;
typedef void (*callback_t)(completion_t cb, void *arg);
inline namespace v14_2_0 {
struct AioCompletionImpl;
class IoCtx;
struct IoCtxImpl;
class ObjectOperationImpl;
struct ObjListCtx;
struct PoolAsyncCompletionImpl;
class RadosClient;
struct ListObjectImpl;
class NObjectIteratorImpl;
typedef void *list_ctx_t;
typedef uint64_t auid_t;
typedef void *config_t;
typedef struct rados_cluster_stat_t cluster_stat_t;
typedef struct rados_pool_stat_t pool_stat_t;
typedef struct {
std::string client;
std::string cookie;
std::string address;
} locker_t;
typedef std::map<std::string, pool_stat_t> stats_map;
typedef void *completion_t;
typedef void (*callback_t)(completion_t cb, void *arg);
class CEPH_RADOS_API ListObject
{
@ -64,7 +69,7 @@ namespace librados
private:
ListObject(ListObjectImpl *impl);
friend class NObjectIteratorImpl;
friend class librados::NObjectIteratorImpl;
friend std::ostream& operator<<(std::ostream& out, const ListObject& lop);
ListObjectImpl *impl;
@ -86,7 +91,7 @@ namespace librados
void set(rados_object_list_cursor c);
friend class IoCtx;
friend class NObjectIteratorImpl;
friend class librados::NObjectIteratorImpl;
friend std::ostream& operator<<(std::ostream& os, const librados::ObjectCursor& oc);
std::string to_str() const;
@ -112,7 +117,7 @@ namespace librados
NObjectIterator &operator++(); //< Preincrement; errors are thrown as exceptions
NObjectIterator operator++(int); //< Postincrement; errors are thrown as exceptions
friend class IoCtx;
friend class NObjectIteratorImpl;
friend class librados::NObjectIteratorImpl;
/// get current hash position of the iterator, rounded to the current pg
uint32_t get_pg_hash_position() const;
@ -1281,7 +1286,6 @@ namespace librados
IoCtxImpl *io_ctx_impl;
};
struct PlacementGroupImpl;
struct CEPH_RADOS_API PlacementGroup {
PlacementGroup();
PlacementGroup(const PlacementGroup&);
@ -1453,7 +1457,9 @@ namespace librados
const Rados& operator=(const Rados& rhs);
RadosClient *client;
};
}
} // namespace v14_2_0
} // namespace librados
#endif

View File

@ -0,0 +1,32 @@
#ifndef __LIBRADOS_FWD_HPP
#define __LIBRADOS_FWD_HPP
namespace libradosstriper {
class RadosStriper;
} // namespace libradosstriper
namespace librados {
inline namespace v14_2_0 {
class AioCompletion;
class IoCtx;
class ListObject;
class NObjectIterator;
class ObjectCursor;
class ObjectItem;
class ObjectOperation;
class ObjectOperationCompletion;
class ObjectReadOperation;
class ObjectWriteOperation;
class PlacementGroup;
class PoolAsyncCompletion;
class Rados;
class WatchCtx;
class WatchCtx2;
} // inline namespace v14_2_0
} // namespace librados
#endif // __LIBRADOS_FWD_HPP

View File

@ -9,7 +9,7 @@ add_library(librados_impl STATIC
add_library(librados ${CEPH_SHARED}
librados_c.cc
librados_cxx.cc
../common/buffer.cc)
$<TARGET_OBJECTS:common_buffer_obj>)
if(ENABLE_SHARED)
set_target_properties(librados PROPERTIES
OUTPUT_NAME rados

View File

@ -40,8 +40,6 @@ inline std::ostream& operator<<(std::ostream& out, const struct ListObjectImpl&
return out;
}
struct ObjListCtx;
class NObjectIteratorImpl {
public:
NObjectIteratorImpl() {}
@ -56,10 +54,6 @@ class NObjectIteratorImpl {
NObjectIteratorImpl &operator++(); // Preincrement
NObjectIteratorImpl operator++(int); // Postincrement
const ListObject *get_listobjectp() { return &cur_obj; }
friend class IoCtx;
friend struct ListObjectImpl;
//friend class ListObject;
friend class NObjectIterator;
/// get current hash position of the iterator, rounded to the current pg
uint32_t get_pg_hash_position() const;
@ -75,7 +69,6 @@ class NObjectIteratorImpl {
void set_filter(const bufferlist &bl);
private:
NObjectIteratorImpl(ObjListCtx *ctx_);
void get_next();
std::shared_ptr < ObjListCtx > ctx;

View File

@ -3,29 +3,29 @@ LIBRADOS_PRIVATE {
};
LIBRADOS_14.2.0 {
global:
extern "C++" {
ceph::buffer::*;
librados::AioCompletion::*;
librados::IoCtx::*;
librados::ListObject::*;
librados::NObjectIterator::*;
librados::ObjectCursor::*;
librados::ObjectOperation::*;
librados::ObjectReadOperation::*;
librados::ObjectWriteOperation::*;
librados::PlacementGroup::*;
librados::PoolAsyncCompletion::*;
librados::Rados::*;
librados::WatchCtx::*;
librados::WatchCtx2::*;
"librados::operator<<(std::ostream&, librados::ListObject const&)";
"librados::operator<<(std::ostream&, librados::ObjectCursor const&)";
"librados::operator<<(std::ostream&, librados::PlacementGroup const&)";
"typeinfo for librados::ObjectOperation";
"typeinfo for librados::ObjectReadOperation";
"typeinfo for librados::ObjectWriteOperation";
"typeinfo for librados::WatchCtx";
"typeinfo for librados::WatchCtx2";
};
global:
extern "C++" {
ceph::buffer::v14_2_0::*;
librados::v14_2_0::*;
"typeinfo for librados::v14_2_0::ObjectOperation";
"typeinfo name for librados::v14_2_0::ObjectOperation";
"vtable for librados::v14_2_0::ObjectOperation";
"typeinfo for librados::v14_2_0::ObjectReadOperation";
"typeinfo name for librados::v14_2_0::ObjectReadOperation";
"vtable for librados::v14_2_0::ObjectReadOperation";
"typeinfo for librados::v14_2_0::ObjectWriteOperation";
"typeinfo name for librados::v14_2_0::ObjectWriteOperation";
"vtable for librados::v14_2_0::ObjectWriteOperation";
"typeinfo for librados::v14_2_0::WatchCtx";
"typeinfo name for librados::v14_2_0::WatchCtx";
"vtable for librados::v14_2_0::WatchCtx";
"typeinfo for librados::v14_2_0::WatchCtx2";
"typeinfo name for librados::v14_2_0::WatchCtx2";
"vtable for librados::v14_2_0::WatchCtx2";
};
} LIBRADOS_PRIVATE;

View File

@ -7,6 +7,7 @@
#include "include/int_types.h"
#include "include/Context.h"
#include "include/interval_set.h"
#include "include/rados/librados_fwd.hpp"
#include "common/Cond.h"
#include "common/Mutex.h"
#include "common/Cond.h"
@ -29,9 +30,6 @@ class SafeTimer;
namespace journal {
class Journaler;
}
namespace librados {
class IoCtx;
}
namespace librbd {

View File

@ -5,15 +5,12 @@
#define CEPH_LIBRBD_MIRRORING_WATCHER_H
#include "include/int_types.h"
#include "include/rados/librados_fwd.hpp"
#include "cls/rbd/cls_rbd_types.h"
#include "librbd/ImageCtx.h"
#include "librbd/Watcher.h"
#include "librbd/mirroring_watcher/Types.h"
namespace librados {
class IoCtx;
}
namespace librbd {
namespace watcher {

View File

@ -6,6 +6,7 @@
#include "include/int_types.h"
#include "include/fs_types.h"
#include "include/rados/librados_fwd.hpp"
#include "include/rbd/object_map_types.h"
#include "common/bit_vector.hpp"
#include "librbd/Utils.h"
@ -13,7 +14,6 @@
class Context;
class RWLock;
namespace librados { class IoCtx; }
namespace ZTracer { struct Trace; }
namespace librbd {

View File

@ -5,13 +5,12 @@
#define CEPH_LIBRBD_TRASH_WATCHER_H
#include "include/int_types.h"
#include "include/rados/librados_fwd.hpp"
#include "cls/rbd/cls_rbd_types.h"
#include "librbd/ImageCtx.h"
#include "librbd/Watcher.h"
#include "librbd/trash_watcher/Types.h"
namespace librados { class IoCtx; }
namespace librbd {
namespace watcher {

View File

@ -5,15 +5,10 @@
#define CEPH_LIBRBD_API_CONFIG_H
#include "include/rbd/librbd.hpp"
#include "include/rados/librados_fwd.hpp"
struct ConfigProxy;
namespace librados {
class IoCtx;
}
namespace librbd {
class ImageCtx;

View File

@ -5,11 +5,10 @@
#define CEPH_LIBRBD_API_GROUP_H
#include "include/rbd/librbd.hpp"
#include "include/rados/librados_fwd.hpp"
#include <string>
#include <vector>
namespace librados { struct IoCtx; }
namespace librbd {
struct ImageCtx;

View File

@ -5,13 +5,12 @@
#define LIBRBD_API_IMAGE_H
#include "include/rbd/librbd.hpp"
#include "include/rados/librados_fwd.hpp"
#include "librbd/Types.h"
#include <map>
#include <set>
#include <string>
namespace librados { struct IoCtx; }
namespace librbd {
class ImageOptions;

View File

@ -5,17 +5,12 @@
#define CEPH_LIBRBD_API_MIGRATION_H
#include "include/int_types.h"
#include "include/rados/librados_fwd.hpp"
#include "include/rbd/librbd.hpp"
#include "cls/rbd/cls_rbd_types.h"
#include <vector>
namespace librados {
class IoCtx;
}
namespace librbd {
class ImageCtx;

View File

@ -4,12 +4,11 @@
#ifndef CEPH_LIBRBD_API_NAMESPACE_H
#define CEPH_LIBRBD_API_NAMESPACE_H
#include "include/rados/librados_fwd.hpp"
#include "include/rbd/librbd.hpp"
#include <string>
#include <vector>
namespace librados { struct IoCtx; }
namespace librbd {
struct ImageCtx;

View File

@ -5,11 +5,10 @@
#define CEPH_LIBRBD_API_POOL_H
#include "include/int_types.h"
#include "include/rados/librados_fwd.hpp"
#include "include/rbd/librbd.h"
#include <map>
namespace librados { class IoCtx; }
namespace librbd {
struct ImageCtx;

View File

@ -4,16 +4,11 @@
#ifndef CEPH_LIBRBD_API_POOL_METADATA_H
#define CEPH_LIBRBD_API_POOL_METADATA_H
#include "include/buffer.h"
#include "include/buffer_fwd.h"
#include "include/rados/librados_fwd.hpp"
#include <map>
namespace librados {
class IoCtx;
}
namespace librbd {
class ImageCtx;

View File

@ -4,12 +4,11 @@
#ifndef LIBRBD_API_TRASH_H
#define LIBRBD_API_TRASH_H
#include "include/rados/librados_fwd.hpp"
#include "include/rbd/librbd.hpp"
#include <string>
#include <vector>
namespace librados { struct IoCtx; }
namespace librbd {
class ProgressContext;

View File

@ -5,7 +5,8 @@
#define CEPH_LIBRBD_MANAGED_LOCK_BREAK_REQUEST_H
#include "include/int_types.h"
#include "include/buffer.h"
#include "include/buffer_fwd.h"
#include "include/rados/librados_fwd.hpp"
#include "msg/msg_types.h"
#include <list>
#include <string>
@ -16,8 +17,6 @@ class Context;
class ContextWQ;
class obj_watch_t;
namespace librados { class IoCtx; }
namespace librbd {
class ImageCtx;

View File

@ -6,11 +6,11 @@
#include "include/int_types.h"
#include "include/buffer.h"
#include "include/rados/librados_fwd.hpp"
#include <string>
class Context;
namespace librados { class IoCtx; }
namespace librbd {
struct ImageCtx;

View File

@ -4,7 +4,8 @@
#ifndef CEPH_LIBRBD_MIRROR_ENABLE_REQUEST_H
#define CEPH_LIBRBD_MIRROR_ENABLE_REQUEST_H
#include "include/buffer.h"
#include "include/buffer_fwd.h"
#include "include/rados/librados_fwd.hpp"
#include "cls/rbd/cls_rbd_types.h"
#include <map>
#include <string>
@ -12,8 +13,6 @@
class Context;
class ContextWQ;
namespace librados { class IoCtx; }
namespace librbd {
class ImageCtx;

View File

@ -11,7 +11,6 @@
struct CephContext;
struct Context;
namespace librados { struct IoCtx; }
namespace librbd {

View File

@ -15,15 +15,11 @@
#pragma once
#include "include/rados/librados_fwd.hpp"
#include <boost/intrusive/list.hpp>
#include "rgw_common.h"
#include "services/svc_rados.h" // cant forward declare RGWSI_RADOS::Obj
namespace librados {
class ObjectReadOperation;
class ObjectWriteOperation;
}
namespace rgw {
struct AioResult {

View File

@ -15,15 +15,12 @@
#pragma once
#include "include/rados/librados_fwd.hpp"
#include <memory>
#include "common/ceph_mutex.h"
#include "services/svc_rados.h"
#include "rgw_aio.h"
namespace librados {
class AioCompletion;
}
namespace rgw {
// a throttle for aio operations that enforces a maximum window on outstanding

View File

@ -4,11 +4,11 @@
#ifndef LIBRADOS_TEST_STUB_H
#define LIBRADOS_TEST_STUB_H
#include "include/rados/librados_fwd.hpp"
#include <boost/shared_ptr.hpp>
namespace librados {
class IoCtx;
class MockTestMemIoCtxImpl;
class TestCluster;

View File

@ -5,13 +5,13 @@
#define CEPH_TEST_LIBRBD_MOCK_JOURNAL_H
#include "gmock/gmock.h"
#include "include/rados/librados_fwd.hpp"
#include "librbd/Journal.h"
#include "librbd/journal/Types.h"
#include <list>
struct Context;
struct ContextWQ;
namespace librados { class IoCtx; }
namespace librbd {

View File

@ -14,13 +14,11 @@
#ifndef JOURNAL_SCANNER_H
#define JOURNAL_SCANNER_H
#include "include/rados/librados_fwd.hpp"
// For Journaler::Header, can't forward-declare nested classes
#include <osdc/Journaler.h>
namespace librados {
class IoCtx;
}
#include "JournalFilter.h"
/**

View File

@ -16,12 +16,9 @@
#ifndef POOL_DUMP_H_
#define POOL_DUMP_H_
#include "include/rados/librados_fwd.hpp"
#include "tools/RadosDump.h"
namespace librados {
class IoCtx;
}
class PoolDump : public RadosDump
{
public:

View File

@ -4,13 +4,12 @@
#ifndef CEPH_RBD_MIRROR_DAEMON_SERVICE_INFO_H
#define CEPH_RBD_MIRROR_DAEMON_SERVICE_INFO_H
#include "include/rados/librados_fwd.hpp"
#include "tools/rbd/ArgumentTypes.h"
#include <string>
#include <map>
namespace librados { class IoCtx; }
namespace rbd {
class MirrorDaemonServiceInfo {

View File

@ -7,13 +7,13 @@
#include <map>
#include <vector>
#include "include/buffer.h"
#include "include/buffer_fwd.h"
#include "include/rados/librados_fwd.hpp"
#include "common/AsyncOpTracker.h"
#include "common/Mutex.h"
#include "librbd/Watcher.h"
#include "tools/rbd_mirror/instances/Types.h"
namespace librados { class IoCtx; }
namespace librbd { class ImageCtx; }
namespace rbd {

View File

@ -5,9 +5,9 @@
#define RBD_MIRROR_IMAGE_REPLAYER_GET_MIRROR_IMAGE_ID_REQUEST_H
#include "include/buffer.h"
#include "include/rados/librados_fwd.hpp"
#include <string>
namespace librados { struct IoCtx; }
namespace librbd { struct ImageCtx; }
struct Context;

View File

@ -5,9 +5,9 @@
#define RBD_MIRROR_IMAGE_REPLAYER_PREPARE_LOCAL_IMAGE_REQUEST_H
#include "include/buffer.h"
#include "include/rados/librados_fwd.hpp"
#include <string>
namespace librados { struct IoCtx; }
namespace librbd { struct ImageCtx; }
struct Context;

View File

@ -4,7 +4,8 @@
#ifndef RBD_MIRROR_IMAGE_REPLAYER_PREPARE_REMOTE_IMAGE_REQUEST_H
#define RBD_MIRROR_IMAGE_REPLAYER_PREPARE_REMOTE_IMAGE_REQUEST_H
#include "include/buffer.h"
#include "include/buffer_fwd.h"
#include "include/rados/librados_fwd.hpp"
#include "cls/journal/cls_journal_types.h"
#include "journal/Settings.h"
#include "librbd/journal/TypeTraits.h"
@ -12,7 +13,6 @@
namespace journal { class Journaler; }
namespace journal { class Settings; }
namespace librados { struct IoCtx; }
namespace librbd { struct ImageCtx; }
namespace librbd { namespace journal { struct MirrorPeerClientMeta; } }