Ceph中的序列化
转自:https://www.ustack.com/blog/cephxuliehua/

encode(struct inode, bufferlist bl);decode(struct inode, bufferlist::iterator bl);
utime_t timestamp;inode_t inode;bufferlist bl;::encode(timetamp, bl)::encode(inode, bl);
bufferlist::iterator bl;::decode(timetamp, bl)::decode(inode, bl);
- __u8, __s8, char, bool
- ceph_le64, ceph_le32, ceph_le16,
- float, double,
- uint64_t, int64_t, uint32_t, int32_t, uint16_t, int16_t,
- string, char*
struct ceph_mds_request_head {__le64 oldest_client_tid;__le32 mdsmap_epoch;__le32 flags;__u8 num_retry, num_fwd;__le16 num_releases;__le32 op;__le32 caller_uid, caller_gid;__le64 ino;} __attribute__ ((packed));
WRITE_RAW_ENCODER(ceph_mds_request_head)
- ceph_mds_request_head结构体定义在include/ceph_fs.h
- WRITE_RAW_ENCODER(ceph_mds_request_head)语句位于include/types.h
- WRITE_RAW_ENCODER宏函数定义在include/encoding.h
template<class T>inline void encode_raw(const T& t, bufferlist& bl){bl.append((char*)&t, sizeof(t));}template<class T>inline void decode_raw(T& t, bufferlist::iterator &p){p.copy(sizeof(t), (char*)&t);}
- 序列化集合大小,
- 序列化集合内的所有元素
template<class T>inline void encode(const std::vector<T>& v, bufferlist& bl){__u32 n = v.size();encode(n, bl);for (typename std::vector<T>::const_iterator p = v.begin(); p != v.end(); ++p)encode(*p, bl);}
- pair, triple
- list, set, vector, map, multimap
- hash_map, hash_set
- deque
- 在类型内部现实encode方法,
- 将类型内部的encode方法重定义为全局方法。
class utime_t {struct {__u32 tv_sec, tv_nsec;} tv;void encode(bufferlist &bl) const {::encode(tv.tv_sec, bl);::encode(tv.tv_nsec, bl);}void decode(bufferlist::iterator &p) {::decode(tv.tv_sec, p);::decode(tv.tv_nsec, p);}};WRITE_CLASS_ENCODER(utime_t)
Ceph中的序列化的更多相关文章
- .NET中XML序列化的总结
[题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- .net中对象序列化技术浅谈
.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...
- JavaScriptSerializer中日期序列化问题解决方案
JavaScriptSerializer中日期序列化问题解决方案 直接进入主题: class Student { public int age { get; set; } public DateTim ...
- 1 weekend110的复习 + hadoop中的序列化机制 + 流量求和mr程序开发
以上是,weekend110的yarn的job提交流程源码分析的复习总结 下面呢,来讲weekend110的hadoop中的序列化机制 1363157985066 13726230503 ...
- spring mvc3中JACKSON序列化日期格式的问题 - 墙头草的Java - BlogJava
body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...
- AFN中请求序列化的设置
最近遇到一个需求:要求从客户端传到服务器的参数是json字符串,于是我本能的用pod装了afn然后进行了request和response Serialization的相关设置 AFHTTPSessio ...
- 在Java中进行序列化和反序列化
对象序列化的目标是将对象保存在磁盘中,或者允许在网络中直接传输对象. 对象序列化允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上或者通过网络将这种二进制流传输 ...
随机推荐
- python面试题(三)
1 一行代码实现9*9乘法表 print ("\n".join("\t".join(["%s*%s=%s" %(x,y,x*y) for y ...
- 前端基础-html(1)
写在前面: 前端 后端 C(client) S(server) B(browser) S(server) 以用户为出发点 一.web标准 1)web ...
- golang接收get/post请求并返回json数据
// @router /d2 [post] func (c *MainController) D2() { // jsoninfo := c.GetString("ok") // ...
- Node.js的概念与应用
转:http://blog.jobbole.com/100058/?utm_source=blog.jobbole.com&utm_medium=relatedPosts Node.js 是什 ...
- 剑指offer 面试57题
面试57题: 题目:和为s的数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测 ...
- 更改计算机名称,影响TFS之前映射的工作区 使用。
今天把自己电脑的计算机名称改了,打开vs2012的时候,就提示以下的错误: ---------------------------Microsoft Visual Studio------------ ...
- imx6q 添加intel PCIE网卡
TQ_IMX6Q开发板移植rtl8168-PCIE转千兆网卡 一.配置内核选项PCIE总线驱动支持 默认的内核配置可能没有把PCIE的总线驱动编入内核,所以需要确认是否把驱动编译到了内核里面. 配置好 ...
- P4317 花神的数论题
题目 洛谷 数学方法学不会%>_<% 做法 爆搜二进制下存在\(i\)位\(1\)的情况,然后快速幂乘起来 My complete code #include<bits/stdc++ ...
- 老司机也该掌握的MySQL优化指南
当MySQL单表记录数过大时,增删改查性能都会急剧下降,所以我们本文会提供一些优化参考,大家可以参考以下步骤来优化: 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运 ...
- 一、安装虚拟机,配置ip地址
一.安装linux 注意点: 一.选择最小化安装的时候,要自定义安装软件,必须要安装下面的 如果没有安装上面的,需要用下面的命令来查询安装 如果没有安装就会出现各种问题 二.分区简单介绍 1.至少要一 ...