librbd_includedir = $(includedir)/rbd
librbd_include_DATA = \
- $(srcdir)/include/librbd.h \
- $(srcdir)/include/librbd.hpp
+ $(srcdir)/include/rbd/librbd.h \
+ $(srcdir)/include/rbd/librbd.hpp
rados_includedir = $(includedir)/rados
rados_include_DATA = \
- $(srcdir)/include/librados.h \
- $(srcdir)/include/librados.hpp \
+ $(srcdir)/include/rados/librados.h \
+ $(srcdir)/include/rados/librados.hpp \
$(srcdir)/include/buffer.h \
$(srcdir)/include/atomic.h \
$(srcdir)/include/page.h \
include/intarith.h\
include/interval_set.h\
include/inttypes.h\
- include/librados.h\
- include/librados.hpp\
- include/librbd.h\
- include/librbd.hpp\
include/linux_fiemap.h\
include/lru.h\
include/msgr.h\
include/dlist.h\
include/elist.h\
include/xlist.h\
+ include/rados/librados.h\
+ include/rados/librados.hpp\
+ include/rbd/librbd.h\
+ include/rbd/librbd.hpp\
logrotate.conf\
mds/flock.h\
mds/inode_backtrace.h\
+++ /dev/null
-#ifndef CEPH_LIBRADOS_H
-#define CEPH_LIBRADOS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <netinet/in.h>
-#include <linux/types.h>
-#include <string.h>
-
-#ifndef CEPH_OSD_TMAP_SET
-#define CEPH_OSD_TMAP_HDR 'h'
-#define CEPH_OSD_TMAP_SET 's'
-#define CEPH_OSD_TMAP_RM 'r'
-#endif
-
-#define LIBRADOS_VER_MAJOR 0
-#define LIBRADOS_VER_MINOR 25
-#define LIBRADOS_VER_EXTRA 0
-
-#define LIBRADOS_VERSION(maj, min, extra) ((maj << 16) + (min << 8) + extra)
-
-#define LIBRADOS_VERSION_CODE LIBRADOS_VERSION(LIBRADOS_VER_MAJOR, LIBRADOS_VER_MINOR, LIBRADOS_VER_EXTRA)
-
-#define LIBRADOS_SUPPORTS_WATCH 1
-
-/* initialization */
-int rados_initialize(int argc, const char **argv); /* arguments are optional */
-void rados_deinitialize();
-
-void librados_version(int *major, int *minor, int *extra);
-
-/* pools */
-typedef void *rados_pool_t;
-typedef void *rados_list_ctx_t;
-typedef uint64_t rados_snap_t;
-
-struct rados_pool_stat_t {
- uint64_t num_bytes; // in bytes
- uint64_t num_kb; // in KB
- uint64_t num_objects;
- uint64_t num_object_clones;
- uint64_t num_object_copies; // num_objects * num_replicas
- uint64_t num_objects_missing_on_primary;
- uint64_t num_objects_unfound;
- uint64_t num_objects_degraded;
- uint64_t num_rd, num_rd_kb,num_wr, num_wr_kb;
-};
-
-struct rados_statfs_t {
- uint64_t kb, kb_used, kb_avail;
- uint64_t num_objects;
-};
-
-int rados_open_pool(const char *name, rados_pool_t *pool);
-int rados_close_pool(rados_pool_t pool);
-int rados_lookup_pool(const char *name);
-
-int rados_stat_pool(rados_pool_t pool, struct rados_pool_stat_t *stats);
-
-void rados_set_snap(rados_pool_t pool, rados_snap_t snap);
-int rados_set_snap_context(rados_pool_t pool, rados_snap_t seq, rados_snap_t *snaps, int num_snaps);
-
-int rados_create_pool(const char *name);
-int rados_create_pool_with_auid(const char *name, uint64_t auid);
-int rados_create_pool_with_crush_rule(const char *name, __u8 crush_rule);
-int rados_create_pool_with_all(const char *name, uint64_t auid,
- __u8 crush_rule);
-int rados_delete_pool(rados_pool_t pool);
-int rados_change_pool_auid(rados_pool_t pool, uint64_t auid);
-
-/* objects */
-int rados_list_objects_open(rados_pool_t pool, rados_list_ctx_t *ctx);
-int rados_list_objects_next(rados_list_ctx_t ctx, const char **entry);
-void rados_list_objects_close(rados_list_ctx_t ctx);
-
-
-/* snapshots */
-int rados_snap_create(rados_pool_t pool, const char *snapname);
-int rados_snap_remove(rados_pool_t pool, const char *snapname);
-int rados_snap_rollback_object(rados_pool_t pool, const char *oid,
- const char *snapname);
-int rados_selfmanaged_snap_create(rados_pool_t pool, uint64_t *snapid);
-int rados_selfmanaged_snap_remove(rados_pool_t pool, uint64_t snapid);
-int rados_snap_list(rados_pool_t pool, rados_snap_t *snaps, int maxlen);
-int rados_snap_lookup(rados_pool_t pool, const char *name, rados_snap_t *id);
-int rados_snap_get_name(rados_pool_t pool, rados_snap_t id, char *name, int maxlen);
-
-/* sync io */
-uint64_t rados_get_last_version(rados_pool_t pool);
-
-int rados_write(rados_pool_t pool, const char *oid, off_t off, const char *buf, size_t len);
-int rados_write_full(rados_pool_t pool, const char *oid, off_t off, const char *buf, size_t len);
-int rados_read(rados_pool_t pool, const char *oid, off_t off, char *buf, size_t len);
-int rados_remove(rados_pool_t pool, const char *oid);
-int rados_trunc(rados_pool_t pool, const char *oid, size_t size);
-
-/* attrs */
-int rados_getxattr(rados_pool_t pool, const char *o, const char *name, char *buf, size_t len);
-int rados_setxattr(rados_pool_t pool, const char *o, const char *name, const char *buf, size_t len);
-int rados_rmxattr(rados_pool_t pool, const char *o, const char *name);
-
-/* misc */
-int rados_stat(rados_pool_t pool, const char *o, uint64_t *psize, time_t *pmtime);
-int rados_tmap_update(rados_pool_t pool, const char *o, const char *cmdbuf, size_t cmdbuflen);
-int rados_exec(rados_pool_t pool, const char *oid, const char *cls, const char *method,
- const char *in_buf, size_t in_len, char *buf, size_t out_len);
-
-/* async io */
-typedef void *rados_completion_t;
-typedef void (*rados_callback_t)(rados_completion_t cb, void *arg);
-
-int rados_aio_create_completion(void *cb_arg, rados_callback_t cb_complete, rados_callback_t cb_safe,
- rados_completion_t *pc);
-int rados_aio_wait_for_complete(rados_completion_t c);
-int rados_aio_wait_for_safe(rados_completion_t c);
-int rados_aio_is_complete(rados_completion_t c);
-int rados_aio_is_safe(rados_completion_t c);
-int rados_aio_get_return_value(rados_completion_t c);
-uint64_t rados_aio_get_obj_ver(rados_completion_t c);
-void rados_aio_release(rados_completion_t c);
-int rados_aio_write(rados_pool_t pool, const char *oid,
- off_t off, const char *buf, size_t len,
- rados_completion_t completion);
-int rados_aio_write_full(rados_pool_t pool, const char *oid,
- off_t off, const char *buf, size_t len,
- rados_completion_t completion);
-int rados_aio_read(rados_pool_t pool, const char *oid,
- off_t off, char *buf, size_t len,
- rados_completion_t completion);
-
-/* watch/notify */
-typedef void (*rados_watchcb_t)(uint8_t opcode, uint64_t ver, void *arg);
-int rados_watch(rados_pool_t pool, const char *o, uint64_t ver, uint64_t *handle,
- rados_watchcb_t watchcb, void *arg);
-int rados_unwatch(rados_pool_t pool, const char *o, uint64_t handle);
-int rados_notify(rados_pool_t pool, const char *o, uint64_t ver);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+++ /dev/null
-#ifndef __LIBRADOS_HPP
-#define __LIBRADOS_HPP
-
-#include <stdbool.h>
-#include <string>
-#include <list>
-#include <map>
-#include <vector>
-#include "buffer.h"
-
-#include "librados.h"
-
-class RadosClient;
-class Context;
-
-namespace librados {
-
- using ceph::bufferlist;
-
- typedef void *list_ctx_t;
- typedef void *pool_t;
- typedef uint64_t snap_t;
- typedef uint64_t auid_t;
-
- struct statfs_t {
- uint64_t kb, kb_used, kb_avail;
- uint64_t num_objects;
- };
-
- struct pool_stat_t {
- uint64_t num_bytes; // in bytes
- uint64_t num_kb; // in KB
- uint64_t num_objects;
- uint64_t num_object_clones;
- uint64_t num_object_copies; // num_objects * num_replicas
- uint64_t num_objects_missing_on_primary;
- uint64_t num_objects_unfound;
- uint64_t num_objects_degraded;
- uint64_t num_rd, num_rd_kb, num_wr, num_wr_kb;
- };
-
- typedef void *completion_t;
- typedef void (*callback_t)(completion_t cb, void *arg);
-
- struct SnapContext {
- snap_t seq;
- std::vector<snap_t> snaps;
- };
-
-
-
-class Rados
-{
- RadosClient *client;
-public:
- Rados();
- ~Rados();
-
- /* We don't allow assignment or copying */
- Rados(const Rados& rhs);
- const Rados& operator=(const Rados& rhs);
-
- int initialize(int argc, const char *argv[]);
- void shutdown();
-
- void version(int *major, int *minor, int *extra);
-
- int open_pool(const char *name, pool_t *pool);
- int close_pool(pool_t pool);
- int lookup_pool(const char *name);
-
- void set_snap(pool_t pool, snap_t seq);
- int set_snap_context(pool_t pool, snap_t seq, std::vector<snap_t>& snaps);
-
- uint64_t get_last_version(pool_t pool);
-
- int create(pool_t pool, const std::string& oid, bool exclusive);
-
- int write(pool_t pool, const std::string& oid, off_t off, bufferlist& bl, size_t len);
- int write_full(pool_t pool, const std::string& oid, bufferlist& bl);
- int read(pool_t pool, const std::string& oid, off_t off, bufferlist& bl, size_t len);
- int remove(pool_t pool, const std::string& oid);
- int trunc(pool_t pool, const std::string& oid, size_t size);
- int mapext(pool_t pool, const std::string& o, off_t off, size_t len, std::map<off_t, size_t>& m);
- int sparse_read(pool_t pool, const std::string& o, off_t off, size_t len, std::map<off_t, size_t>& m, bufferlist& bl);
- int getxattr(pool_t pool, const std::string& oid, const char *name, bufferlist& bl);
- int setxattr(pool_t pool, const std::string& oid, const char *name, bufferlist& bl);
- int rmxattr(pool_t pool, const std::string& oid, const char *name);
- int getxattrs(pool_t pool, const std::string& oid, std::map<std::string, bufferlist>& attrset);
- int stat(pool_t pool, const std::string& oid, uint64_t *psize, time_t *pmtime);
-
- int tmap_update(pool_t pool, const std::string& oid, bufferlist& cmdbl);
-
- int exec(pool_t pool, const std::string& oid, const char *cls, const char *method,
- bufferlist& inbl, bufferlist& outbl);
-
- /* listing objects */
- struct ListCtx {
- void *ctx;
- bufferlist *extra_info;
- ListCtx() : ctx(NULL), extra_info(NULL) {}
- };
- int list_objects_open(pool_t pool, Rados::ListCtx *ctx);
- int list_objects_more(Rados::ListCtx& ctx, int max, std::list<std::string>& entries);
- void list_objects_close(Rados::ListCtx& ctx);
- void list_filter(Rados::ListCtx& ctx, bufferlist& filter, bufferlist *extra_info);
-
- int list_pools(std::list<std::string>& v);
- int get_pool_stats(std::list<std::string>& v,
- std::map<std::string,pool_stat_t>& stats);
- int get_fs_stats(statfs_t& result);
-
- int create_pool(const char *name, uint64_t auid=0, __u8 crush_rule=0);
- int delete_pool(pool_t pool);
- int change_pool_auid(pool_t pool, uint64_t auid);
-
- int snap_create(pool_t pool, const char *snapname);
- int selfmanaged_snap_create(pool_t pool, uint64_t *snapid);
- int snap_remove(pool_t pool, const char *snapname);
- int snap_rollback_object(pool_t pool, const std::string& oid,
- const char *snapname);
- int selfmanaged_snap_remove(pool_t pool, uint64_t snapid);
- int selfmanaged_snap_rollback_object(pool_t pool,
- const std::string& oid,
- SnapContext& snapc, uint64_t snapid);
- int snap_list(pool_t pool, std::vector<snap_t> *snaps);
- int snap_get_name(pool_t pool, snap_t snap, std::string *name);
- int snap_get_stamp(pool_t pool, snap_t snap, time_t *t);
- int snap_lookup(pool_t, const char *snapname, snap_t *snapid);
-
- // -- aio --
- struct AioCompletion {
- void *pc;
- AioCompletion(void *_pc) : pc(_pc) {}
- int set_complete_callback(void *cb_arg, callback_t cb);
- int set_safe_callback(void *cb_arg, callback_t cb);
- int wait_for_complete();
- int wait_for_safe();
- bool is_complete();
- bool is_safe();
- int get_return_value();
- int get_version();
- void release();
- };
-
- int aio_read(pool_t pool, const std::string& oid, off_t off, bufferlist *pbl, size_t len,
- AioCompletion *c);
- int aio_write(pool_t pool, const std::string& oid, off_t off, const bufferlist& bl, size_t len,
- AioCompletion *c);
- AioCompletion *aio_create_completion();
- AioCompletion *aio_create_completion(void *cb_arg, callback_t cb_complete, callback_t cb_safe);
-
- class WatchCtx {
- public:
- virtual void notify(uint8_t opcode, uint64_t ver) = 0;
- };
-
- // watch/notify
- int watch(pool_t pool, const std::string& o, uint64_t ver, uint64_t *handle, librados::Rados::WatchCtx *ctx);
- int unwatch(pool_t pool, const std::string& o, uint64_t handle);
- int notify(pool_t pool, const std::string& o, uint64_t ver);
- void set_notify_timeout(pool_t pool, uint32_t timeout);
-
- /* assert version for next sync operations */
- void set_assert_version(pool_t pool, uint64_t ver);
-};
-
-}
-
-#endif
-
+++ /dev/null
-// -*- 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) 2011 New Dream Network
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-#ifndef CEPH_LIBRBD_H
-#define CEPH_LIBRBD_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <netinet/in.h>
-#include <linux/types.h>
-#include <string.h>
-#include "librados.h"
-
-#define LIBRBD_VER_MAJOR 0
-#define LIBRBD_VER_MINOR 1
-#define LIBRBD_VER_EXTRA 0
-
-#define LIBRBD_VERSION(maj, min, extra) ((maj << 16) + (min << 8) + extra)
-
-#define LIBRBD_VERSION_CODE LIBRBD_VERSION(LIBRBD_VER_MAJOR, LIBRBD_VER_MINOR, LIBRBD_VER_EXTRA)
-
-#define LIBRBD_SUPPORTS_WATCH 0
-
-typedef void *rbd_snap_t;
-typedef void *rbd_pool_t;
-typedef void *rbd_image_t;
-
-typedef struct {
- uint64_t id;
- uint64_t size;
- const char *name;
-} rbd_snap_info_t;
-
-typedef struct {
- uint64_t size;
- uint64_t obj_size;
- uint64_t num_objs;
- int order;
-} rbd_image_info_t;
-
-/* initialization */
-int rbd_initialize(int argc, const char **argv); /* arguments are optional */
-void rbd_shutdown();
-
-void librbd_version(int *major, int *minor, int *extra);
-
-/* pools */
-int rbd_open_pool(const char *pool_name, rbd_pool_t *pool);
-int rbd_close_pool(rbd_pool_t pool);
-
-/* images */
-size_t rbd_list(rbd_pool_t pool, char **names, size_t max_names);
-int rbd_create(rbd_pool_t pool, const char *name, size_t size, int *order);
-int rbd_remove(rbd_pool_t pool, const char *name);
-int rbd_copy(rbd_pool_t src_pool, const char *srcname, rbd_pool_t dest_pool, const char *destname);
-int rbd_rename(rbd_pool_t src_pool, const char *srcname, const char *destname);
-
-int rbd_open_image(rbd_pool_t pool, const char *name, rbd_image_t *image);
-int rbd_close_image(rbd_image_t image);
-int rbd_resize(rbd_image_t image, size_t size);
-int rbd_stat(rbd_image_t image, rbd_image_info_t *info);
-
-/* snapshots */
-size_t rbd_list_snaps(rbd_image_t image, rbd_snap_info_t *snaps, size_t max_snaps);
-int rbd_create_snap(rbd_image_t image, const char *snapname);
-int rbd_remove_snap(rbd_image_t image, const char *snapname);
-int rbd_rollback_snap(rbd_image_t image, const char *snapname);
-int set_snap(rbd_image_t image, const char *snapname);
-
-/* lower level access */
-void get_rados_pools(rbd_pool_t pool, rados_pool_t *md_pool, rados_pool_t *data_pool);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
+++ /dev/null
-// -*- 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) 2011 New Dream Network
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License version 2.1, as published by the Free Software
- * Foundation. See file COPYING.
- *
- */
-
-#ifndef __LIBRBD_HPP
-#define __LIBRBD_HPP
-
-#include <stdbool.h>
-#include <string>
-#include <list>
-#include <map>
-#include <vector>
-#include "buffer.h"
-#include "librados.hpp"
-#include "librbd.h"
-
-namespace librbd {
- class RBDClient;
- typedef void *pool_t;
- typedef void *image_t;
- typedef void *completion_t;
- typedef void (*callback_t)(completion_t cb, void *arg);
-
- typedef struct {
- uint64_t id;
- uint64_t size;
- std::string name;
- } snap_info_t;
-
- typedef struct {
- uint64_t size;
- uint64_t obj_size;
- uint64_t num_objs;
- int order;
- } image_info_t;
-
-class RBD
-{
- RBDClient *client;
-
-public:
- RBD() {}
- ~RBD() {}
-
- struct AioCompletion {
- void *pc;
- AioCompletion(void *_pc) : pc(_pc) {}
- int wait_for_complete();
- int get_return_value();
- void release();
- };
-
- /* We don't allow assignment or copying */
- RBD(const RBD& rhs);
- const RBD& operator=(const RBD& rhs);
-
- int initialize(int argc, const char *argv[]);
- void shutdown();
-
- void version(int *major, int *minor, int *extra);
-
- int open_pool(const char *pool_name, pool_t *pool);
- int close_pool(pool_t pool);
-
- int list(pool_t pool, std::vector<string>& names);
- int create(pool_t pool, const char *name, size_t size, int *order);
- int remove(pool_t pool, const char *name);
- int copy(pool_t src_pool, const char *srcname, pool_t dest_pool, const char *destname);
- int rename(pool_t src_pool, const char *srcname, const char *destname);
-
- int open_image(pool_t pool, const char *name, image_t *image, const char *snap_name);
- int close_image(image_t image);
- int resize(image_t image, size_t size);
- int stat(image_t image, image_info_t& info);
-
- /* snapshots */
- int list_snaps(image_t image, std::vector<snap_info_t>& snaps);
- int create_snap(image_t image, const char *snap_name);
- int remove_snap(image_t image, const char *snap_name);
- int rollback_snap(image_t image, const char *snap_name);
- int set_snap(image_t image, const char *snap_name);
-
- /* I/O */
- int read(image_t image, off_t ofs, size_t len, bufferlist& bl);
- int read_iterate(image_t image, off_t ofs, size_t len,
- int (*cb)(off_t, size_t, const char *, void *), void *arg);
- int write(image_t image, off_t ofs, size_t len, bufferlist& bl);
-
- AioCompletion *aio_create_completion(void *cb_arg, callback_t complete_cb);
- int aio_write(image_t image, off_t off, size_t len, bufferlist& bl,
- AioCompletion *c);
-
- /* lower level access */
- void get_rados_pools(pool_t pool, librados::pool_t *md_pool, librados::pool_t *data_pool);
-};
-
-}
-
-#endif
--- /dev/null
+../atomic.h
\ No newline at end of file
--- /dev/null
+../buffer.h
\ No newline at end of file
--- /dev/null
+../crc32c.h
\ No newline at end of file
--- /dev/null
+#ifndef CEPH_LIBRADOS_H
+#define CEPH_LIBRADOS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <netinet/in.h>
+#include <linux/types.h>
+#include <string.h>
+
+#ifndef CEPH_OSD_TMAP_SET
+#define CEPH_OSD_TMAP_HDR 'h'
+#define CEPH_OSD_TMAP_SET 's'
+#define CEPH_OSD_TMAP_RM 'r'
+#endif
+
+#define LIBRADOS_VER_MAJOR 0
+#define LIBRADOS_VER_MINOR 25
+#define LIBRADOS_VER_EXTRA 0
+
+#define LIBRADOS_VERSION(maj, min, extra) ((maj << 16) + (min << 8) + extra)
+
+#define LIBRADOS_VERSION_CODE LIBRADOS_VERSION(LIBRADOS_VER_MAJOR, LIBRADOS_VER_MINOR, LIBRADOS_VER_EXTRA)
+
+#define LIBRADOS_SUPPORTS_WATCH 1
+
+/* initialization */
+int rados_initialize(int argc, const char **argv); /* arguments are optional */
+void rados_deinitialize();
+
+void librados_version(int *major, int *minor, int *extra);
+
+/* pools */
+typedef void *rados_pool_t;
+typedef void *rados_list_ctx_t;
+typedef uint64_t rados_snap_t;
+
+struct rados_pool_stat_t {
+ uint64_t num_bytes; // in bytes
+ uint64_t num_kb; // in KB
+ uint64_t num_objects;
+ uint64_t num_object_clones;
+ uint64_t num_object_copies; // num_objects * num_replicas
+ uint64_t num_objects_missing_on_primary;
+ uint64_t num_objects_unfound;
+ uint64_t num_objects_degraded;
+ uint64_t num_rd, num_rd_kb,num_wr, num_wr_kb;
+};
+
+struct rados_statfs_t {
+ uint64_t kb, kb_used, kb_avail;
+ uint64_t num_objects;
+};
+
+int rados_open_pool(const char *name, rados_pool_t *pool);
+int rados_close_pool(rados_pool_t pool);
+int rados_lookup_pool(const char *name);
+
+int rados_stat_pool(rados_pool_t pool, struct rados_pool_stat_t *stats);
+
+void rados_set_snap(rados_pool_t pool, rados_snap_t snap);
+int rados_set_snap_context(rados_pool_t pool, rados_snap_t seq, rados_snap_t *snaps, int num_snaps);
+
+int rados_create_pool(const char *name);
+int rados_create_pool_with_auid(const char *name, uint64_t auid);
+int rados_create_pool_with_crush_rule(const char *name, __u8 crush_rule);
+int rados_create_pool_with_all(const char *name, uint64_t auid,
+ __u8 crush_rule);
+int rados_delete_pool(rados_pool_t pool);
+int rados_change_pool_auid(rados_pool_t pool, uint64_t auid);
+
+/* objects */
+int rados_list_objects_open(rados_pool_t pool, rados_list_ctx_t *ctx);
+int rados_list_objects_next(rados_list_ctx_t ctx, const char **entry);
+void rados_list_objects_close(rados_list_ctx_t ctx);
+
+
+/* snapshots */
+int rados_snap_create(rados_pool_t pool, const char *snapname);
+int rados_snap_remove(rados_pool_t pool, const char *snapname);
+int rados_snap_rollback_object(rados_pool_t pool, const char *oid,
+ const char *snapname);
+int rados_selfmanaged_snap_create(rados_pool_t pool, uint64_t *snapid);
+int rados_selfmanaged_snap_remove(rados_pool_t pool, uint64_t snapid);
+int rados_snap_list(rados_pool_t pool, rados_snap_t *snaps, int maxlen);
+int rados_snap_lookup(rados_pool_t pool, const char *name, rados_snap_t *id);
+int rados_snap_get_name(rados_pool_t pool, rados_snap_t id, char *name, int maxlen);
+
+/* sync io */
+uint64_t rados_get_last_version(rados_pool_t pool);
+
+int rados_write(rados_pool_t pool, const char *oid, off_t off, const char *buf, size_t len);
+int rados_write_full(rados_pool_t pool, const char *oid, off_t off, const char *buf, size_t len);
+int rados_read(rados_pool_t pool, const char *oid, off_t off, char *buf, size_t len);
+int rados_remove(rados_pool_t pool, const char *oid);
+int rados_trunc(rados_pool_t pool, const char *oid, size_t size);
+
+/* attrs */
+int rados_getxattr(rados_pool_t pool, const char *o, const char *name, char *buf, size_t len);
+int rados_setxattr(rados_pool_t pool, const char *o, const char *name, const char *buf, size_t len);
+int rados_rmxattr(rados_pool_t pool, const char *o, const char *name);
+
+/* misc */
+int rados_stat(rados_pool_t pool, const char *o, uint64_t *psize, time_t *pmtime);
+int rados_tmap_update(rados_pool_t pool, const char *o, const char *cmdbuf, size_t cmdbuflen);
+int rados_exec(rados_pool_t pool, const char *oid, const char *cls, const char *method,
+ const char *in_buf, size_t in_len, char *buf, size_t out_len);
+
+/* async io */
+typedef void *rados_completion_t;
+typedef void (*rados_callback_t)(rados_completion_t cb, void *arg);
+
+int rados_aio_create_completion(void *cb_arg, rados_callback_t cb_complete, rados_callback_t cb_safe,
+ rados_completion_t *pc);
+int rados_aio_wait_for_complete(rados_completion_t c);
+int rados_aio_wait_for_safe(rados_completion_t c);
+int rados_aio_is_complete(rados_completion_t c);
+int rados_aio_is_safe(rados_completion_t c);
+int rados_aio_get_return_value(rados_completion_t c);
+uint64_t rados_aio_get_obj_ver(rados_completion_t c);
+void rados_aio_release(rados_completion_t c);
+int rados_aio_write(rados_pool_t pool, const char *oid,
+ off_t off, const char *buf, size_t len,
+ rados_completion_t completion);
+int rados_aio_write_full(rados_pool_t pool, const char *oid,
+ off_t off, const char *buf, size_t len,
+ rados_completion_t completion);
+int rados_aio_read(rados_pool_t pool, const char *oid,
+ off_t off, char *buf, size_t len,
+ rados_completion_t completion);
+
+/* watch/notify */
+typedef void (*rados_watchcb_t)(uint8_t opcode, uint64_t ver, void *arg);
+int rados_watch(rados_pool_t pool, const char *o, uint64_t ver, uint64_t *handle,
+ rados_watchcb_t watchcb, void *arg);
+int rados_unwatch(rados_pool_t pool, const char *o, uint64_t handle);
+int rados_notify(rados_pool_t pool, const char *o, uint64_t ver);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+#ifndef __LIBRADOS_HPP
+#define __LIBRADOS_HPP
+
+#include <stdbool.h>
+#include <string>
+#include <list>
+#include <map>
+#include <vector>
+#include "buffer.h"
+
+#include "librados.h"
+
+class RadosClient;
+class Context;
+
+namespace librados {
+
+ using ceph::bufferlist;
+
+ typedef void *list_ctx_t;
+ typedef void *pool_t;
+ typedef uint64_t snap_t;
+ typedef uint64_t auid_t;
+
+ struct statfs_t {
+ uint64_t kb, kb_used, kb_avail;
+ uint64_t num_objects;
+ };
+
+ struct pool_stat_t {
+ uint64_t num_bytes; // in bytes
+ uint64_t num_kb; // in KB
+ uint64_t num_objects;
+ uint64_t num_object_clones;
+ uint64_t num_object_copies; // num_objects * num_replicas
+ uint64_t num_objects_missing_on_primary;
+ uint64_t num_objects_unfound;
+ uint64_t num_objects_degraded;
+ uint64_t num_rd, num_rd_kb, num_wr, num_wr_kb;
+ };
+
+ typedef void *completion_t;
+ typedef void (*callback_t)(completion_t cb, void *arg);
+
+ struct SnapContext {
+ snap_t seq;
+ std::vector<snap_t> snaps;
+ };
+
+
+
+class Rados
+{
+ RadosClient *client;
+public:
+ Rados();
+ ~Rados();
+
+ /* We don't allow assignment or copying */
+ Rados(const Rados& rhs);
+ const Rados& operator=(const Rados& rhs);
+
+ int initialize(int argc, const char *argv[]);
+ void shutdown();
+
+ void version(int *major, int *minor, int *extra);
+
+ int open_pool(const char *name, pool_t *pool);
+ int close_pool(pool_t pool);
+ int lookup_pool(const char *name);
+
+ void set_snap(pool_t pool, snap_t seq);
+ int set_snap_context(pool_t pool, snap_t seq, std::vector<snap_t>& snaps);
+
+ uint64_t get_last_version(pool_t pool);
+
+ int create(pool_t pool, const std::string& oid, bool exclusive);
+
+ int write(pool_t pool, const std::string& oid, off_t off, bufferlist& bl, size_t len);
+ int write_full(pool_t pool, const std::string& oid, bufferlist& bl);
+ int read(pool_t pool, const std::string& oid, off_t off, bufferlist& bl, size_t len);
+ int remove(pool_t pool, const std::string& oid);
+ int trunc(pool_t pool, const std::string& oid, size_t size);
+ int mapext(pool_t pool, const std::string& o, off_t off, size_t len, std::map<off_t, size_t>& m);
+ int sparse_read(pool_t pool, const std::string& o, off_t off, size_t len, std::map<off_t, size_t>& m, bufferlist& bl);
+ int getxattr(pool_t pool, const std::string& oid, const char *name, bufferlist& bl);
+ int setxattr(pool_t pool, const std::string& oid, const char *name, bufferlist& bl);
+ int rmxattr(pool_t pool, const std::string& oid, const char *name);
+ int getxattrs(pool_t pool, const std::string& oid, std::map<std::string, bufferlist>& attrset);
+ int stat(pool_t pool, const std::string& oid, uint64_t *psize, time_t *pmtime);
+
+ int tmap_update(pool_t pool, const std::string& oid, bufferlist& cmdbl);
+
+ int exec(pool_t pool, const std::string& oid, const char *cls, const char *method,
+ bufferlist& inbl, bufferlist& outbl);
+
+ /* listing objects */
+ struct ListCtx {
+ void *ctx;
+ bufferlist *extra_info;
+ ListCtx() : ctx(NULL), extra_info(NULL) {}
+ };
+ int list_objects_open(pool_t pool, Rados::ListCtx *ctx);
+ int list_objects_more(Rados::ListCtx& ctx, int max, std::list<std::string>& entries);
+ void list_objects_close(Rados::ListCtx& ctx);
+ void list_filter(Rados::ListCtx& ctx, bufferlist& filter, bufferlist *extra_info);
+
+ int list_pools(std::list<std::string>& v);
+ int get_pool_stats(std::list<std::string>& v,
+ std::map<std::string,pool_stat_t>& stats);
+ int get_fs_stats(statfs_t& result);
+
+ int create_pool(const char *name, uint64_t auid=0, __u8 crush_rule=0);
+ int delete_pool(pool_t pool);
+ int change_pool_auid(pool_t pool, uint64_t auid);
+
+ int snap_create(pool_t pool, const char *snapname);
+ int selfmanaged_snap_create(pool_t pool, uint64_t *snapid);
+ int snap_remove(pool_t pool, const char *snapname);
+ int snap_rollback_object(pool_t pool, const std::string& oid,
+ const char *snapname);
+ int selfmanaged_snap_remove(pool_t pool, uint64_t snapid);
+ int selfmanaged_snap_rollback_object(pool_t pool,
+ const std::string& oid,
+ SnapContext& snapc, uint64_t snapid);
+ int snap_list(pool_t pool, std::vector<snap_t> *snaps);
+ int snap_get_name(pool_t pool, snap_t snap, std::string *name);
+ int snap_get_stamp(pool_t pool, snap_t snap, time_t *t);
+ int snap_lookup(pool_t, const char *snapname, snap_t *snapid);
+
+ // -- aio --
+ struct AioCompletion {
+ void *pc;
+ AioCompletion(void *_pc) : pc(_pc) {}
+ int set_complete_callback(void *cb_arg, callback_t cb);
+ int set_safe_callback(void *cb_arg, callback_t cb);
+ int wait_for_complete();
+ int wait_for_safe();
+ bool is_complete();
+ bool is_safe();
+ int get_return_value();
+ int get_version();
+ void release();
+ };
+
+ int aio_read(pool_t pool, const std::string& oid, off_t off, bufferlist *pbl, size_t len,
+ AioCompletion *c);
+ int aio_write(pool_t pool, const std::string& oid, off_t off, const bufferlist& bl, size_t len,
+ AioCompletion *c);
+ AioCompletion *aio_create_completion();
+ AioCompletion *aio_create_completion(void *cb_arg, callback_t cb_complete, callback_t cb_safe);
+
+ class WatchCtx {
+ public:
+ virtual void notify(uint8_t opcode, uint64_t ver) = 0;
+ };
+
+ // watch/notify
+ int watch(pool_t pool, const std::string& o, uint64_t ver, uint64_t *handle, librados::Rados::WatchCtx *ctx);
+ int unwatch(pool_t pool, const std::string& o, uint64_t handle);
+ int notify(pool_t pool, const std::string& o, uint64_t ver);
+ void set_notify_timeout(pool_t pool, uint32_t timeout);
+
+ /* assert version for next sync operations */
+ void set_assert_version(pool_t pool, uint64_t ver);
+};
+
+}
+
+#endif
+
--- /dev/null
+../page.h
\ No newline at end of file
--- /dev/null
+// -*- 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) 2011 New Dream Network
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+ *
+ */
+
+#ifndef CEPH_LIBRBD_H
+#define CEPH_LIBRBD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <netinet/in.h>
+#include <linux/types.h>
+#include <string.h>
+#include "../rados/librados.h"
+
+#define LIBRBD_VER_MAJOR 0
+#define LIBRBD_VER_MINOR 1
+#define LIBRBD_VER_EXTRA 0
+
+#define LIBRBD_VERSION(maj, min, extra) ((maj << 16) + (min << 8) + extra)
+
+#define LIBRBD_VERSION_CODE LIBRBD_VERSION(LIBRBD_VER_MAJOR, LIBRBD_VER_MINOR, LIBRBD_VER_EXTRA)
+
+#define LIBRBD_SUPPORTS_WATCH 0
+
+typedef void *rbd_snap_t;
+typedef void *rbd_pool_t;
+typedef void *rbd_image_t;
+
+typedef struct {
+ uint64_t id;
+ uint64_t size;
+ const char *name;
+} rbd_snap_info_t;
+
+typedef struct {
+ uint64_t size;
+ uint64_t obj_size;
+ uint64_t num_objs;
+ int order;
+} rbd_image_info_t;
+
+/* initialization */
+int rbd_initialize(int argc, const char **argv); /* arguments are optional */
+void rbd_shutdown();
+
+void librbd_version(int *major, int *minor, int *extra);
+
+/* pools */
+int rbd_open_pool(const char *pool_name, rbd_pool_t *pool);
+int rbd_close_pool(rbd_pool_t pool);
+
+/* images */
+size_t rbd_list(rbd_pool_t pool, char **names, size_t max_names);
+int rbd_create(rbd_pool_t pool, const char *name, size_t size, int *order);
+int rbd_remove(rbd_pool_t pool, const char *name);
+int rbd_copy(rbd_pool_t src_pool, const char *srcname, rbd_pool_t dest_pool, const char *destname);
+int rbd_rename(rbd_pool_t src_pool, const char *srcname, const char *destname);
+
+int rbd_open_image(rbd_pool_t pool, const char *name, rbd_image_t *image);
+int rbd_close_image(rbd_image_t image);
+int rbd_resize(rbd_image_t image, size_t size);
+int rbd_stat(rbd_image_t image, rbd_image_info_t *info);
+
+/* snapshots */
+size_t rbd_list_snaps(rbd_image_t image, rbd_snap_info_t *snaps, size_t max_snaps);
+int rbd_create_snap(rbd_image_t image, const char *snapname);
+int rbd_remove_snap(rbd_image_t image, const char *snapname);
+int rbd_rollback_snap(rbd_image_t image, const char *snapname);
+int set_snap(rbd_image_t image, const char *snapname);
+
+/* lower level access */
+void get_rados_pools(rbd_pool_t pool, rados_pool_t *md_pool, rados_pool_t *data_pool);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+// -*- 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) 2011 New Dream Network
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+ *
+ */
+
+#ifndef __LIBRBD_HPP
+#define __LIBRBD_HPP
+
+#include <stdbool.h>
+#include <string>
+#include <list>
+#include <map>
+#include <vector>
+#include "../rados/buffer.h"
+#include "../rados/librados.hpp"
+#include "librbd.h"
+
+namespace librbd {
+ class RBDClient;
+ typedef void *pool_t;
+ typedef void *image_t;
+ typedef void *completion_t;
+ typedef void (*callback_t)(completion_t cb, void *arg);
+
+ typedef struct {
+ uint64_t id;
+ uint64_t size;
+ std::string name;
+ } snap_info_t;
+
+ typedef struct {
+ uint64_t size;
+ uint64_t obj_size;
+ uint64_t num_objs;
+ int order;
+ } image_info_t;
+
+class RBD
+{
+ RBDClient *client;
+
+public:
+ RBD() {}
+ ~RBD() {}
+
+ struct AioCompletion {
+ void *pc;
+ AioCompletion(void *_pc) : pc(_pc) {}
+ int wait_for_complete();
+ int get_return_value();
+ void release();
+ };
+
+ /* We don't allow assignment or copying */
+ RBD(const RBD& rhs);
+ const RBD& operator=(const RBD& rhs);
+
+ int initialize(int argc, const char *argv[]);
+ void shutdown();
+
+ void version(int *major, int *minor, int *extra);
+
+ int open_pool(const char *pool_name, pool_t *pool);
+ int close_pool(pool_t pool);
+
+ int list(pool_t pool, std::vector<string>& names);
+ int create(pool_t pool, const char *name, size_t size, int *order);
+ int remove(pool_t pool, const char *name);
+ int copy(pool_t src_pool, const char *srcname, pool_t dest_pool, const char *destname);
+ int rename(pool_t src_pool, const char *srcname, const char *destname);
+
+ int open_image(pool_t pool, const char *name, image_t *image, const char *snap_name);
+ int close_image(image_t image);
+ int resize(image_t image, size_t size);
+ int stat(image_t image, image_info_t& info);
+
+ /* snapshots */
+ int list_snaps(image_t image, std::vector<snap_info_t>& snaps);
+ int create_snap(image_t image, const char *snap_name);
+ int remove_snap(image_t image, const char *snap_name);
+ int rollback_snap(image_t image, const char *snap_name);
+ int set_snap(image_t image, const char *snap_name);
+
+ /* I/O */
+ int read(image_t image, off_t ofs, size_t len, bufferlist& bl);
+ int read_iterate(image_t image, off_t ofs, size_t len,
+ int (*cb)(off_t, size_t, const char *, void *), void *arg);
+ int write(image_t image, off_t ofs, size_t len, bufferlist& bl);
+
+ AioCompletion *aio_create_completion(void *cb_arg, callback_t complete_cb);
+ int aio_write(image_t image, off_t off, size_t len, bufferlist& bl,
+ AioCompletion *c);
+
+ /* lower level access */
+ void get_rados_pools(pool_t pool, librados::pool_t *md_pool, librados::pool_t *data_pool);
+};
+
+}
+
+#endif
#include "config.h"
#include "common/common_init.h"
-#include "include/librados.h"
+#include "include/rados/librados.h"
void usage()
{
#include "osdc/Objecter.h"
-#include "include/librados.h"
-#include "include/librados.hpp"
+#include "include/rados/librados.h"
+#include "include/rados/librados.hpp"
#include "messages/MWatchNotify.h"
#include "common/common_init.h"
#include "common/Cond.h"
-#include "include/librbd.hpp"
+#include "include/rbd/librbd.hpp"
#include "include/byteorder.h"
#include "include/intarith.h"
* try and bench on a pool you don't have permission to access
* it will just loop forever.
*/
-#include "include/librados.h"
+#include "include/rados/librados.h"
#include "config.h"
#include "common/common_init.h"
#include "common/Cond.h"
#include "include/types.h"
-#include "include/librados.hpp"
+#include "include/rados/librados.hpp"
using namespace librados;
#include "osdc/rados_bencher.h"
#include "common/errno.h"
#include "common/common_init.h"
-#include "include/librbd.hpp"
+#include "include/rbd/librbd.hpp"
#include "include/byteorder.h"
#include "include/intarith.h"
#include "rgw_access.h"
#include "rgw_rados.h"
-#include "include/librados.hpp"
+#include "include/rados/librados.hpp"
using namespace librados;
#include <string>
#ifndef CEPH_RGWRADOS_H
#define CEPH_RGWRADOS_H
-#include "include/librados.h"
+#include "include/rados/librados.h"
#include "rgw_access.h"
#include "rgw_common.h"