{"action":"opened","number":1301,"pull_request":{"url":"https://api.github.com/repos/akka/akka-http/pulls/1301","id":132077416,"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","issue_url":"https://api.github.com/repos/akka/akka-http/issues/1301","number":1301,"state":"open","locked":false,"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},"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","created_at":"2017-07-24T15:25:17Z","updated_at":"2017-07-24T15:25:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/akka/akka-http/pulls/1301/commits","review_comments_url":"https://api.github.com/repos/akka/akka-http/pulls/1301/comments","review_comment_url":"https://api.github.com/repos/akka/akka-http/pulls/comments{/number}","comments_url":"https://api.github.com/repos/akka/akka-http/issues/1301/comments","statuses_url":"https://api.github.com/repos/akka/akka-http/statuses/8dac3f5134db79e5edc549a7de9bec67c4634c69","head":{"label":"jrudolph:jr/w/737/http2-inbound-flow-control","ref":"jr/w/737/http2-inbound-flow-control","sha":"8dac3f5134db79e5edc549a7de9bec67c4634c69","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},"repo":{"id":70703152,"name":"akka-http","full_name":"jrudolph/akka-http","owner":{"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},"private":false,"html_url":"https://github.com/jrudolph/akka-http","description":"The Streaming-first HTTP server/module of Akka","fork":true,"url":"https://api.github.com/repos/jrudolph/akka-http","forks_url":"https://api.github.com/repos/jrudolph/akka-http/forks","keys_url":"https://api.github.com/repos/jrudolph/akka-http/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jrudolph/akka-http/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jrudolph/akka-http/teams","hooks_url":"https://api.github.com/repos/jrudolph/akka-http/hooks","issue_events_url":"https://api.github.com/repos/jrudolph/akka-http/issues/events{/number}","events_url":"https://api.github.com/repos/jrudolph/akka-http/events","assignees_url":"https://api.github.com/repos/jrudolph/akka-http/assignees{/user}","branches_url":"https://api.github.com/repos/jrudolph/akka-http/branches{/branch}","tags_url":"https://api.github.com/repos/jrudolph/akka-http/tags","blobs_url":"https://api.github.com/repos/jrudolph/akka-http/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jrudolph/akka-http/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jrudolph/akka-http/git/refs{/sha}","trees_url":"https://api.github.com/repos/jrudolph/akka-http/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jrudolph/akka-http/statuses/{sha}","languages_url":"https://api.github.com/repos/jrudolph/akka-http/languages","stargazers_url":"https://api.github.com/repos/jrudolph/akka-http/stargazers","contributors_url":"https://api.github.com/repos/jrudolph/akka-http/contributors","subscribers_url":"https://api.github.com/repos/jrudolph/akka-http/subscribers","subscription_url":"https://api.github.com/repos/jrudolph/akka-http/subscription","commits_url":"https://api.github.com/repos/jrudolph/akka-http/commits{/sha}","git_commits_url":"https://api.github.com/repos/jrudolph/akka-http/git/commits{/sha}","comments_url":"https://api.github.com/repos/jrudolph/akka-http/comments{/number}","issue_comment_url":"https://api.github.com/repos/jrudolph/akka-http/issues/comments{/number}","contents_url":"https://api.github.com/repos/jrudolph/akka-http/contents/{+path}","compare_url":"https://api.github.com/repos/jrudolph/akka-http/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jrudolph/akka-http/merges","archive_url":"https://api.github.com/repos/jrudolph/akka-http/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jrudolph/akka-http/downloads","issues_url":"https://api.github.com/repos/jrudolph/akka-http/issues{/number}","pulls_url":"https://api.github.com/repos/jrudolph/akka-http/pulls{/number}","milestones_url":"https://api.github.com/repos/jrudolph/akka-http/milestones{/number}","notifications_url":"https://api.github.com/repos/jrudolph/akka-http/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jrudolph/akka-http/labels{/name}","releases_url":"https://api.github.com/repos/jrudolph/akka-http/releases{/id}","deployments_url":"https://api.github.com/repos/jrudolph/akka-http/deployments","created_at":"2016-10-12T13:35:05Z","updated_at":"2016-10-12T13:35:08Z","pushed_at":"2017-07-24T15:09:19Z","git_url":"git://github.com/jrudolph/akka-http.git","ssh_url":"git@github.com:jrudolph/akka-http.git","clone_url":"https://github.com/jrudolph/akka-http.git","svn_url":"https://github.com/jrudolph/akka-http","homepage":"http://akka.io","size":9594,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"akka:master","ref":"master","sha":"d680b4d6eb9050dc5f30bec39be09b0bffb70d4e","user":{"login":"akka","id":1496237,"avatar_url":"https://avatars2.githubusercontent.com/u/1496237?v=4","gravatar_id":"","url":"https://api.github.com/users/akka","html_url":"https://github.com/akka","followers_url":"https://api.github.com/users/akka/followers","following_url":"https://api.github.com/users/akka/following{/other_user}","gists_url":"https://api.github.com/users/akka/gists{/gist_id}","starred_url":"https://api.github.com/users/akka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akka/subscriptions","organizations_url":"https://api.github.com/users/akka/orgs","repos_url":"https://api.github.com/users/akka/repos","events_url":"https://api.github.com/users/akka/events{/privacy}","received_events_url":"https://api.github.com/users/akka/received_events","type":"Organization","site_admin":false},"repo":{"id":66077955,"name":"akka-http","full_name":"akka/akka-http","owner":{"login":"akka","id":1496237,"avatar_url":"https://avatars2.githubusercontent.com/u/1496237?v=4","gravatar_id":"","url":"https://api.github.com/users/akka","html_url":"https://github.com/akka","followers_url":"https://api.github.com/users/akka/followers","following_url":"https://api.github.com/users/akka/following{/other_user}","gists_url":"https://api.github.com/users/akka/gists{/gist_id}","starred_url":"https://api.github.com/users/akka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akka/subscriptions","organizations_url":"https://api.github.com/users/akka/orgs","repos_url":"https://api.github.com/users/akka/repos","events_url":"https://api.github.com/users/akka/events{/privacy}","received_events_url":"https://api.github.com/users/akka/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/akka/akka-http","description":"The Streaming-first HTTP server/module of Akka","fork":false,"url":"https://api.github.com/repos/akka/akka-http","forks_url":"https://api.github.com/repos/akka/akka-http/forks","keys_url":"https://api.github.com/repos/akka/akka-http/keys{/key_id}","collaborators_url":"https://api.github.com/repos/akka/akka-http/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/akka/akka-http/teams","hooks_url":"https://api.github.com/repos/akka/akka-http/hooks","issue_events_url":"https://api.github.com/repos/akka/akka-http/issues/events{/number}","events_url":"https://api.github.com/repos/akka/akka-http/events","assignees_url":"https://api.github.com/repos/akka/akka-http/assignees{/user}","branches_url":"https://api.github.com/repos/akka/akka-http/branches{/branch}","tags_url":"https://api.github.com/repos/akka/akka-http/tags","blobs_url":"https://api.github.com/repos/akka/akka-http/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/akka/akka-http/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/akka/akka-http/git/refs{/sha}","trees_url":"https://api.github.com/repos/akka/akka-http/git/trees{/sha}","statuses_url":"https://api.github.com/repos/akka/akka-http/statuses/{sha}","languages_url":"https://api.github.com/repos/akka/akka-http/languages","stargazers_url":"https://api.github.com/repos/akka/akka-http/stargazers","contributors_url":"https://api.github.com/repos/akka/akka-http/contributors","subscribers_url":"https://api.github.com/repos/akka/akka-http/subscribers","subscription_url":"https://api.github.com/repos/akka/akka-http/subscription","commits_url":"https://api.github.com/repos/akka/akka-http/commits{/sha}","git_commits_url":"https://api.github.com/repos/akka/akka-http/git/commits{/sha}","comments_url":"https://api.github.com/repos/akka/akka-http/comments{/number}","issue_comment_url":"https://api.github.com/repos/akka/akka-http/issues/comments{/number}","contents_url":"https://api.github.com/repos/akka/akka-http/contents/{+path}","compare_url":"https://api.github.com/repos/akka/akka-http/compare/{base}...{head}","merges_url":"https://api.github.com/repos/akka/akka-http/merges","archive_url":"https://api.github.com/repos/akka/akka-http/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/akka/akka-http/downloads","issues_url":"https://api.github.com/repos/akka/akka-http/issues{/number}","pulls_url":"https://api.github.com/repos/akka/akka-http/pulls{/number}","milestones_url":"https://api.github.com/repos/akka/akka-http/milestones{/number}","notifications_url":"https://api.github.com/repos/akka/akka-http/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/akka/akka-http/labels{/name}","releases_url":"https://api.github.com/repos/akka/akka-http/releases{/id}","deployments_url":"https://api.github.com/repos/akka/akka-http/deployments","created_at":"2016-08-19T11:33:36Z","updated_at":"2017-07-23T16:35:45Z","pushed_at":"2017-07-23T13:07:28Z","git_url":"git://github.com/akka/akka-http.git","ssh_url":"git@github.com:akka/akka-http.git","clone_url":"https://github.com/akka/akka-http.git","svn_url":"https://github.com/akka/akka-http","homepage":"http://akka.io","size":7967,"stargazers_count":397,"watchers_count":397,"language":"Scala","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":183,"mirror_url":null,"open_issues_count":429,"forks":183,"open_issues":429,"watchers":397,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/akka/akka-http/pulls/1301"},"html":{"href":"https://github.com/akka/akka-http/pull/1301"},"issue":{"href":"https://api.github.com/repos/akka/akka-http/issues/1301"},"comments":{"href":"https://api.github.com/repos/akka/akka-http/issues/1301/comments"},"review_comments":{"href":"https://api.github.com/repos/akka/akka-http/pulls/1301/comments"},"review_comment":{"href":"https://api.github.com/repos/akka/akka-http/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/akka/akka-http/pulls/1301/commits"},"statuses":{"href":"https://api.github.com/repos/akka/akka-http/statuses/8dac3f5134db79e5edc549a7de9bec67c4634c69"}},"merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":true,"commits":8,"additions":230,"deletions":47,"changed_files":6}}
{"actor":{"display_login":"jrudolph"}}