文档章节

ceph librados接口说明

 惊浪
发布于 2015/01/20 16:55
字数 448
阅读 2010
收藏 2
 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的大小、时间

© 著作权归作者所有

共有 人打赏支持
粉丝 16
博文 29
码字总数 17864
作品 0
福州
程序员
私信 提问
Ceph librados编程访问

引言 我需要针对Ceph的对象存储直接进行编程访问,看看用网关和不用网关下的性能差别。基于gate-way进行访问例子已经走通。现在 要测的是不走网关,用librados直接和Ceph集群打交道。 环境配...

西昆仑
2015/10/13
845
3
“CEPH浅析”系列之四——CEPH的结构

本文将从逻辑结构的角度对Ceph进行分析。 4.1 Ceph系统的层次结构 Ceph存储系统的逻辑层次结构如下图所示[1]。 自下向上,可以将Ceph系统分为四个层次: (1)基础存储系统RADOS(Reliable,...

Yason_Luo
2014/04/02
0
9
“Ceph浅析”系列之四——Ceph的结构

本文将从逻辑结构的角度对Ceph进行分析。 4.1 Ceph系统的层次结构 Ceph存储系统的逻辑层次结构如下图所示[1]。 自下向上,可以将Ceph系统分为四个层次: (1)基础存储系统RADOS(Reliable,...

红薯
2014/04/01
1K
0
Openstack之CEPH简介

Oepnstack之CEPH系列是根据Ceph Cookbook整理的笔记,分为以下几个部分: 1. 《Ceph简介》 2. 《Ceph集群操作》 3. 《Ceph块设备管理与Openstack配置》 4. 《深入Ceph》 5. 《ceph优化与性能...

hiubuntu
2016/11/30
0
0
Ceph逻辑架构

Ceph是一种存储行业最热门的软件定义存储技术,它为块存储、文件存储、对象存储提供了系统的软件定义解决方案。下面我们来了解Ceph的逻辑架构: Ceph monitor:Ceph monitor 通过保存一份集群...

Zai坚强一点
2017/09/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

7个习惯提升python效率

1. 使用本地变量 尽量使用局部变量,避免使用全局变量 2.减少函数调用 (1)当我们判断对象的类别的时候,尽量使用isinstance(),其次使用id(),最不济使用type()   type(num)==type(0) type(...

糖宝lsh
7分钟前
0
0
mongodb使用

【mongodb全库备份:】 #cd /usr/local/mongodb/bin # ./mongodump 则会在当前目录生成一个dump目录,整个库会备份在这个目录下。 【指定数据库备份】 # ./mongodump -h localhost -d Hawkey...

硅谷课堂
12分钟前
0
0
hive count distinct和group by

首先,Hive的group by和count(distinct)都是去除重复的数据,某种程度上来说,两者产生的结果是一样的。 实例代码: select a,count(distinct b) from t group by aselect tt.a,count(tt...

张欢19933
15分钟前
0
0
day180-2018-12-17-英语流利阅读-待学习

“黄马甲”再上巴黎街头,马克龙成为众矢之的 毛西 2018-12-17 1.今日导读 圣诞将至,但此时的法国人都在担心周六的到来,因为巴黎的“黄背心”抗议活动已经连续进行了四周,举国上下人心惶惶...

飞鱼说编程
17分钟前
6
0
Deepin 下安装 Docker

Docker官网上并没有提供关于 Deepin 的 Docker 安装教程,由于 Deepin 是基于 Debian 的,所以可以参照官网 Debian的安装教程安装,但 Deepin 在定制过程中进行了大量修改,所以使用官方教程...

临江仙卜算子
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部