]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rados, rbd: move include files to their own directories
authorYehuda Sadeh <yehuda.sadeh@dreamhost.com>
Thu, 3 Feb 2011 19:07:21 +0000 (11:07 -0800)
committerYehuda Sadeh <yehuda.sadeh@dreamhost.com>
Mon, 7 Feb 2011 23:13:01 +0000 (15:13 -0800)
In order to match the path being used with the packages

21 files changed:
src/Makefile.am
src/include/librados.h [deleted file]
src/include/librados.hpp [deleted file]
src/include/librbd.h [deleted file]
src/include/librbd.hpp [deleted file]
src/include/rados/atomic.h [new symlink]
src/include/rados/buffer.h [new symlink]
src/include/rados/crc32c.h [new symlink]
src/include/rados/librados.h [new file with mode: 0644]
src/include/rados/librados.hpp [new file with mode: 0644]
src/include/rados/page.h [new symlink]
src/include/rbd/librbd.h [new file with mode: 0644]
src/include/rbd/librbd.hpp [new file with mode: 0644]
src/librados-config.cc
src/librados.cc
src/librbd.cc
src/osdc/rados_bencher.h
src/rados.cc
src/rbd.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 80408ff20b8652d6065241c14fc9cfb66e7d8ccf..32c1a3e8a808c561992fc6ec736a7e04de4a504e 100644 (file)
@@ -440,13 +440,13 @@ libceph_include_DATA = $(srcdir)/client/libceph.h
 
 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 \
@@ -718,10 +718,6 @@ noinst_HEADERS = \
         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\
@@ -740,6 +736,10 @@ noinst_HEADERS = \
         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\
diff --git a/src/include/librados.h b/src/include/librados.h
deleted file mode 100644 (file)
index e185fa6..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-#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
diff --git a/src/include/librados.hpp b/src/include/librados.hpp
deleted file mode 100644 (file)
index 567cd2d..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-#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
-
diff --git a/src/include/librbd.h b/src/include/librbd.h
deleted file mode 100644 (file)
index 22e564e..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-// -*- 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
diff --git a/src/include/librbd.hpp b/src/include/librbd.hpp
deleted file mode 100644 (file)
index 2689ed7..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-// -*- 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
diff --git a/src/include/rados/atomic.h b/src/include/rados/atomic.h
new file mode 120000 (symlink)
index 0000000..e5822a1
--- /dev/null
@@ -0,0 +1 @@
+../atomic.h
\ No newline at end of file
diff --git a/src/include/rados/buffer.h b/src/include/rados/buffer.h
new file mode 120000 (symlink)
index 0000000..51fc03b
--- /dev/null
@@ -0,0 +1 @@
+../buffer.h
\ No newline at end of file
diff --git a/src/include/rados/crc32c.h b/src/include/rados/crc32c.h
new file mode 120000 (symlink)
index 0000000..19ef431
--- /dev/null
@@ -0,0 +1 @@
+../crc32c.h
\ No newline at end of file
diff --git a/src/include/rados/librados.h b/src/include/rados/librados.h
new file mode 100644 (file)
index 0000000..e185fa6
--- /dev/null
@@ -0,0 +1,144 @@
+#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
diff --git a/src/include/rados/librados.hpp b/src/include/rados/librados.hpp
new file mode 100644 (file)
index 0000000..567cd2d
--- /dev/null
@@ -0,0 +1,171 @@
+#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
+
diff --git a/src/include/rados/page.h b/src/include/rados/page.h
new file mode 120000 (symlink)
index 0000000..cf983e8
--- /dev/null
@@ -0,0 +1 @@
+../page.h
\ No newline at end of file
diff --git a/src/include/rbd/librbd.h b/src/include/rbd/librbd.h
new file mode 100644 (file)
index 0000000..fca45d7
--- /dev/null
@@ -0,0 +1,90 @@
+// -*- 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
diff --git a/src/include/rbd/librbd.hpp b/src/include/rbd/librbd.hpp
new file mode 100644 (file)
index 0000000..f6bf7dd
--- /dev/null
@@ -0,0 +1,109 @@
+// -*- 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
index fd3a4df449004b60734d6089d56770490c97b59e..a90011c08e5c7ad7724110b9ed10cb525e263eb7 100644 (file)
@@ -16,7 +16,7 @@
 #include "config.h"
 
 #include "common/common_init.h"
-#include "include/librados.h"
+#include "include/rados/librados.h"
 
 void usage()
 {
index 8ba3007da155de07c34df583881bfc4109594633..9e1f6d559f417838581b3534390d0f082a87bbb9 100644 (file)
@@ -38,8 +38,8 @@ using namespace std;
 
 #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"
 
index 6f57b89bceb6b4fd4f8eedaaccbff0c53c4faaa6..93c9c958b85dc5f2dfb73da098792d246a49efda 100644 (file)
@@ -17,7 +17,7 @@
 
 #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"
index e68b3aa74cb3d7e156b21b920217b234a80ce4d0..993240320f7502a8be5a6880fc4885408f82bf25 100644 (file)
@@ -14,7 +14,7 @@
  * 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"
index 93ca4d0720d715636cddd98ecbc8df275584a8aa..60e7d8e9bbb36d1bd946090d1b36953b520786fa 100644 (file)
@@ -14,7 +14,7 @@
 
 #include "include/types.h"
 
-#include "include/librados.hpp"
+#include "include/rados/librados.hpp"
 using namespace librados;
 
 #include "osdc/rados_bencher.h"
index 13075336d8b7bc8d30c7ab5b984b81109d1fd2f3..44cf2c57afc3361c67513f1fb09affea6b9b5273 100644 (file)
@@ -17,7 +17,7 @@
 
 #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"
index e55610818206ca6b46755eab72a439494e05fdef..b9ad3c8d7ae63de499a8ad7236c9b2f1efd38aaa 100644 (file)
@@ -4,7 +4,7 @@
 #include "rgw_access.h"
 #include "rgw_rados.h"
 
-#include "include/librados.hpp"
+#include "include/rados/librados.hpp"
 using namespace librados;
 
 #include <string>
index 9293dc89145a0f8f71dcaef0cb5a60a4b47a95e1..18ad044fb34216b091f0a2a745a65ebb97c536e9 100644 (file)
@@ -1,7 +1,7 @@
 #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"