-
Notifications
You must be signed in to change notification settings - Fork 12
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
Define extension schema policy and registry #415
base: main
Are you sure you want to change the base?
Conversation
Alternative to #284. This follows Lennox's suggestion to take influence from RFC 8285 and reference extension schema according to a URI. IETF documents can use URNs under a formal namespace, and as such we register a new `qlog` URN Sub-namespace for Registered Protocol Parameter Identifiers. Fixes #283
@JonathanLennox I tried to borrow a lot from RFC 8285 but not take it fully verbatim. Would welcome your thoughts. |
This matches my suggestion, looks good to me! |
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.
Couple of things here that could use clarification, but in general I of course think this is a good approach :)
draft-ietf-quic-qlog-main-schema.md
Outdated
|
||
## Extended Event Schema | ||
|
||
New events SHOULD be defined using an extension schema, using the annotations |
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.
New events SHOULD be defined using an extension schema, using the annotations | |
New event documents SHOULD be defined using an extension schema, using the annotations |
Not clear it's not the individual events that are affected, but rather groups of events?
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.
Thought a bit more on this. What I think we want is for logical groups of qlog events to be defined under a single schema. There should not be a restriction that a single IETF document defines only a single schema - for example, we might want to have a single document that defines events for a bunch of QUIC extensions and split them out by extension-specific schemas.
I don't think the current text, or the proposal, articulate this well. Will try to come up with a some different text.
draft-ietf-quic-qlog-main-schema.md
Outdated
element and assignment of the URI MUST have been authorized by the owner of the | ||
domain name on or very close to that date. (This avoids problems when domain | ||
names change ownership.) If the resource or document defines several categories | ||
or groups of events, then the URI MUST identify the actual extension in use, |
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.
this could do with an example maybe? not sure what that would look like if you're for example using quic events... would you need to list #connectivity and #transport as separate subentries in additional_event_schema
or not? Where do you draw the line?
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.
Good point, this was another copy-paste. I could argue either way. On one hand, it seems annoying to have to expand out all the categories in e.g. our QUIC events specification. On the other hand, the capability to state what events a logging endpoint could have used has come up in other discussions, and this fragment identifier seems like a solution. It isn't clear to me though if the fragments need to be registered explicitly, so I'll follow up with the RTP folks.
I agree an example would be useful if we want to keep this feature.
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 option to say: if you don't define # or ?, then you mean EVERYTHING included in the URI. If you want to select only specific parts, use # or ? to specify that?
e.g., urn:ietf:params:qlog:quic means ALL QUIC events, while urn:ietf:params:qlog:quic#recovery means ONLY the recovery events and nothing else? How does RFC 8285 manage such things?
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.
This is an open question we should ask in the meeting
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 spoke with some people in the hallways. There's a reason that RFC 8285 does it that way, due to how RTP stuff works. However, everyone seemed to agree that requiring the full expansions wasn't that onerous and was more clear. Allowing the url without those seems like a microoptimization.
There's another reason the full expansion is nice. If any documents in the future extend a namespace, then its not clear what extensions are used or not. That makes the implicit include quite insipid.
Co-authored-by: Robin Marx <rmarx@akamai.com>
I pushed some changes to update the text in h3, if we like that approach I will carry it over to the quic doc. |
Co-authored-by: Robin Marx <rmarx@akamai.com>
On thinking some more, I think allowing extension of categories with new events is a complication we can avoid. Specifically, allowing different documents to extend a category risks non-unique event names if the document author is not careful with type names. For example. if Instead, we can enforce that new schema need to define new globally-unique categories. For example, if we wanted to add new quic events in the future as part of a rollup extension schema, we could define I pushed an update that attempts to explain all this. |
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.
As you'll see, a few remarks, most tiny, but a few that imo should be tackled.
I'm personally not a big fan of disallowing extensions to extend existing protocol/category namespaces... I get the rationale, but I think this will cause unnecessary churn and overhead for implementers (listing all extension docs in additional_event_schema
, requesting addition to IANA, tools having to decide how to validate etc.). That said... I don't really have a better solution atm to the issues this solves :(
If we do keep this, imo we do need to add some guidance on naming of new extensions for existing qlog definitions.
For example, https://www.ietf.org/archive/id/draft-ietf-tsvwg-careful-resume-07.html#name-cr_phase-event, is really a good fit for "quic:recovery", but wouldn't be able to just use that... so what should it do?
It can't just do quic-ext:recovery
because that would pollute quic-ext
for all other extensions... it can't do quic-rfcXYZA:recovery
because juck. It might do quic-careful-resume:recovery
but this should probably be recommended by the main spec to prevent a weird growth of these things going forward (UNLESS you expect all this to be caught in the IANA registration process, where expert reviews can catch quic-ext
and require it be renamed to something like quic-careful-resume
? even then though... a bit of prose with an example could be nice here).
This document registers a new entry in the "qlog event extension schema | ||
identifer" registry. | ||
|
||
Extension URI: |
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.
Not sure if this is actually an issue, but IIUC, this would mean that listing the H3 events in additional_event_schemas
will lead to a URI like this:
urn:ietf:params:qlog:h3#h3
Conceptually fine, but the duplication of h3 is a bit weird. Makes me wonder if in general we should go for the "full acronym" in the extension URI (i.e., http3 instead of h3, analogous to quic instead of q1)?
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.
yeah that makes sense
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.
how about urn:ietf:params:qlog:http#h3
? That would make it easy to add support for other HTTP versions or extensions as new catagories
that specify the name (category + type) and data needed for each individual | ||
event. Examples include the QUIC event definitions {{QLOG-QUIC}} and HTTP/3 | ||
event definitions {{QLOG-H3}}. | ||
It is not possible to extend a category with new events. Instead, extension |
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 is not possible to extend a category with new events. Instead, extension | |
It is not possible to extend an existing category, defined in a different document, with new events. Instead, extension |
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 don't think we need the "different document" qualification, there may be no document at all for something like a private extension. The blanket rule is always the same, no extension.
disambuiguated. | ||
|
||
Each extension schema is named by a URI. That URI MUST be absolute; it precisely | ||
identifies the format and meaning of the extension. URIs that contain a domain |
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.
Not exactly sure what the intention is of including "format" here... might be confused with "serialization format", which is certainly not the intent. Replace with a different word or remove?
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.
lol, still a hangover from copy/paste. What we should say here is that a schema URI precisely identifies the category name and the event type(s) (the CDDL definition)
|
||
A log file that uses events from extension schema SHOULD list all schema | ||
identifiers in the `additional_event_schemas` field; see {{qlog-file-schema}} | ||
and {{qlog-file-seq-schema}}. |
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.
So here, I'm wondering if we should give guidance to tools on how to actually use the additional_event_schemas
field? Like, they SHOULD use it to see if they support the listed event categories, but they SHOULD NOT bork on unexpected events (and rather just ignore them).
put differently: I think we need to make clear that tools/users MUST NOT treat this as a fully qualified list and expect all/none events to be present, but rather more as a hint to further improve operations.
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.
Yeah that would be good to have.
Co-authored-by: Robin Marx <rmarx@akamai.com>
I don't think it's that much extra work really. An IANA registration request is as simple as an email that will be forwarded to the designated experts (probably you, me and anyone else that wants to volunteer). Lazy implementations can omit the additional schema field at the cost of risk that tools will break. If we allowed extension to categories while only recommending that
The careful resume event is a good example but I disagree about your analysis. The definition of the event leaves it completely ambiguous about what category it belongs to, so it is unclear what it's serialized name would be. You seem to assume the event is for QUIC, but careful resume is a transport-independent. So, assuming we get this PR hammered out, the careful resume document would have clearer guidance to follow about defining an extension schema. My recommendation would for it to define a new URI like |
I agree, and that's why I said I also don't see a better solution (sadly) :)
So ok, maybe careful-resume can get away with its own identifier outside of quic :) but then let's assume a loss-bits extension that is specific to QUIC's header and defines the |
I don't think the schema identifier is that important, it's just a unique thing. Guidance for category identifiers would be useful but I'm not sure we have enough experience to be that helpful. It should reflect the expert guidance, the the category name should be specific and unique, and also keep in mind that it can't be extended in future. So if there's a loss bit extension schema that wanted to have different categories if could have urn:ietf:params:qlog:loss-bits#quic-loss-bits and urn:ietf:params:qlog:loss-bits#sctp-loss-bits. That does raise the question whether we should allow adding new categories to existing schema. That seems something that is OK. |
Alternative to #284.
This follows Lennox's suggestion to take influence from RFC 8285 and reference
extension schema according to a URI. IETF documents can use URNs under a formal
namespace, and as such we register a new
qlog
URN Sub-namespace forRegistered Protocol Parameter Identifiers.
Fixes #283