#include #include #include librados::IoCtx io; librados::Rados rados; librados::AioCompletion *comp; int main(int argc, const char **argv) { int err, res; const char *id = "xyz"; if ( ( err = rados.init("tnr") ) < 0 ) { std::cerr << "[DEBUG] couldn't create the ceph cluster handle: " << err << std::endl; return 1; } if ( ( err = rados.conf_read_file("/home/tnr/etc/ceph.conf") ) < 0 ) { std::cerr << "[DEBUG] cannot read ceph config file: " << err << std::endl; return 1; } if ( ( err = rados.connect() ) < 0 ) { std::cerr << "[DEBUG] cannot connect to cluster: " << err << std::endl; return 1; } if ( (err = rados.ioctx_create("diablo", io)) < 0 ) { std::cerr << "[DEBUG] error while talking to the cluster: " << err << std::endl; return 1; } uint64_t psize; time_t mtime; comp = librados::Rados::aio_create_completion(); err = io.aio_stat( id, comp, &psize, &mtime ); if (err < 0) { std::cerr << "[DEBUG] could not stat: " << err << std::endl; return 1; } comp->wait_for_complete(); res = comp->get_return_value(); if ( res < 0 ) { std::cerr << "[DEBUG] could not stat: " << res << std::endl; return 1; } sleep(1); std::cerr << "[DEBUG] mtime: " << mtime << " psize: " << psize << std::endl; sleep(1); comp = librados::Rados::aio_create_completion(); librados::bufferlist buf; err = io.aio_read( id, comp, &buf, psize, 0 ); if (err < 0) { std::cerr << "[DEBUG] could not read: " << err << std::endl; exit(1); } comp->wait_for_complete(); res = comp->get_return_value(); if ( res < 0 ) { std::cerr << "[DEBUG] could not read: " << res << std::endl; return 1; } sleep(1); std::cerr << "[DEBUG] bytes read: " << res << ", psize: " << psize << std::endl; std::string str; buf.copy(0, 60, str); std::cout << "[DEBUG] --" << std::endl << str << std::endl << "[DEBUG] --" << std::endl; sleep(1); rados.shutdown(); }