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对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上或者通过网络将这种二进制流传输 ...
随机推荐
- shutil 模块 高级的文件、文件夹、压缩包 处理模块
高级的文件.文件夹.压缩包 处理模块 # 将文件内容拷贝到另一个文件中 shutil.copyfileobj(fsrc, fdst[, length]) import shutil shutil.co ...
- 查看hive的配置信息
在启动hive时设置配置属性信息 $ bin/hive --hiveconf <property=value> 查看当前所有的配置信息 hive > set ; hive (db_h ...
- 卸载SQL Server 2008 (R2)
一.卸载SQL Server 2008 (R2) 1.找到控制面板,win8及win7都可以直接点解“开始”按钮找到. (Tip:win10系统的小盆友可以在“开始”菜单下点击“所有应用”,找到win ...
- 博客没内容可写了怎么办?找BD!
博客写了一段时间可能会感觉没内容可以写了,或者说同一个领域的内容写多了感觉有点千篇一律,这时要考虑扩展自己的写作领域,怎么去扩展呢?利用关键词工具可以衍生很多长尾词,当然这个有点牵强,有点为优化而优化 ...
- 20170411 F-02创建财务凭证
SAPMF05A 100 X 0 BDC_OKCODE /00 0 BKPF-BLDAT 20170411 0 BKPF-BLART SA 0 BKPF-BUK ...
- 方阵行列式并行化计算(OpenMP,MPI),并计算加速比
00][100].在创建方阵时,方阵的阶数N(N<100)由外部输入.然后用两层"for循环"来给方阵 p左上角 N×N个位置赋值.具体实现如下: /* * 定义矩阵阶数N ...
- github代码托管
下载github客户端软件 1) 官网下载help.github.com 2) 百度搜索,一般用于windows7以前的系统 安装github软件 按照软件提示安装即可.不过,博主倾向使用命令行工 ...
- 【转】ModelAndView 学习
http://blog.csdn.net/wavaya/article/details/6185226 ModelAndView 类别就如其名称所示,是代表了Spring Web MVC程式中呈现画面 ...
- MapX小试
需MapX 控件 string layerName = "12Q3_new"; string tabFile = string.Format(@"E:\map\地图\现在 ...
- 妙用php中的register_shutdown_function和fastcgi_finish_request
前言 在php中又两个方法都是在请求快结束的时候执行.方法名分别是 register_shutdown_function和fastcgi_finish_request.虽然执行的时机差不多,但是功能和 ...