#define LIBRADOS_SUPPORTS_WATCH 1
-typedef void *rados_cluster_t;
+typedef void *rados_t;
typedef void *rados_pool_t;
typedef void *rados_list_ctx_t;
typedef uint64_t rados_snap_t;
};
-void librados_version(int *major, int *minor, int *extra);
+void rados_version(int *major, int *minor, int *extra);
/* initialization */
-int rados_initialize(int argc, const char **argv, rados_cluster_t *cluster); /* arguments are optional */
-void rados_deinitialize(rados_cluster_t cluster);
+int rados_init(rados_t *cluster);
+void rados_release(rados_t cluster);
+
+/* config */
+int rados_conf_parse_argv(rados_t cluster, int argc, const char **argv);
+int rados_conf_read_file(rados_t cluster, const char *path);
+int rados_conf_set(rados_t cluster, const char *option, const char *value);
+const char *rados_conf_get(rados_t cluster, const char *option);
/* pools */
-int rados_open_pool(rados_cluster_t cluster, const char *name, rados_pool_t *pool);
-int rados_close_pool(rados_pool_t pool);
-int rados_lookup_pool(rados_cluster_t cluster, const char *name);
+int rados_pool_open(rados_t cluster, const char *name, rados_pool_t *pool);
+int rados_pool_close(rados_pool_t pool);
+int rados_pool_lookup(rados_t cluster, const char *name);
-int rados_stat_pool(rados_pool_t pool, struct rados_pool_stat_t *stats);
+int rados_pool_stat(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);
+void rados_snap_set_read(rados_pool_t pool, rados_snap_t snap);
+int rados_snap_set_write_context(rados_pool_t pool, rados_snap_t seq, rados_snap_t *snaps, int num_snaps);
-int rados_create_pool(rados_cluster_t cluster, const char *name);
-int rados_create_pool_with_auid(rados_cluster_t cluster, const char *name, uint64_t auid);
-int rados_create_pool_with_crush_rule(rados_cluster_t cluster, const char *name, __u8 crush_rule);
-int rados_create_pool_with_all(rados_cluster_t cluster, const char *name, uint64_t auid,
+int rados_pool_create(rados_t cluster, const char *name);
+int rados_pool_create_with_auid(rados_t cluster, const char *name, uint64_t auid);
+int rados_pool_create_with_crush_rule(rados_t cluster, const char *name, __u8 crush_rule);
+int rados_pool_create_with_all(rados_t cluster, 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);
+int rados_pool_delete(rados_pool_t pool);
+int rados_pool_set_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);
+int rados_objects_list_open(rados_pool_t pool, rados_list_ctx_t *ctx);
+int rados_object_list_next(rados_list_ctx_t ctx, const char **entry);
+void rados_objects_list_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,
+int rados_pool_snap_create(rados_pool_t pool, const char *snapname);
+int rados_pool_snap_remove(rados_pool_t pool, const char *snapname);
+int rados_pool_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);
+int rados_pool_selfmanaged_snap_create(rados_pool_t pool, uint64_t *snapid);
+int rados_pool_selfmanaged_snap_remove(rados_pool_t pool, uint64_t snapid);
+int rados_pool_snap_list(rados_pool_t pool, rados_snap_t *snaps, int maxlen);
+int rados_pool_snap_lookup(rados_pool_t pool, const char *name, rados_snap_t *id);
+int rados_pool_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);
if (opt_version) {
int maj, min, ext;
- librados_version(&maj, &min, &ext);
+ rados_version(&maj, &min, &ext);
cout << maj << "." << min << "." << ext << std::endl;
} else if (opt_vernum) {
cout << hex << LIBRADOS_VERSION_CODE << dec << std::endl;
void Rados::version(int *major, int *minor, int *extra)
{
- librados_version(major, minor, extra);
+ rados_version(major, minor, extra);
}
int Rados::list_pools(std::list<string>& v)
// ---------------------------------------------
-static void __rados_init(int argc, const char *argv[])
-{
- vector<const char*> args;
-
- if (argc && argv) {
- argv_to_vec(argc, argv, args);
- env_to_vec(args);
- }
- common_set_defaults(false);
- common_init(args, "librados", STARTUP_FLAG_INIT_KEYS);
-}
-
static Mutex rados_init_mutex("rados_init");
static int rados_initialized = 0;
-extern "C" int rados_initialize(int argc, const char **argv, rados_cluster_t *pcluster)
+extern "C" int rados_init(rados_t *pcluster)
{
int ret = 0;
rados_init_mutex.Lock();
-
if (!rados_initialized) {
- __rados_init(argc, argv);
- ++rados_initialized;
+ // parse environment
+ vector<const char*> args;
+ env_to_vec(args);
+
+ common_set_defaults(false);
+ common_init(args, "librados", STARTUP_FLAG_INIT_KEYS);
+
+ ++rados_initialized;
}
-
+ rados_init_mutex.Unlock();
+
RadosClient *radosp = new RadosClient;
ret = radosp->init();
- if (ret < 0)
- goto done;
- *pcluster = (void *)radosp;
-
-done:
- rados_init_mutex.Unlock();
+ if (ret < 0) {
+ delete radosp;
+ } else {
+ *pcluster = (void *)radosp;
+ }
return ret;
}
-extern "C" void rados_deinitialize(rados_cluster_t cluster)
+extern "C" void rados_release(rados_t cluster)
{
RadosClient *radosp = (RadosClient *)cluster;
radosp->shutdown();
delete radosp;
}
-extern "C" void librados_version(int *major, int *minor, int *extra)
+extern "C" void rados_version(int *major, int *minor, int *extra)
{
if (major)
*major = LIBRADOS_VER_MAJOR;
*extra = LIBRADOS_VER_EXTRA;
}
-extern "C" int rados_lookup_pool(rados_cluster_t cluster, const char *name)
+
+// -- config --
+extern "C" int rados_conf_parse_argv(rados_t cluster, int argc, const char **argv)
+{
+ vector<const char*> args;
+
+ argv_to_vec(argc, argv, args);
+ common_init(args, "librados", STARTUP_FLAG_INIT_KEYS);
+
+ return 0;
+}
+
+
+extern "C" int rados_conf_read_file(rados_t cluster, const char *path)
+{
+ return 0;
+}
+
+extern "C" int rados_conf_set(rados_t cluster, const char *option, const char *value)
+{
+ return 0;
+}
+
+extern "C" const char *rados_conf_get(rados_t cluster, const char *option)
+{
+ return 0;
+}
+
+
+
+extern "C" int rados_lookup_pool(rados_t cluster, const char *name)
{
RadosClient *radosp = (RadosClient *)cluster;
return radosp->lookup_pool(name);
}
-extern "C" int rados_open_pool(rados_cluster_t cluster, const char *name, rados_pool_t *pool)
+extern "C" int rados_open_pool(rados_t cluster, const char *name, rados_pool_t *pool)
{
RadosClient *radosp = (RadosClient *)cluster;
int poolid = radosp->lookup_pool(name);
return ver.version;
}
-extern "C" int rados_create_pool(rados_cluster_t cluster, const char *name)
+extern "C" int rados_create_pool(rados_t cluster, const char *name)
{
RadosClient *radosp = (RadosClient *)cluster;
string sname(name);
return radosp->create_pool(sname);
}
-extern "C" int rados_create_pool_with_auid(rados_cluster_t cluster, const char *name, uint64_t auid)
+extern "C" int rados_create_pool_with_auid(rados_t cluster, const char *name, uint64_t auid)
{
RadosClient *radosp = (RadosClient *)cluster;
string sname(name);
return radosp->create_pool(sname, auid);
}
-extern "C" int rados_create_pool_with_crush_rule(rados_cluster_t cluster, const char *name,
+extern "C" int rados_create_pool_with_crush_rule(rados_t cluster, const char *name,
__u8 crush_rule)
{
RadosClient *radosp = (RadosClient *)cluster;
return radosp->create_pool(sname, 0, crush_rule);
}
-extern "C" int rados_create_pool_with_all(rados_cluster_t cluster, const char *name, uint64_t auid,
+extern "C" int rados_create_pool_with_all(rados_t cluster, const char *name, uint64_t auid,
__u8 crush_rule)
{
RadosClient *radosp = (RadosClient *)cluster;
int main(int argc, const char **argv)
{
int i, r;
+ rados_t cl;
- if (rados_initialize(argc, argv) < 0) {
+ if (rados_init(&cl) < 0) {
printf("error initializing\n");
exit(1);
}
+ rados_conf_parse_argv(cl, argc, argv);
+
/* create a pool */
r = rados_create_pool("foo");
printf("rados_create_pool = %d\n", r);