{"action":"created","issue":{"url":"https://api.github.com/repos/akka/akka-http/issues/1301","repository_url":"https://api.github.com/repos/akka/akka-http","labels_url":"https://api.github.com/repos/akka/akka-http/issues/1301/labels{/name}","comments_url":"https://api.github.com/repos/akka/akka-http/issues/1301/comments","events_url":"https://api.github.com/repos/akka/akka-http/issues/1301/events","html_url":"https://github.com/akka/akka-http/pull/1301","id":245117097,"number":1301,"title":"[WIP] Http2 inbound flow control","user":{"login":"jrudolph","id":9868,"avatar_url":"https://avatars1.githubusercontent.com/u/9868?v=4","gravatar_id":"","url":"https://api.github.com/users/jrudolph","html_url":"https://github.com/jrudolph","followers_url":"https://api.github.com/users/jrudolph/followers","following_url":"https://api.github.com/users/jrudolph/following{/other_user}","gists_url":"https://api.github.com/users/jrudolph/gists{/gist_id}","starred_url":"https://api.github.com/users/jrudolph/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jrudolph/subscriptions","organizations_url":"https://api.github.com/users/jrudolph/orgs","repos_url":"https://api.github.com/users/jrudolph/repos","events_url":"https://api.github.com/users/jrudolph/events{/privacy}","received_events_url":"https://api.github.com/users/jrudolph/received_events","type":"User","site_admin":false},"labels":[{"id":436859583,"url":"https://api.github.com/repos/akka/akka-http/labels/tested","name":"tested","color":"d7e102","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2017-07-24T15:25:17Z","updated_at":"2017-07-24T15:37:57Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/akka/akka-http/pulls/1301","html_url":"https://github.com/akka/akka-http/pull/1301","diff_url":"https://github.com/akka/akka-http/pull/1301.diff","patch_url":"https://github.com/akka/akka-http/pull/1301.patch"},"body":"The tests pass but the code is not yet in its final shape. A few constants need to be converted to configuration values. There's currently only a simplistics strategy of sending out WINDOW_UPDATE frames. It is configured with maximum values for connection-level and stream-level windows. When outstanding + buffered data falls below half the maximum configured number it sends out a WINDOW_UPDATE frame to the peer.\r\n\r\nI think there are a few hard flow-control problems that cannot be easily solved (but putting it in strategies should help experimenting with other ones):\r\n * If `max-stream-level-window * num_connections > max-connection-level-window`, there can be head-of-line blocking between streams. Since this is only for uploads, it doesn't seem to be a serious concern for now, the client can still prioritize streams in any way it likes.\r\n * If the [BDP](https://en.wikipedia.org/wiki/Bandwidth-delay_product) is lower than the configured connection-level window, then there will be head-of-line blocking also for control frames (stuck in TCP buffers at the peer). If the BDP is higher than the configured connection-level window, then the full bandwidth will not be used. Any better solution would at least need some way of estimating the real, current but dynamic BDP. This problem is probably as hard as any kind of TCP congestion control. One potential building block could be trying to read the current BDP as estimated by the OS (`tcp_info` structure in Linux).\r\n\r\nRefs #737 \r\n"},"comment":{"url":"https://api.github.com/repos/akka/akka-http/issues/comments/317462785","html_url":"https://github.com/akka/akka-http/pull/1301#issuecomment-317462785","issue_url":"https://api.github.com/repos/akka/akka-http/issues/1301","id":317462785,"user":{"login":"akka-ci","id":2511948,"avatar_url":"https://avatars3.githubusercontent.com/u/2511948?v=4","gravatar_id":"","url":"https://api.github.com/users/akka-ci","html_url":"https://github.com/akka-ci","followers_url":"https://api.github.com/users/akka-ci/followers","following_url":"https://api.github.com/users/akka-ci/following{/other_user}","gists_url":"https://api.github.com/users/akka-ci/gists{/gist_id}","starred_url":"https://api.github.com/users/akka-ci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akka-ci/subscriptions","organizations_url":"https://api.github.com/users/akka-ci/orgs","repos_url":"https://api.github.com/users/akka-ci/repos","events_url":"https://api.github.com/users/akka-ci/events{/privacy}","received_events_url":"https://api.github.com/users/akka-ci/received_events","type":"User","site_admin":false},"created_at":"2017-07-24T15:37:57Z","updated_at":"2017-07-24T15:37:57Z","body":"Test PASSed.\n"}}
{"actor":{"display_login":"akka-ci"}}