千家信息网

ceph中librados接口怎么用

发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,小编给大家分享一下ceph中librados接口怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!rados_getxa
千家信息网最后更新 2025年02月05日ceph中librados接口怎么用

小编给大家分享一下ceph中librados接口怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

rados_getxattr获取对象属性
rados_getxattrs获取对象属性列表
rados_getxattrs_next从获取的对象属性列表中读取值
rados_getxattrs_end释放rados_getxattrs获取的指针
rados_setxattr设置对象的自定义属性
rados_rmxattr删除对象的自定义属性
rados_stat返回对象的时间、大小
rados_tmap_update
rados_tmap_put
rados_tmap_get

rados_tmap_to_omap

使用示例

#include
#include
#include
int main(int argc, const char **argv)
{
int ret = 0 ;

/*
* Errors are not checked to avoid pollution.
* After each Ceph operation:
* if (ret < 0) error_condition
* else success
*/

// Get cluster handle and connect to cluster
std::string cluster_name("ceph");
std::string user_name("client.admin");
librados::Rados cluster ;
cluster.init2(user_name.c_str(), cluster_name.c_str(), 0);
cluster.conf_read_file("/etc/ceph/ceph.conf");
cluster.connect();

// IO context
librados::IoCtx io_ctx ;
std::string pool_name("data");
cluster.ioctx_create(pool_name.c_str(), io_ctx);

// Write an object synchronously
librados::bufferlist bl;
std::string objectId("hw");
std::string objectContent("Hello World!");
bl.append(objectContent);
io_ctx.write(objectId, bl, objectContent.size(), 0);

// Add an xattr to the object.
librados::bufferlist lang_bl;
lang_bl.append("en_US");
io_ctx.setxattr(objectId, "lang", lang_bl);

// Read the object back asynchronously
librados::bufferlist read_buf;
int read_len = 4194304;
//Create I/O Completion.
librados::AioCompletion *read_completion = librados::Rados::aio_create_completion();
//Send read request.
io_ctx.aio_read(objectId, read_completion, &read_buf, read_len, 0 );

// Wait for the request to complete, and print content
read_completion->wait_for_complete();
read_completion->get_return_value();
std::cout<< "Object name: " << objectId << "\n"
<< "Content: " << read_buf.c_str() << std::endl ;

// Read the xattr.
librados::bufferlist lang_res;
io_ctx.getxattr(objectId, "lang", lang_res);
std::cout<< "Object xattr: " << lang_res.c_str() << std::endl ;


// Print the list of pools
std::list pools ;
cluster.pool_list(pools );
std::cout << "List of pools from this cluster handle" << std::endl ;
for (std::list::iterator i = pools.begin(); i != pools.end(); ++i)
std::cout << *i << std::endl;
// Print the list of objects
librados::ObjectIterator oit=io_ctx.objects_begin();
librados::ObjectIterator oet=io_ctx.objects_end();
std::cout<< "List of objects from this pool" << std::endl ;
for(; oit!= oet; oit++ ) {
std::cout << "\t" << oit->first << std::endl ;
}

// Remove the xattr
io_ctx.rmxattr(objectId, "lang");

// Remove the object.
io_ctx.remove(objectId);

// Cleanup
io_ctx.close();
cluster.shutdown();

return 0 ;
}

保存为cephrados.cpp,编译命令行如下

g++ cephrados.cpp -lrados -o cephrados

rados getxattr rbd.py lang -p data显示data池中对象rbd.py的扩展属性lang的值

rados listxattr -p data rbd.py显示data池中对象rbd.py的扩展属性,如果没有设置显示为空

rados stat rbd.py -p data 显示data池中对象rbd.py的大小、时间

以上是"ceph中librados接口怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0