Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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
Support for initial entries #432
Support for initial entries #432
Changes from 21 commits
c80d691
3db556a
a280b70
6c09da3
3b83f50
b8a8724
1632245
005df11
6625dbc
15a5911
3a10775
0202c3b
4264daf
25aadc5
ddc2af1
2c8b986
e26f9c5
3f6d536
4620bb9
34eb819
5c82d35
56e5a1d
254ad30
3f0c390
File filter
Filter by extension
Conversations
Jump to
There are no files selected for viewing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It occurs to me that handling this corner-case gracefully may be useful for cases where source code is dynamically-generated based on e.g. macros or other techniques. In such cases, certain "build profiles" may result in an empty
entries
list.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We already have a sentence explaining what we can and cannot do for
const
entries above -- would it make sense to move one of the two sentences so we can see the difference between const vs non-const in a single place?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe commit 16 removes this redundancy.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suspect just a
WriteRequest
?The protobuf parsers don't really support sequences of messages out of the box AFAIK, so if it was really just a concatenation of parsable protobuf blobs that would make things pretty hard to consume.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here is an example entries file written by p4c in text format: https://github.com/p4lang/p4c/blob/main/testdata/p4_16_samples_outputs/table-entries-ternary-bmv2.p4.entries.txt
It doesn't look like a
WriteRequest
message to me, since there are no fields of a WriteRequest message present there, only a sequence of 0 or moreUpdate
messages. If you tell me that is a validWriteRequest
message, I am happy to document it that way in the P4Runtime spec.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yup, the link you provided does show a valid
WriteRequest
.Actually it does: the
repeated updates
field is aWriteRequest
field [1], and the textproto you linked to contains a bunch ofupdates { ... }
.This is admittedly subtle, because the text proto format doesn't include an outer wrapper for the message that is being encoded. Instead, it just shows the fields of the message at the top-level.
That being said, the text format is ambiguous, this could be a dump of any proto message with a
repeated Update
field. And for the binary format, this distinction matters. So we shouldn't blindly claim this is aWriteRequest
. Do you happen to know where in the p4c source code this output gets created? From there it will be straightforward to tell the correct message type.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here is the p4c code that writes the entries file: https://github.com/p4lang/p4c/blob/main/control-plane/p4RuntimeSerializer.cpp#L973-L976
in case the line numbers go askew, the method name is
P4RuntimeEntriesConverter
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you would like to examing the binary and/or JSON format of the entries file generated by current open source p4c, in addition to the text format, they are all in the zip file attached to this comment.
tmp.zip
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't find the place where things get serialized, but I would consider the following a good-enough hint that the message is a
p4.v1.WriteRequest
: https://github.com/p4lang/p4c/blob/main/control-plane/p4RuntimeSerializer.cpp#L1327-L1328I also opened p4lang/p4c#4070 so people don't have to guess in the future.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there an easy way for you to parse the contents of the binary format entries file in the file
tmp.zip
attached in my previous comment, to determine whether it is a valid binaryWriteRequest
protobuf message? I suspect it probably is, but do not know any quick way to check.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Confirmed with a Google-internal CLI tool that entries.bin can be parsed as a
p4.v1.WriteRequest
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It may be good to further clarify that error applies to the entries with const only, not the whole contents of the entries file.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With the latest commit on this PR as of writing this comment, I have replaced the last paragraph of the new appendix with the following, in an attempt to clarify:
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.