Code change:
The priority groups are abandoned in favor of a single weighted dependency tree. The root node of the tree is the connection, assigned the stream identifier 0x0. By default, streams are assigned a stream dependency of 0x0 with a weight of 16.
Just read through it, I think it looks good. I'd like to understand how weight of the stream is calculated and changed. Here is my understanding: The effective weight of each stream is determined by traversing tree node, taking into account of distribution of weight of parent stream among siblings. This effective weight is temporal on the tree and initial weight is unchanged for a stream, so when reprioritizing that stream, its weight is initial one. For example, suppose we have the following dependency tree: X<--(w)--Y means that Y depends on X with weight w (and w is initial weight). Calculated effective weight is like this: If parent stream is closed, then its initial weight is distributed to among the child streams and this updates initial weight of child stream. So, after A was closed, the initial weight of streams becomes like this:
NAME thanks for this. I'll have to read through this more carefully before I comment. NAME that seems right. Note that this means that a server might want to maintain more precision on it's weight values than the 8 bits we mandate in the protocol. That said, if there are deep dependency trees and you are killing off nodes that are high up, at some point you will need to round off, so I think that how much precision is allocated is largely a discretionary thing.
Looks good. , Martin Thomson EMAIL:
It seems that we can make a stream to depend on stream 0x0 exclusively, which makes all existing connections its descendant. This is not possible in the current draft version. I wonder this can be directly proxy-able since stream 0x0 is imaginable stream.
Yea, the idea is that '0' is a reserved stream ID, and so it is safe to use it as a flag for saying that (effectively) any stream with '0' as a parent has no parent. , Tatsuhiro Tsujikawa wrote:
Well, then we should explicitly say that receiver must treat exclusive bit as 0 if stream ID field is 0.
NAME I would add an explicit hint to implementers that having more than 8 bits of internal precision is a good thing. NAME I think we should leave open the possibility to insert a new stream between the connexion and all its children, even if it's probably a large re-prioritization.
I think large re-prioritization is not a problem. If proxy gets such requests and it aggregates several frontend connections to single backend connection, inserting under stream 0x0 with exclusive flag set seems to be impossible in backend.
If it aggregates to a different backend connection it is not impossible to proxy. Consider streams A and B depend on stream 0x0 and are proxied to some backend connection as streams X and Y. If we get a new streams, C, that exclusively depends on 0x0, we can proxy it as stream Z by dropping the exclusive dependency and then re-prioritizing streams X and Y to depend on stream Z.
Yes, it works like that. But if we just don't allow 0x0 with exclusive dependency, we can do all priority stuff via proxy without doing any extra handling except for stream ID mappings.
Yep, true -- I don't have much of a preference -- if clients feel like it is not an important use case than I am perfectly happy to disallow it.
Is it possible to move this discussion to the mailing list? If you need comments from a client, I'm happy to take a look later. On Tue Apr 15 2014 at 9:39:56 AM, Jeff Pinner EMAIL wrote:

Related discussion:
text: frame.  Providing prioritization information is optional, so default values are used if no explicit indicator is provided (pri-default). <del> Explicit prioritization information can be provided for a stream to either allocate the stream to a priority group (pri-group), or to create a dependency on another stream (pri-depend). </del> 5.3.1. <del> All streams are assigned a priority group.  Each priority group is allocated a 31-bit identifier and an integer weight between 1 to 256 (inclusive). Specifying a priority group and weight for a stream causes the stream to be assigned to the identified priority group and for the weight for the group to be changed to the new value. Resources are divided proportionally between priority groups based on their weight.  For example, a priority group with weight 4 ideally receives one third of the resources allocated to a stream with weight 12. 5.3.2. </del> Each stream can be given an explicit dependency on another stream. Including a dependency expresses a preference to allocate resources <del> to the identified stream rather than to the dependent stream. A stream that is dependent on another stream becomes part of the priority group of the stream it depends on.  It belongs to the same dependency tree as the stream it depends on. </del> <ins> to the identified stream rather than to the dependent stream.  Each dependency is allocated an integer weight between 1 to 256 (inclusive). </ins> <del> A stream that is assigned directly to a priority group is not dependent on any other stream.  It is the root of a dependency tree inside its priority group. </del> <ins> The connection is the root of the dependency tree.  A stream that is not dependent on any other stream is given a stream dependency of 0x0 to signify the connection. </ins> When assigning a dependency on another stream, by default, the stream is added as a new dependency of the stream it depends on.  For