關於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的數據就缺失該字段。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章