(1)集群内部子版本协议类型宏定义:与公共协议保持独立性,以便消息类型和协议升级受影响

#define CEPH_OSDC_PROTOCOL   24 /* server/client */OSD服务器集群与客户端协议版本
#define CEPH_MDSC_PROTOCOL   32 /* server/client */MDS与客户端
#define CEPH_MONC_PROTOCOL   15 /* server/client */监控与客户端
#define CEPH_INO_ROOT  1 //根目录节点的inode号
#define CEPH_INO_CEPH  2        /* hidden .ceph dir */隐藏目录.ceph的inode节点号

/* arbitrary limit on max # of monitors (cluster of 3 is typical) */
#define CEPH_MAX_MON   31 //最大的监控集群数量

(2)文件布局:描述一个文件(inode)的数据布局
struct ceph_file_layout {
/* file -> object mapping */文件到对象的映射
__le32 fl_stripe_unit;     /* stripe unit, in bytes.  must be multiple
      of page size. */条带大小,必须是页的多倍
__le32 fl_stripe_count;    /* over this many objects */
__le32 fl_object_size;     /* until objects are this big, then move to
      new objects */
__le32 fl_cas_hash;        /* UNUSED.  0 = none; 1 = sha256 */

/* pg -> disk layout */PG到磁盘的布局
__le32 fl_object_stripe_unit;  /* UNUSED.  for per-object parity, if any */

/* object -> pg layout */对象到PG的布局
__le32 fl_pg_preferred; /* preferred primary for pg (-1 for none) */
__le32 fl_pg_pool;      /* namespace, crush ruleset, rep level */
} __attribute__ ((packed));

#define CEPH_MIN_STRIPE_UNIT 65536//最小的条带单位
//判断文件布局是否有效的函数
int ceph_file_layout_is_valid(const struct ceph_file_layout *layout)
{
__u32 su = le32_to_cpu(layout->fl_stripe_unit);//大小端转换
__u32 sc = le32_to_cpu(layout->fl_stripe_count);
__u32 os = le32_to_cpu(layout->fl_object_size);

/* stripe unit, object size must be non-zero, 64k increment */条带单元和对象大小非零
if (!su || (su & (CEPH_MIN_STRIPE_UNIT-1)))
return 0;
if (!os || (os & (CEPH_MIN_STRIPE_UNIT-1)))
return 0;
/* object size must be a multiple of stripe unit */对象大小必须是条带的整数倍
if (os < su || os % su)
return 0;
/* stripe count must be non-zero */条带数量非零
if (!sc)
return 0;
return 1;
}


struct ceph_dir_layout {//目录的布局
__u8   dl_dir_hash;   /* see ceph_hash.h for ids */
__u8   dl_unused1;
__u16  dl_unused2;
__u32  dl_unused3;
} __attribute__ ((packed));


(3)加密算法和安全权限协议宏定义:
#define CEPH_CRYPTO_NONE 0x0 //没有加密
#define CEPH_CRYPTO_AES  0x1 //AES加密

#define CEPH_AES_IV "cephsageyudagreg"

#define CEPH_AUTH_UNKNOWN
0x0 //不知道的权限
#define CEPH_AUTH_NONE
 
0x1 //没有权限
#define CEPH_AUTH_CEPHX
 
0x2 // CEPHX
 
#define CEPH_AUTH_UID_DEFAULT ((__u64) -1)

ceph主要数据结构解析3-Ceph_fs.h文件的更多相关文章

  1. ceph主要数据结构解析2-Rados.h文件

    (1)文件系统id结构:16个字符组成 struct ceph_fsid { unsigned char fsid[16]; }; 以及对应的比较函数: static inline int ceph_ ...

  2. 对于.h文件和.c文件

    C语言中.h文件和.c文件详细解析_云止水_新浪博客http://blog.sina.com.cn/s/blog_73006d600102wcx5.html

  3. C++学了这么多年,你也许不知道为什么类定义要放在.h文件,类实现放在cpp文件。它们如何关联?

    原文  http://blog.csdn.net/ithzhang/article/details/8119286 主题 C++  C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类 ...

  4. .c和.h文件的区别(转载)

    一个简单的问题:.c和.h文件的区别学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼:子程序不要定义在 ...

  5. 读书笔记-详解C程序开发中 .c和.h文件的区别

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

  6. .c和.h文件的区别(头文件与之实现文件的的关系~ )

     .c和.h文件的区别 一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢 ...

  7. 深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  8. Unity的Json解析<一>--读取Json文件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50373558 作者:car ...

  9. OpenGL常见错误之——glut.h文件的函数无法正常连接

    glut.h文件的函数无法正常连接,典型的错误如下:------ 已启动生成: 项目: gears, 配置: Debug Win32 ------1>正在链接...1>GEARS.obj ...

随机推荐

  1. Hadoop配置项整理(mapred-site.xml)【转】

    本文转自:http://slaytanic.blog.51cto.com/2057708/1101360 name value Description hadoop.job.history.locat ...

  2. 015_xml_函数

    015_xml_函数 --环境准备******************************************************************* USE test --f:/t ...

  3. XCode的一些调试技巧

    XCode 内置GDB,我们可以在命令行中使用 GDB 命令来调试我们的程序.下面将介绍一些常用的命令以及调试技巧. po 命令:为 print object 的缩写,显示对象的文本描述(显示从对象的 ...

  4. UILabel,UITextField,UIButton三大基础控件总结

    (一)UILabel空件 属性: 1.背景颜色 label.backgroundColor = [UIColor ***]; 2. 显示文字: label.text = @"******&q ...

  5. Ubuntu安装google chrome过程

    Ubuntu安装google chrome过程: # wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd6 ...

  6. 【USACO 1.5.3】特殊的质数肋骨

    [题目描述]农民约翰的母牛总是生产出最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数 ...

  7. Reverse Interger

    Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Have you ...

  8. mybatis 学习笔记(4) —— 批量新增数据

    1.业务是从前台传入List<T> ,在controller层接受参数,并进行批量新增操作. 2.需要处理的细节 a) mybatis可以支持批量新增,注意数据表需要将主键设置成自增列. ...

  9. js学习笔记之:数组(二)

    今天来学习一下数组的遍历.删除等知识点:    1 数组的遍历 数组元素的遍历可以使用for循环,采用关键字for...in var aCity =  new Array("北京" ...

  10. Linux 下 将使用Python-Django开发的web应用布置到服务器上(亲测有效)

    写在前面: Django是一个卓越的新一代Web框架,相信使用Python的人对此并不陌生,但将我们完成的web应用布置到到服务器上并不是一件容易的事情. Django详细的教程可以参考http:// ...