首页 > 编程语言 >使用c++ librados库操作ceph pool

使用c++ librados库操作ceph pool

时间:2022-09-07 19:35:10浏览次数:63  
标签:name int librados c++ ceph include pool

centos需要安装依赖:

yum install librados2

代码如下:

// 代码中使用到的部分参数:
// cluster_name      (默认为ceph)
// user_name         (默认为client.admin)
// conf_read_file    (默认为/etc/ceph/ceph.conf)
// pool_name         (自己创建一个pool)
// object_name       (pool内的对象)
#include <rados/librados.hpp>
#include <string>
#include <list>
#include <iostream>

int main(int argc, const char **argv)
{
    int ret = 0;
    // Get cluster handle and connect to cluster
    std::cout << "===ceph Cluster connect begin===" << std::endl;
    std::string cluster_name("ceph");                 
    std::string user_name("client.admin");
    librados::Rados cluster;
    ret = cluster.init2(user_name.c_str(), cluster_name.c_str(), 0);
    if (ret < 0)
    {
        std::cerr << "Couldn't initialize the cluster handle! error " << ret << std::endl;
        ret = EXIT_FAILURE;
        return 1;
    }

    ret = cluster.conf_read_file("/etc/ceph/ceph.conf");
    if (ret < 0)
    {
        std::cerr << "Couldn't read the Ceph configuration file! error " << ret << std::endl;
        ret = EXIT_FAILURE;
        return 1;
    }

    ret = cluster.connect();
    if (ret < 0)
    {
        std::cerr << "Couldn't connect to cluster! error " << ret << std::endl;
        ret = EXIT_FAILURE;
        return 1;
    }


    librados::IoCtx io_ctx;
    std::string pool_name("your pool name");
    ret = cluster.ioctx_create(pool_name.c_str(), io_ctx);
    if (ret < 0)
    {
        std::cerr << "Couldn't set up ioctx! error " << ret << std::endl;
        exit(EXIT_FAILURE);
    }
    std::string object_name("your object name");
    //write to pool
    librados::bufferlist write_buf;
    std::string write_content = "Hello stranger";
    write_buf.append(write_content);
    ret = io_ctx.write_full(object_name, write_buf);
    if (ret < 0)
    {
        std::cerr << "Couldn't write object! error " << ret << std::endl;
        exit(EXIT_FAILURE);
    }
    std::cout << "===Write success.===" << std::endl; 


    //read from pool
    librados::bufferlist read_buf;
    int read_len = 4194304;
    librados::AioCompletion *read_completion = librados::Rados::aio_create_completion();
    io_ctx.aio_read(object_name, read_completion, &read_buf, read_len, 0);
    read_completion->wait_for_complete();
    read_completion->get_return_value();
    std::cout << read_buf.c_str() << std::endl;
    std::cout << "===read success===" << std::endl;


    io_ctx.close();
    cluster.shutdown();
    return 0;
}

编译执行:

g++ -std=c++11 librados_test.cpp -o librados_test -lrados
sh librados_test

结果会把写入的内容打印出来

其他操作陆续补充中。。。

标签:name,int,librados,c++,ceph,include,pool
From: https://www.cnblogs.com/itsfei/p/16667005.html

相关文章

  • C++ 由快排学习到的的随机数等知识
    起:力扣的912题数组排序,想着先用快速排序来写写,在实际用c++编写的时候,有一些之前没注意到的细节问题造成了一些麻烦。912.排序数组-力扣(LeetCode)   快排......
  • Ceph集群应用基础-CephFS文件存储
    在mgr1上安装ceph-mds服务,可以和其他服务器混用(如ceph-mon、ceph-mgr)root@mgr1:~#apt-cachemadisonceph-mdsroot@mgr1:~#aptinstallceph-md=16.2.10-1bionic把mgr......
  • Ceph集群应用基础-RGW对象存储
    部署radodgw服务,将mgr服务器部署为RGW主机aptinstallradosgw=16.2.10-1bionicceph-deploy--overwrite-confrgwcreatemgr1 直接浏览器访问,能访问到说明启动成功......
  • Ceph集群应用基础-块存储RBD
    块存储RBD基础创建RBD创建存储池,制定pg和pgp的数量,pgp是对存在于pg的数据进行组合存储,pgp通常等于pg的值cephosdpoolcreatemyrbd16464对存储池启用RBD功能ceph......
  • ACM模式各种输入总结 C++
    一、整型数组输入:(很简单)在终端的一行中输入固定数目的整型数字,并存到数组中,中间以空格分隔。示例:3123intn;cin>>n;vector<int>nums(n);......
  • vscode环境配置(C/C++)
    一.MinGW和vscode的简单了解1.MinGW是什么?MinGW(MinimalistGNUonWindows)。它实际上是将经典的开源C语言编译器GCC移植到了Windows下,并且包含了Win32API,因此可......
  • c++知识点速刷
    语法指针和引用指针:存放某个对象的地址引用:变量的别名,从一而终,不可变,必须初始化const变量指针常量(底层const):指针所指的对象不可变常量指针(顶层const):指针不可变defin......
  • 强化学习——价值迭代算法 悬崖漫步为例 C++
    #include<bits/stdc++.h>usingnamespacestd;#defineN100#definecliffcliff_mapintrow,col;structState{intnext_i,next_j,flag;doublereward;......
  • vc++ get random via random_device,mt19937
     #include<ctime>#include<iostream>#include<random>usingnamespacestd;staticrandom_devicerd;staticmt19937mt{rd()};template<typenameT>vo......
  • [C++]类名加个括号是什么东东
    先考考大家,下面的代码,编译得过吗?classMyClass{public:MyClass(){printf("MyClass\n");}};int_tmain(intargc,_TCHAR*argv[]){......