|
|
|
#include <rados/librados.hpp>
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
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();
|
|
|
|
}
|