关于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的数据就缺失该字段。thrift

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。