博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ceph librados接口说明
阅读量:6980 次
发布时间:2019-06-27

本文共 2895 字,大约阅读时间需要 9 分钟。

hot3.png

 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 <rados/librados.hpp>

#include <string>
#include <list>
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<std::string> pools ;
  cluster.pool_list(pools );
  std::cout  <<  "List of pools from this cluster handle" << std::endl ;
  for (std::list<std::string>::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的大小、时间

转载于:https://my.oschina.net/u/2271251/blog/369820

你可能感兴趣的文章
javascript promise编程
查看>>
python自定义库文件路径
查看>>
spring security之httpSecurity 专题
查看>>
org.springframework.jdbc.datasource
查看>>
HDU 4467 分块
查看>>
slurm用户快速入门手册
查看>>
使用最小堆优化Dijkstra算法
查看>>
选择排序
查看>>
韩顺平_JAVA_视频教程_下载(打开迅雷,直接复制链接地址即可下载)
查看>>
[android] 从gallery获取图片
查看>>
[日常] Go语言圣经-函数递归习题
查看>>
泛型中? super T和? extends T的区别
查看>>
Unity3D心得分享
查看>>
excel增加上一列的数值(日期)
查看>>
Java数据结构一 —— Java Collections API中的表
查看>>
2018-2019-1 20165206 《信息安全系统设计基础》第4周学习总结
查看>>
js canvas游戏初级demo-上下左右移动
查看>>
css3选择器二
查看>>
初学Java——选择
查看>>
转 微博 linux中ctime,mtime,atime的区别
查看>>