(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. oracle事务特性详解

    原子性 事务是一个完整的操作.事务的各步操作是不可分的(原子的):要么都执行,要么都不执行. -- 创建表 create table account_money ( id number(4) not ...

  2. Ubuntu12.04安装java以及Eclipse和Tomcat

    阔别已久的Java,现在捡起来偶感觉亚历山大啊,就单单一个环境的安装就搞得我焦头烂额啊.真后悔当初学习Java的时候没有记录下来这一门槛——环境的搭建,要知道学好一门语言,Develop Enviro ...

  3. 两个示例介绍JavaScript的闭包

    JavaScript的闭包有两个用途:一个是访问函数内部的变量:另一个是让变量的值在作用域内保持不变.函数是JavaScript 中唯一有作用域的对象,因此JavaScript的闭包依赖于函数实现,下 ...

  4. ext等待提示

    1.Store加载信息等待 ExtJs的Store在加载时候一般是延迟加载的,这时候Grid就会先出现一片空白,等加载完成后才出现数据:因此,我们需要给它添加一个提示信息! 但是Store却没有wai ...

  5. 安装vs2013 Sqlserver 无法连接远程服务器的解决方法

    以“管理员身份”启动cmd,执行“netsh winsock reset”命令.

  6. php 4.X与5.x版本构造函数区别与类的继承

    今天看ecshop源码的时候发现 构造函数是和类名一样,以前没接触过,一下子疑惑啦 HP4.x 版本: PHP 4.x 的构造函数名与类名相同.        注意:在子类里父类的构造函数不会自动执行 ...

  7. 浅谈Android序列化

    序列化原因 序列化的原因基本可以归纳为以下三种情况: 永久性保存对象,保存对象的字节序列到本地文件中: 对象在网络中传递: 对象在IPC间传递. --- --- 序列化方法 在Android系统中关于 ...

  8. poj1159 Palindrome

    G - 回文串 Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u   Descripti ...

  9. Codeforces 138D World of Darkraft

    有一个n*m 的棋盘,每个点上标记了L,R,X 中的一个每次能选择一个没有被攻击过的点(i,j),从这个点开始发射线,射线形状为:1. 若字符是 L,向左下角和右上角发,遇到被攻击过的点就停下来2. ...

  10. setNeedsDisplay 和 setNeedsLayout-b

    setNeedsDisplay: Marks the receiver’s entire bounds rectangle as needing to be redrawn. drawRect: Th ...