[ https://issues.apache.org/jira/browse/THRIFT-2429?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13958335#comment-13958335 ]
Randy Abernethy commented on THRIFT-2429: ----------------------------------------- Hey Jens, Thanks for looking this over. The possibility of out of sync defaults is not optimal to be sure. Things can get interesting when the reader and writer have different IDL versions involving default values. For example, presently if we have three versions of an IDL something like this: * 1: //1: i32 x #retired * 2: 1: i32 x = 5 * 3: 1: i32 x = 10 If a client using version 1 calls a server using version 2, that server assumes x of 5. If the same client calls another server offering the same interface but version 3, that server will set x to 10. This could produce unexpected results. This could happen in a staged roll out or in settings where multiple organizations are collaborating through the IDL with different release schedules and versioning priorities. This is just one example among many where IDL evolution with changing default values can pose a problem. The fact that this is a concern today, leads me to suggest that changing default values in IDL can be harmful. I think the proposed change is unlikely to break many (if any) existing interfaces, because defining a field as optional with a default value today means the optional modifier is almost always ignored. The optional modifier is also essentially a transmission optimization, allowing us to omit unnecessary data from the stream. I like the fact that in this proposal optional functions in the traditional way (as an optimization), making the transmission of the default value optional. So while this proposal does put one more cow pie in the changing default value meadow, the meadow had several cow pies already. In essence any use of defaults requires a hearty warning to ensure that your defaults are in synch across versions or that your interface semantics can cope with different default values in different subsystems. -Randy > Provide option to not write default values, rely on receiver default > construction instead > ----------------------------------------------------------------------------------------- > > Key: THRIFT-2429 > URL: https://issues.apache.org/jira/browse/THRIFT-2429 > Project: Thrift > Issue Type: Improvement > Components: C++ - Compiler > Affects Versions: 0.9.1 > Reporter: Chris Stylianou > Assignee: Randy Abernethy > Labels: default, optional, required > > Would there be any objections to a patch that does not write default values > (essentially the same logic as the optional attributes). This obviously > relies on the receiving application using the same IDL version to ensure the > defaults used on object construction match the senders. -- This message was sent by Atlassian JIRA (v6.2#6252)