#include #include #include rados_t CephCluster; rados_ioctx_t io; rados_completion_t comp; int main(int ac, char **av) { int err, res; const char id[4] = "xyz\0"; if ( ( err = rados_create2(&CephCluster, "ceph", "client.tnr", 0) ) < 0 ) { printf("[DEBUG] couldn't create the ceph cluster handle: %s\n", strerror(-err)); exit(1); } if ( ( err = rados_conf_read_file(CephCluster, "/home/tnr/etc/ceph.conf") ) < 0 ) { printf("[DEBUG] cannot read ceph config file: %s\n", strerror(-err)); exit(1); } if ( ( err = rados_connect(CephCluster) ) < 0 ) { printf("[DEBUG] cannot connect to cluster: %s\n", strerror(-err)); exit(1); } if ( (err = rados_ioctx_create(CephCluster, "diablo", &io)) < 0 ) { printf("[DEBUG] error while talking to the cluster: %s\n", strerror(-err)); exit(1); } uint64_t mtime, psize; err = rados_aio_create_completion(NULL, NULL, NULL, &comp); if (err < 0) { printf("[DEBUG] could not create aio completion: %s\n", strerror(-err)); exit(1); } err = rados_aio_stat( io, id, comp, &psize, &mtime ); if (err < 0) { printf("[DEBUG] could not stat: %s\n", strerror(-err)); exit(1); } rados_aio_wait_for_complete(comp); res = rados_aio_get_return_value( comp ); rados_aio_release( comp ); if ( res < 0 ) { printf("[DEBUG] could not stat: %s\n", strerror(-err)); exit(1); } sleep(1); printf("[DEBUG] mtime: %d, psize: %d\n", mtime, psize); sleep(1); err = rados_aio_create_completion(NULL, NULL, NULL, &comp); if (err < 0) { printf("[DEBUG] could not create aio completion: %s\n", strerror(-err)); exit(1); } char *buf = malloc( psize ); err = rados_aio_read( io, id, comp, buf, psize, 0 ); if (err < 0) { printf("[DEBUG] could not read: %s ", strerror(-err)); exit(1); } rados_aio_wait_for_complete(comp); res = rados_aio_get_return_value( comp ); rados_aio_release( comp ); if ( res < 0 ) { printf("[DEBUG] could not read: %s\n", strerror(-err)); exit(1); } sleep(1); printf("[DEBUG] bytes read: %d, psize: %d\n", res, psize); printf("[DEBUG] --\n%.*s\n[DEBUG] --\n", 60, buf+0); sleep(1); free(buf); buf = malloc( psize ); res = rados_read( io, id, buf, psize, 0 ); if (err < 0) { printf("[DEBUG] could not read: %s ", strerror(-err)); exit(1); } sleep(1); printf("[DEBUG] bytes read: %d, psize: %d\n", res, psize); printf("[DEBUG] --\n%.*s\n[DEBUG] --\n", 60, buf+0); sleep(1); free(buf); rados_ioctx_destroy(io); rados_shutdown(CephCluster); }