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对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上或者通过网络将这种二进制流传输 ...
随机推荐
- GAN综述
生成式对抗模型GAN (Generativeadversarial networks) 是Goodfellow等[1]在 2014年提出的一种生成式模型,目前已经成为人工智能学界一个热门的研究方向,著 ...
- 爬虫二 requests模块的使用
一.requests模块的介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:reques ...
- FTP主动连接与被动连接
FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,应用层的协议,它基于传输层, FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而 ...
- 【数学建模】MATLAB学习笔记——函数式文件
MATLAB学习笔记——函数式文件 引入函数式文件 说明: 函数式文件主要用于解决计算中的参数传递和函数调用的问题. 函数式的标志是它的第一行为function语句. 函数式文件可以有返回值,也可以没 ...
- highcharts基本介绍
转自:http://www.cnblogs.com/jyh317/p/4189773.html 一.highcharts简介 Highcharts是一款纯javascript编写的图表库,能够很简单便 ...
- PAT 天梯赛 L2-024. 部落 【并查集】
题目链接 https://www.patest.cn/contests/gplt/L2-024 题意 给出 几个不同的圈子,然后 判断 有哪些人 是属于同一个部落的,或者理解为 ,有哪些人 是有关系的 ...
- PAT 天梯赛 L1-033. 出生年 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-033 AC代码 #include <cstdio> #include <cstring> ...
- iOS获取某个日期后n个月的日期
一.给一个时间,给一个数,正数是以后n个月,负数是前n个月: -(NSDate *)getPriousorLaterDateFromDate:(NSDate *)date withMonth:(NSI ...
- 跨平台移动开发_PhoneGap 使用Accelerometer 加速器
使用Accelerometer 加速器效果图 示例代码 <!DOCTYPE html> <html> <head> <title> Cude Phone ...
- Django源码剖析
一.Django底层剖析之一次请求到响应的整个流程 As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端 #!/usr/bi ...