关于thrift字段修改的问题

关于thrift字段修改的问题,实验证明:

1,使用optional字段,不用判断是否设置。如果没有设置,内容为0(int)或者空(string)。

2,optional字段设置时,只能用__set_xx()赋值,否则无效。

3,required字段设置时,可以直接=赋值,也可以__set_xx()赋值。

4,更改字段的名字后,发送端更新,而接收端不更新,照样接收成功。只会带来编译问题。

5,更改字段的类型,如果该字段为optional,接收端其他字段照样接收,只是该字段的值为空(或0)。
如果该字段为required,接收端接收错误:无效数据格式(Invalid data)。

TProtocolException: Invalid data

6,末尾添加字段(不在末尾添加字段,相当于字段改名和修改类型)

optional和required都不会出错。此时发送端和接收端最好都更新,否则没有意义。

7,字段先后顺序可以改变,但字段前面对应的号不能改变,否则Invalid data。

顺序改变后,数字不是递增的,看来不爽。

8,删除字段(不管是中间的字段,还是末尾的字段)

如果删除的字段是required,则Invalid data,如果是optional,正常。

9,如果修改的字段是optional的另一个结构体,如果该字段不设置,任何修改都不会出错。一旦设置,就需要解析该结构体,解析出错
接收端显示:Invalid data

发送端显示:No more data to read.

10,假设存在这样的数据流,数据a由A发送给B,经过B处理后发送给C。如果数据a增加optional字段后,重新编译A和C,C接收到的数据a中新添加字段无效。如果再重新编译B,C接收到的数据该字段正常。可能原因:未编译的B由于不识别新加字段,所以解析时丢弃,发送给C的数据就缺失该字段。


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值