On Mon, Jun 8, 2015 at 7:43 AM, Colin Deasy <[email protected]> wrote:

> Hey,
>
> When reading
> https://developers.google.com/protocol-buffers/docs/proto#simple I see a
> stark warning indicating that "Required is Forever" advocating the use of
> optional with additional application level validation routines. This is
> because if at some point a required field is no longer written, the readers
> will break.
>
> However IMO, there are common cases where 'required' is a good thing -
> given that it's enforced only during encoding/decoding.
> For example there may be some field that is 'required' (right now) to both
> the reader and writer. Even if that changes at some point in the future to
> become optional, the reader would likely have to be updated regardless of
> the protocol decoding routine as it may make assumptions (reasonable
> considering it was required in the first place) on the presence of the
> field (e.g. the field being a key to a certain bit of data). In this case
> the approach would be to update the .proto of all readers to make that
> field optional, followed by updating all writers to remove the field.
>
In simpler scenarios, yes, it's possible to migrate a required field to
optional even though it's an incompatible change, but in a more complicated
system, where you have many different binaries using the same proto file
running on thousands of machines, it's hard to tell whether all readers of
a proto has been updated or not. You have to be very careful with such
changes, and if you miss one, bad things can happen.


> Given this, I feel that the current language of the linked document gives
> the impression that the 'required' attribute is a Bad Thing and should be
> avoided. I hope you can clarify if I'm missing some crucial bit of
> information regarding it's usage.
>
> Thanks
> Colin
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/protobuf.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to