Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Protobuf] Make it possible to override field numbers using x-protobuf-index #7002

Merged
merged 1 commit into from
Jul 26, 2020

Conversation

k0ral
Copy link
Contributor

@k0ral k0ral commented Jul 20, 2020

As described in issue #6756 .
Cc: @dobl1 .

The protobuf generator currently does not guarantee that generated field numbers are preserved across multiple generations: it always generates them as a sequence from 0 to n (through the x-index vendor extension). If fields are re-ordered, added, or deleted, field numbers will almost always shift. This is a big deal, as field numbers are part of the binary interface of protobuf serialization format.

This change is making it possible to specify protobuf field numbers using the vendor extension x-protobuf-index. This is an opt-in feature at field level: if x-protobuf-index is not specified, then the current behavior based on x-index still applies. In other words: this is backward compatible.

For example, the following data definition:

Pet:
  type: object
  properties:
    id:
      type: integer
      x-protobuf-index: 3
    name:
      type: string
      x-protobuf-index: 1

... will generate the below protobuf message:

message Pet {
  int64 id = 3;
  string name = 1;
}

I do not expect this pull-request to be merged as-is, I rather see it as a conversation-starter: do you agree with the general approach ? How would you suggest I improve the implementation ? I'd rather get feedback before investing time in writing automated tests, for example. For now, I've just manually validated the behavior on a toy example.

PR checklist

  • Read the contribution guidelines.
  • If contributing template-only or documentation-only changes which will change sample output, build the project beforehand.
  • Run the shell script ./bin/generate-samples.shto update all Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master. These must match the expectations made by your contribution. You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*. For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master
  • Copy the technical committee to review the pull request if your PR is targeting a particular programming language.

@wing328
Copy link
Member

wing328 commented Jul 21, 2020

@k0ral k0ral force-pushed the protobuf-index branch 3 times, most recently from 52e1662 to 150fbf3 Compare July 25, 2020 15:42
@wing328 wing328 merged commit 8d63f75 into OpenAPITools:master Jul 26, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants