if WITH_DEBUG
testlibrbd_SOURCES = testlibrbd.c
testlibrbd_LDADD = librbd.la librados.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS)
-testlibrbdpp_SOURCES = testlibrbdpp.cc
-testlibrbdpp_LDADD = librbd.la librados.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS)
-bin_PROGRAMS += testlibrbd testlibrbdpp
+#testlibrbdpp_SOURCES = testlibrbdpp.cc
+#testlibrbdpp_LDADD = librbd.la librados.la libcrush.la -lpthread -lm $(CRYPTOPP_LIBS)
+bin_PROGRAMS += testlibrbd
endif
if WITH_RADOSGW
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);
+ void set_snap_read(pool_t pool, snap_t seq);
+ int set_snap_write_context(pool_t pool, snap_t seq, std::vector<snap_t>& snaps);
uint64_t get_last_version(pool_t pool);
client(c), poolid(pid), name(n), snap_seq(s), assert_ver(0),
notify_timeout(g_conf.client_notify_timeout) {}
- void set_snap(snapid_t s) {
+ void set_snap_read(snapid_t s) {
if (!s)
s = CEPH_NOSNAP;
snap_seq = s;
}
- int set_snap_context(snapid_t seq, vector<snapid_t>& snaps) {
+ int set_snap_write_context(snapid_t seq, vector<snapid_t>& snaps) {
SnapContext n;
n.seq = seq;
n.snaps = snaps;
return client->selfmanaged_snap_rollback_object(pool, oid, sn, snapid);
}
-void Rados::set_snap(rados_pool_t pool, snap_t seq)
+void Rados::set_snap_read(rados_pool_t pool, snap_t seq)
{
if (!client)
return;
RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool;
- ctx->set_snap(seq);
+ ctx->set_snap_read(seq);
}
-int Rados::set_snap_context(rados_pool_t pool, snap_t seq, vector<snap_t>& snaps)
+int Rados::set_snap_write_context(rados_pool_t pool, snap_t seq, vector<snap_t>& snaps)
{
if (!client)
return -EINVAL;
snv.resize(snaps.size());
for (unsigned i=0; i<snaps.size(); i++)
snv[i] = snaps[i];
- return ctx->set_snap_context(seq, snv);
+ return ctx->set_snap_write_context(seq, snv);
}
int Rados::snap_list(rados_pool_t pool, vector<snap_t> *snaps)
extern "C" void rados_snap_set_read(rados_pool_t pool, rados_snap_t seq)
{
RadosClient::PoolCtx *ctx = (RadosClient::PoolCtx *)pool;
- ctx->set_snap((snapid_t)seq);
+ ctx->set_snap_read((snapid_t)seq);
}
extern "C" int rados_snap_set_write_context(rados_pool_t pool, rados_snap_t seq,
snv.resize(num_snaps);
for (int i=0; i<num_snaps; i++)
snv[i] = (snapid_t)snaps[i];
- return ctx->set_snap_context((snapid_t)seq, snv);
+ return ctx->set_snap_write_context((snapid_t)seq, snv);
}
extern "C" int rados_write(rados_pool_t pool, const char *o, off_t off, const char *buf, size_t len)
string md_oid = ictx->name;
md_oid += RBD_SUFFIX;
- r = rados.snap_set_write_context(ictx->pool, ictx->snapc.seq, ictx->snaps);
+ r = rados.set_snap_write_context(ictx->pool, ictx->snapc.seq, ictx->snaps);
if (r < 0)
return r;
- rados.snap_set_read(ictx->pool, 0);
+ rados.set_snap_read(ictx->pool, 0);
r = add_snap(ictx, snap_name);
notify_change(ictx->pool, md_oid, NULL, ictx);
return r;
if (r < 0)
return r;
- r = rados.snap_set_write_context(ictx->pool, ictx->snapc.seq, ictx->snaps);
+ r = rados.set_snap_write_context(ictx->pool, ictx->snapc.seq, ictx->snaps);
if (r < 0)
return r;
- rados.snap_set_read(ictx->pool, ictx->snapid);
+ rados.set_snap_read(ictx->pool, ictx->snapid);
r = rm_snap(ictx->pool, md_oid, snap_name);
r = rados.selfmanaged_snap_remove(ictx->pool, ictx->snapid);
if (r < 0)
return r;
- r = rados.snap_set_write_context(ictx->pool, ictx->snapc.seq, ictx->snaps);
+ r = rados.set_snap_write_context(ictx->pool, ictx->snapc.seq, ictx->snaps);
if (r < 0)
return r;
- rados.snap_set_read(ictx->pool, ictx->snapid);
+ rados.set_snap_read(ictx->pool, ictx->snapid);
r = rollback_image(ictx, ictx->snapid);
if (r < 0)
return r;
if (r < 0)
return r;
- r = rados.snap_set_write_context(ictx->pool, ictx->snapc.seq, ictx->snaps);
+ r = rados.set_snap_write_context(ictx->pool, ictx->snapc.seq, ictx->snaps);
if (r < 0)
return r;
- rados.snap_set_read(ictx->pool, ictx->snapid);
+ rados.set_snap_read(ictx->pool, ictx->snapid);
return 0;
}
cerr << "snapid " << snapid << " doesn't exist in pool " << pool << std::endl;
goto out;
}
- rados.set_snap(p, snapid);
+ rados.set_snap_read(p, snapid);
cout << "selected snap " << snapid << " '" << snapname << "'" << std::endl;
}
// list pools?
if (strcmp(nargs[0], "lspools") == 0) {
list<string> vec;
- rados.list_pools(vec);
+ rados.pool_list(vec);
for (list<string>::iterator i = vec.begin(); i != vec.end(); ++i)
cout << *i << std::endl;
}
else if (strcmp(nargs[0], "df") == 0) {
// pools
list<string> vec;
- rados.list_pools(vec);
+ rados.pool_list(vec);
map<string,pool_stat_t> stats;
- rados.get_pool_stats(vec, stats);
+ rados.pool_get_stats(vec, stats);
printf("%-15s "
"%12s %12s %12s %12s "
// total
statfs_t tstats;
- rados.get_fs_stats(tstats);
+ rados.fs_get_stats(tstats);
printf(" total used %12lld %12lld\n", (long long unsigned)tstats.kb_used,
(long long unsigned)tstats.num_objects);
printf(" total avail %12lld\n", (long long unsigned)tstats.kb_avail);
outstream = new ofstream(nargs[1]);
Rados::ListCtx ctx;
- rados.list_objects_open(p, &ctx);
+ rados.objects_list_open(p, &ctx);
bufferlist extra_info;
bool filter_parent = false;
if (filter) {
}
while (1) {
list<string> vec;
- ret = rados.list_objects_more(ctx, 1 << 10, vec);
+ ret = rados.objects_list_more(ctx, 1 << 10, vec);
if (ret < 0) {
cerr << "got error: " << strerror_r(-ret, buf, sizeof(buf)) << std::endl;
delete outstream;
}
}
}
- rados.list_objects_close(ctx);
+ rados.objects_list_close(ctx);
if (!stdout)
delete outstream;
}
{
if (image)
rbd.close(image);
- rados.pool_close(pool);
- rados.release();
+ rados.close_pool(pool);
+ rados.shutdown();
exit(1);
}
usage_exit();
}
- if (rados.init() < 0) {
+ if (rados.initialize(NULL, 0) < 0) {
cerr << "error: couldn't initialize rados!" << std::endl;
exit(1);
}
// TODO: add argc/argv conf
- int r = rados.pool_open(poolname, &pool);
+ int r = rados.open_pool(poolname, &pool);
if (r < 0) {
cerr << "error opening pool " << poolname << " (err=" << r << ")" << std::endl;
err_exit(pool);
}
if (opt_cmd == OPT_COPY || opt_cmd == OPT_IMPORT) {
- r = rados.pool_open(dest_poolname, &dest_pool);
+ r = rados.open_pool(dest_poolname, &dest_pool);
if (r < 0) {
cerr << "error opening pool " << dest_poolname << " (err=" << r << ")" << std::endl;
err_exit(pool);
if (image)
rbd.close(image);
- rados.pool_close(pool);
- rados.release();
+ rados.close_pool(pool);
+ rados.shutdown();
return 0;
}
if (!state)
return -ENOMEM;
- int r = rados->list_pools(state->list);
+ int r = rados->pool_list(state->list);
if (r < 0)
return r;
state->pos = state->list.begin();
#define MAX_ENTRIES 1000
Rados::ListCtx ctx;
- rados->list_objects_open(pool, &ctx);
+ rados->objects_list_open(pool, &ctx);
do {
list<string> entries;
- r = rados->list_objects_more(ctx, MAX_ENTRIES, entries);
+ r = rados->objects_list_more(ctx, MAX_ENTRIES, entries);
if (r < 0)
return r;
}
}
} while (r);
- rados->list_objects_close(ctx);
+ rados->objects_list_close(ctx);
set<string>::iterator p;
if (!marker.empty())
rados_t cluster;
rados_pool_t pool;
rbd_image_t image;
- assert(rados_init(&cluster) == 0);
- assert(rados_conf_parse_argv(cluster, argc, argv) == 0);
+ assert(rados_create(&cluster, NULL) == 0);
+ assert(rados_conf_read_file(cluster, "/etc/ceph/ceph.conf") == 0);
+ rados_reopen_log();
assert(rados_pool_open(cluster, TEST_POOL, &pool) == 0);
test_ls(pool, 0);
test_create_and_stat(pool, TEST_IMAGE, MB_BYTES(1));
test_delete(pool, TEST_IMAGE "1");
test_ls(pool, 0);
rados_pool_close(pool);
- rados_release(cluster);
+ rados_destroy(cluster);
return 0;
}
-// -*- mode:C; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
// vim: ts=8 sw=2 smarttab
/*
* Ceph - scalable distributed file system
#define __STDC_FORMAT_MACROS
#include "include/rbd/librbd.hpp"
+#include "include/rados/librados.hpp"
#include "include/buffer.h"
#include <algorithm>
librbd::RBD *rbd;
-void test_create_and_stat(librbd::pool_t pool, const char *name, size_t size)
+void test_create_and_stat(librados::pool_t pool, const char *name, size_t size)
{
librbd::image_info_t info;
librbd::image_t image;
int order = 0;
assert(rbd->create(pool, name, size, &order) == 0);
- assert(rbd->open_image(pool, name, &image, NULL) == 0);
- assert(rbd->stat(image, info) == 0);
+ assert(rbd->open(pool, name, &image, NULL) == 0);
+ assert(rbd->stat(image, info, sizeof(info)) == 0);
cout << "image has size " << info.size << " and order " << info.order << endl;
assert(info.size == size);
assert(info.order == order);
- assert(rbd->close_image(image) == 0);
+ assert(rbd->close(image) == 0);
}
void test_resize_and_stat(librbd::image_t image, size_t size)
{
librbd::image_info_t info;
assert(rbd->resize(image, size) == 0);
- assert(rbd->stat(image, info) == 0);
+ assert(rbd->stat(image, info, sizeof(info)) == 0);
cout << "image has size " << info.size << " and order " << info.order << endl;
assert(info.size == size);
}
-void test_ls(librbd::pool_t pool, size_t num_expected, ...)
+void test_ls(librados::pool_t pool, size_t num_expected, ...)
{
int r;
size_t i;
assert(names.empty());
}
-void test_delete(librbd::pool_t pool, const char *name)
+void test_delete(librados::pool_t pool, const char *name)
{
assert(rbd->remove(pool, name) == 0);
}
void test_create_snap(librbd::image_t image, const char *name)
{
- assert(rbd->create_snap(image, name) == 0);
+ assert(rbd->snap_create(image, name) == 0);
}
void test_ls_snaps(librbd::image_t image, size_t num_expected, ...)
char *expected;
va_list ap;
vector<librbd::snap_info_t> snaps;
- r = rbd->list_snaps(image, snaps);
+ r = rbd->snap_list(image, snaps);
assert(r >= 0);
cout << "num snaps is: " << snaps.size() << endl
<< "expected: " << num_expected << endl;
void test_delete_snap(librbd::image_t image, const char *name)
{
- assert(rbd->remove_snap(image, name) == 0);
+ assert(rbd->snap_remove(image, name) == 0);
}
void simple_write_cb(librbd::completion_t cb, void *arg)
assert(strncmp(bl.c_str(), expected, expected_len) == 0);
}
-void test_io(librbd::pool_t pool, librbd::image_t image)
+void test_io(librados::pool_t pool, librbd::image_t image)
{
char test_data[TEST_IO_SIZE];
int i;
int main(int argc, const char **argv)
{
- rbd = new librbd::RBD();
- librbd::pool_t pool;
+ librados::Rados rados;
+ librados::pool_t pool;
librbd::image_t image;
- assert(rbd->initialize(0, NULL) == 0);
- assert(rbd->open_pool(TEST_POOL, &pool) == 0);
+ rbd = new librbd::RBD();
+ assert(rados.init() == 0);
+ assert(rados.pool_open(TEST_POOL, &pool) == 0);
test_ls(pool, 0);
test_create_and_stat(pool, TEST_IMAGE, MB_BYTES(1));
- assert(rbd->open_image(pool, TEST_IMAGE, &image, NULL) == 0);
+ assert(rbd->open(pool, TEST_IMAGE, &image, NULL) == 0);
test_ls(pool, 1, TEST_IMAGE);
test_ls_snaps(image, 0);
test_create_snap(image, TEST_SNAP);
test_ls_snaps(image, 1, TEST_SNAP "1", MB_BYTES(2));
test_delete_snap(image, TEST_SNAP "1");
test_ls_snaps(image, 0);
- assert(rbd->close_image(image) == 0);
+ assert(rbd->close(image) == 0);
test_create_and_stat(pool, TEST_IMAGE "1", MB_BYTES(2));
test_ls(pool, 2, TEST_IMAGE, TEST_IMAGE "1");
test_delete(pool, TEST_IMAGE);
test_ls(pool, 1, TEST_IMAGE "1");
test_delete(pool, TEST_IMAGE "1");
test_ls(pool, 0);
- rbd->close_pool(pool);
- rbd->shutdown();
delete rbd;
+ rados.pool_close(pool);
+ rados.release();
return 0;
}
}
Rados::ListCtx ctx;
- rados.list_objects_open(pool, &ctx);
+ rados.objects_list_open(pool, &ctx);
int entries;
do {
list<string> vec;
- r = rados.list_objects_more(ctx, 2, vec);
+ r = rados.objects_list_more(ctx, 2, vec);
entries = vec.size();
cout << "list result=" << r << " entries=" << entries << std::endl;
list<string>::iterator iter;
cout << *iter << std::endl;
}
} while (entries);
- rados.list_objects_close(ctx);
+ rados.objects_list_close(ctx);
map<string, bufferlist> attrset;