{"action":"created","comment":{"url":"https://api.github.com/repos/netty/netty/pulls/comments/82282081","pull_request_review_id":3201444,"id":82282081,"diff_hunk":"@@ -0,0 +1,237 @@\n+/*\n+ * Copyright 2016 The Netty Project\n+ *\n+ * The Netty Project licenses this file to you under the Apache License,\n+ * version 2.0 (the \"License\"); you may not use this file except in compliance\n+ * with the License. You may obtain a copy of the License at:\n+ *\n+ *   http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n+ * License for the specific language governing permissions and limitations\n+ * under the License.\n+ */\n+\n+package io.netty.handler.codec.http2;\n+\n+import io.netty.channel.Channel;\n+import io.netty.channel.ChannelFuture;\n+import io.netty.channel.ChannelHandler;\n+import io.netty.channel.ChannelHandler.Sharable;\n+import io.netty.channel.ChannelHandlerContext;\n+import io.netty.channel.ChannelOption;\n+import io.netty.channel.ChannelPipeline;\n+import io.netty.channel.EventLoop;\n+import io.netty.channel.EventLoopGroup;\n+import io.netty.util.AttributeKey;\n+import io.netty.util.internal.UnstableApi;\n+\n+import java.util.LinkedHashMap;\n+import java.util.Map;\n+\n+import static io.netty.util.internal.ObjectUtil.checkNotNull;\n+import static java.util.Collections.unmodifiableMap;\n+\n+/**\n+ * A class that makes it easy to bootstrap a new HTTP/2 stream as a {@link Channel}.\n+ *\n+ * <p>The bootstrap requires a registered parent {@link Channel} with a {@link ChannelPipeline} that contains the\n+ * {@link Http2MultiplexCodec}.\n+ *\n+ * <p>A child channel becomes active as soon as it is registered to an eventloop. Therefore, an active channel does not\n+ * map to an active HTTP/2 stream immediately. Only once a {@link Http2HeadersFrame} has been sent or received, does\n+ * the channel map to an active HTTP/2 stream. In case it was not possible to open a new HTTP/2 stream (i.e. due to\n+ * the maximum number of active streams being exceeded), the child channel receives an exception indicating the reason\n+ * and is closed immediately thereafter.\n+ *\n+ * <p>This class is thread-safe.\n+ */\n+// TODO(buchgr): Should we deliver a user event when the stream becomes active? For all stream states?\n+@UnstableApi\n+public class Http2StreamChannelBootstrap {\n+\n+    private volatile Channel parentChannel;\n+    private volatile Http2MultiplexCodec multiplexCodec;\n+    private volatile ChannelHandler handler;\n+    private volatile EventLoopGroup group;\n+    private final Map<ChannelOption<?>, Object> options;\n+    private final Map<AttributeKey<?>, Object> attributes;\n+\n+    // Lock for parentChannel and multiplexCodec\n+    private final Object lock = new Object();\n+\n+    public Http2StreamChannelBootstrap() {\n+        options = new LinkedHashMap<ChannelOption<?>, Object>();\n+        attributes = new LinkedHashMap<AttributeKey<?>, Object>();\n+    }\n+\n+    // Copy constructor\n+    Http2StreamChannelBootstrap(Http2StreamChannelBootstrap bootstrap0) {\n+        synchronized (bootstrap0.lock) {\n+            parentChannel = bootstrap0.parentChannel;\n+            multiplexCodec = bootstrap0.multiplexCodec;\n+        }\n+        handler = bootstrap0.handler;\n+        group = bootstrap0.group;\n+        synchronized (bootstrap0.options) {\n+            options = new LinkedHashMap<ChannelOption<?>, Object>(bootstrap0.options);\n+        }\n+        synchronized (bootstrap0.attributes) {\n+            attributes = new LinkedHashMap<AttributeKey<?>, Object>(bootstrap0.attributes);\n+        }\n+    }\n+\n+    /**\n+     * Creates a new channel that will eventually map to a local/outbound HTTP/2 stream.\n+     */\n+    public ChannelFuture connect() {\n+        return connect(-1);\n+    }\n+\n+    /**\n+     * Used by the {@link Http2MultiplexCodec} to instantiate incoming/remotely-created streams.\n+     */\n+    ChannelFuture connect(int streamId) {\n+        validateState();\n+\n+        Channel parentChannel0;\n+        Http2MultiplexCodec multiplexCodec0;\n+        synchronized (lock) {\n+            parentChannel0 = parentChannel;\n+            multiplexCodec0 = multiplexCodec;\n+        }\n+        EventLoopGroup group0 = group;\n+        group0 = group0 == null ? parentChannel.eventLoop() : group0;\n+        ChannelHandler handler0 = handler;\n+\n+        return multiplexCodec0.createStreamChannel(parentChannel0, group0, handler0, options, attributes, streamId);\n+    }\n+\n+    /**\n+     * Sets the parent channel that must have the {@link Http2MultiplexCodec} in its pipeline.\n+     *\n+     * @param parent a registered channel with the {@link Http2MultiplexCodec} in its pipeline. This channel will\n+     *               be the {@link Channel#parent()} of all channels created via {@link #connect()}.\n+     * @return {@code this}\n+     */\n+    public Http2StreamChannelBootstrap parentChannel(Channel parent) {\n+        synchronized (lock) {\n+            parentChannel = checkRegistered(checkNotNull(parent, \"parent\"));\n+            multiplexCodec = requireMultiplexCodec(parentChannel.pipeline());\n+        }\n+        return this;\n+    }\n+\n+    /**\n+     * Sets the channel handler that should be added to the channels's pipeline.\n+     *\n+     * @param handler   the channel handler to add to the channel's pipeline. The handler must be\n+     *                  {@link Sharable}.\n+     * @return {@code this}\n+     */\n+    public Http2StreamChannelBootstrap handler(ChannelHandler handler) {\n+        this.handler = checkSharable(checkNotNull(handler, \"handler\"));","path":"codec-http2/src/main/java/io/netty/handler/codec/http2/Http2StreamChannelBootstrap.java","position":121,"original_position":135,"commit_id":"f4110ca980ad1acfa077c427e4e1545c944f832f","original_commit_id":"f1cf2880db317174e4184f5787e2021c027668cd","user":{"login":"Scottmitch","id":7562868,"avatar_url":"https://avatars.githubusercontent.com/u/7562868?v=3","gravatar_id":"","url":"https://api.github.com/users/Scottmitch","html_url":"https://github.com/Scottmitch","followers_url":"https://api.github.com/users/Scottmitch/followers","following_url":"https://api.github.com/users/Scottmitch/following{/other_user}","gists_url":"https://api.github.com/users/Scottmitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Scottmitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Scottmitch/subscriptions","organizations_url":"https://api.github.com/users/Scottmitch/orgs","repos_url":"https://api.github.com/users/Scottmitch/repos","events_url":"https://api.github.com/users/Scottmitch/events{/privacy}","received_events_url":"https://api.github.com/users/Scottmitch/received_events","type":"User","site_admin":false},"body":"ok thanks sgtm","created_at":"2016-10-06T20:51:07Z","updated_at":"2016-10-06T20:51:07Z","html_url":"https://github.com/netty/netty/pull/5709#discussion_r82282081","pull_request_url":"https://api.github.com/repos/netty/netty/pulls/5709","_links":{"self":{"href":"https://api.github.com/repos/netty/netty/pulls/comments/82282081"},"html":{"href":"https://github.com/netty/netty/pull/5709#discussion_r82282081"},"pull_request":{"href":"https://api.github.com/repos/netty/netty/pulls/5709"}}},"pull_request":{"url":"https://api.github.com/repos/netty/netty/pulls/5709","id":81496689,"html_url":"https://github.com/netty/netty/pull/5709","diff_url":"https://github.com/netty/netty/pull/5709.diff","patch_url":"https://github.com/netty/netty/pull/5709.patch","issue_url":"https://api.github.com/repos/netty/netty/issues/5709","number":5709,"state":"open","locked":false,"title":"h2childchan: Ability to open outbound/local streams. Fixes #4913","user":{"login":"buchgr","id":1388179,"avatar_url":"https://avatars.githubusercontent.com/u/1388179?v=3","gravatar_id":"","url":"https://api.github.com/users/buchgr","html_url":"https://github.com/buchgr","followers_url":"https://api.github.com/users/buchgr/followers","following_url":"https://api.github.com/users/buchgr/following{/other_user}","gists_url":"https://api.github.com/users/buchgr/gists{/gist_id}","starred_url":"https://api.github.com/users/buchgr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/buchgr/subscriptions","organizations_url":"https://api.github.com/users/buchgr/orgs","repos_url":"https://api.github.com/users/buchgr/repos","events_url":"https://api.github.com/users/buchgr/events{/privacy}","received_events_url":"https://api.github.com/users/buchgr/received_events","type":"User","site_admin":false},"body":"Motivation:\r\n\r\nThe HTTP/2 child channel API does not allow to create local/outbound HTTP/2 streams.\r\n\r\nModifications:\r\n\r\nAdd a `Http2StreamChannelBootstrap` that allows to create outbound streams.\r\n\r\nResult:\r\n\r\nThe HTTP/2 child channel API now supports outbound streams.\r\n\r\nPTL @ejona86 @nmittler @Scottmitch @normanmaurer ","created_at":"2016-08-16T15:52:25Z","updated_at":"2016-10-06T20:51:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"07d682a687634cd37a1056717e709693af7dad22","assignee":{"login":"Scottmitch","id":7562868,"avatar_url":"https://avatars.githubusercontent.com/u/7562868?v=3","gravatar_id":"","url":"https://api.github.com/users/Scottmitch","html_url":"https://github.com/Scottmitch","followers_url":"https://api.github.com/users/Scottmitch/followers","following_url":"https://api.github.com/users/Scottmitch/following{/other_user}","gists_url":"https://api.github.com/users/Scottmitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Scottmitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Scottmitch/subscriptions","organizations_url":"https://api.github.com/users/Scottmitch/orgs","repos_url":"https://api.github.com/users/Scottmitch/repos","events_url":"https://api.github.com/users/Scottmitch/events{/privacy}","received_events_url":"https://api.github.com/users/Scottmitch/received_events","type":"User","site_admin":false},"assignees":[{"login":"Scottmitch","id":7562868,"avatar_url":"https://avatars.githubusercontent.com/u/7562868?v=3","gravatar_id":"","url":"https://api.github.com/users/Scottmitch","html_url":"https://github.com/Scottmitch","followers_url":"https://api.github.com/users/Scottmitch/followers","following_url":"https://api.github.com/users/Scottmitch/following{/other_user}","gists_url":"https://api.github.com/users/Scottmitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Scottmitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Scottmitch/subscriptions","organizations_url":"https://api.github.com/users/Scottmitch/orgs","repos_url":"https://api.github.com/users/Scottmitch/repos","events_url":"https://api.github.com/users/Scottmitch/events{/privacy}","received_events_url":"https://api.github.com/users/Scottmitch/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/netty/netty/milestones/153","html_url":"https://github.com/netty/netty/milestones/4.1.6.Final","labels_url":"https://api.github.com/repos/netty/netty/milestones/153/labels","id":1970211,"number":153,"title":"4.1.6.Final","description":"","creator":{"login":"normanmaurer","id":439362,"avatar_url":"https://avatars.githubusercontent.com/u/439362?v=3","gravatar_id":"","url":"https://api.github.com/users/normanmaurer","html_url":"https://github.com/normanmaurer","followers_url":"https://api.github.com/users/normanmaurer/followers","following_url":"https://api.github.com/users/normanmaurer/following{/other_user}","gists_url":"https://api.github.com/users/normanmaurer/gists{/gist_id}","starred_url":"https://api.github.com/users/normanmaurer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/normanmaurer/subscriptions","organizations_url":"https://api.github.com/users/normanmaurer/orgs","repos_url":"https://api.github.com/users/normanmaurer/repos","events_url":"https://api.github.com/users/normanmaurer/events{/privacy}","received_events_url":"https://api.github.com/users/normanmaurer/received_events","type":"User","site_admin":false},"open_issues":35,"closed_issues":39,"state":"open","created_at":"2016-08-29T17:38:52Z","updated_at":"2016-10-06T16:16:12Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/netty/netty/pulls/5709/commits","review_comments_url":"https://api.github.com/repos/netty/netty/pulls/5709/comments","review_comment_url":"https://api.github.com/repos/netty/netty/pulls/comments{/number}","comments_url":"https://api.github.com/repos/netty/netty/issues/5709/comments","statuses_url":"https://api.github.com/repos/netty/netty/statuses/f4110ca980ad1acfa077c427e4e1545c944f832f","head":{"label":"buchgr:newstreams","ref":"newstreams","sha":"f4110ca980ad1acfa077c427e4e1545c944f832f","user":{"login":"buchgr","id":1388179,"avatar_url":"https://avatars.githubusercontent.com/u/1388179?v=3","gravatar_id":"","url":"https://api.github.com/users/buchgr","html_url":"https://github.com/buchgr","followers_url":"https://api.github.com/users/buchgr/followers","following_url":"https://api.github.com/users/buchgr/following{/other_user}","gists_url":"https://api.github.com/users/buchgr/gists{/gist_id}","starred_url":"https://api.github.com/users/buchgr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/buchgr/subscriptions","organizations_url":"https://api.github.com/users/buchgr/orgs","repos_url":"https://api.github.com/users/buchgr/repos","events_url":"https://api.github.com/users/buchgr/events{/privacy}","received_events_url":"https://api.github.com/users/buchgr/received_events","type":"User","site_admin":false},"repo":{"id":17233219,"name":"netty","full_name":"buchgr/netty","owner":{"login":"buchgr","id":1388179,"avatar_url":"https://avatars.githubusercontent.com/u/1388179?v=3","gravatar_id":"","url":"https://api.github.com/users/buchgr","html_url":"https://github.com/buchgr","followers_url":"https://api.github.com/users/buchgr/followers","following_url":"https://api.github.com/users/buchgr/following{/other_user}","gists_url":"https://api.github.com/users/buchgr/gists{/gist_id}","starred_url":"https://api.github.com/users/buchgr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/buchgr/subscriptions","organizations_url":"https://api.github.com/users/buchgr/orgs","repos_url":"https://api.github.com/users/buchgr/repos","events_url":"https://api.github.com/users/buchgr/events{/privacy}","received_events_url":"https://api.github.com/users/buchgr/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/buchgr/netty","description":"Netty project - an event-driven asynchronous network application framework","fork":true,"url":"https://api.github.com/repos/buchgr/netty","forks_url":"https://api.github.com/repos/buchgr/netty/forks","keys_url":"https://api.github.com/repos/buchgr/netty/keys{/key_id}","collaborators_url":"https://api.github.com/repos/buchgr/netty/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/buchgr/netty/teams","hooks_url":"https://api.github.com/repos/buchgr/netty/hooks","issue_events_url":"https://api.github.com/repos/buchgr/netty/issues/events{/number}","events_url":"https://api.github.com/repos/buchgr/netty/events","assignees_url":"https://api.github.com/repos/buchgr/netty/assignees{/user}","branches_url":"https://api.github.com/repos/buchgr/netty/branches{/branch}","tags_url":"https://api.github.com/repos/buchgr/netty/tags","blobs_url":"https://api.github.com/repos/buchgr/netty/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/buchgr/netty/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/buchgr/netty/git/refs{/sha}","trees_url":"https://api.github.com/repos/buchgr/netty/git/trees{/sha}","statuses_url":"https://api.github.com/repos/buchgr/netty/statuses/{sha}","languages_url":"https://api.github.com/repos/buchgr/netty/languages","stargazers_url":"https://api.github.com/repos/buchgr/netty/stargazers","contributors_url":"https://api.github.com/repos/buchgr/netty/contributors","subscribers_url":"https://api.github.com/repos/buchgr/netty/subscribers","subscription_url":"https://api.github.com/repos/buchgr/netty/subscription","commits_url":"https://api.github.com/repos/buchgr/netty/commits{/sha}","git_commits_url":"https://api.github.com/repos/buchgr/netty/git/commits{/sha}","comments_url":"https://api.github.com/repos/buchgr/netty/comments{/number}","issue_comment_url":"https://api.github.com/repos/buchgr/netty/issues/comments{/number}","contents_url":"https://api.github.com/repos/buchgr/netty/contents/{+path}","compare_url":"https://api.github.com/repos/buchgr/netty/compare/{base}...{head}","merges_url":"https://api.github.com/repos/buchgr/netty/merges","archive_url":"https://api.github.com/repos/buchgr/netty/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/buchgr/netty/downloads","issues_url":"https://api.github.com/repos/buchgr/netty/issues{/number}","pulls_url":"https://api.github.com/repos/buchgr/netty/pulls{/number}","milestones_url":"https://api.github.com/repos/buchgr/netty/milestones{/number}","notifications_url":"https://api.github.com/repos/buchgr/netty/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/buchgr/netty/labels{/name}","releases_url":"https://api.github.com/repos/buchgr/netty/releases{/id}","deployments_url":"https://api.github.com/repos/buchgr/netty/deployments","created_at":"2014-02-27T02:09:39Z","updated_at":"2015-03-10T20:55:16Z","pushed_at":"2016-10-03T09:43:13Z","git_url":"git://github.com/buchgr/netty.git","ssh_url":"git@github.com:buchgr/netty.git","clone_url":"https://github.com/buchgr/netty.git","svn_url":"https://github.com/buchgr/netty","homepage":"http://netty.io/","size":38267,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"open_issues_count":0,"forks":3,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"netty:4.1","ref":"4.1","sha":"01af0baaf7ab2da23ffbf46b2a35cbe11fdbf494","user":{"login":"netty","id":473791,"avatar_url":"https://avatars.githubusercontent.com/u/473791?v=3","gravatar_id":"","url":"https://api.github.com/users/netty","html_url":"https://github.com/netty","followers_url":"https://api.github.com/users/netty/followers","following_url":"https://api.github.com/users/netty/following{/other_user}","gists_url":"https://api.github.com/users/netty/gists{/gist_id}","starred_url":"https://api.github.com/users/netty/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/netty/subscriptions","organizations_url":"https://api.github.com/users/netty/orgs","repos_url":"https://api.github.com/users/netty/repos","events_url":"https://api.github.com/users/netty/events{/privacy}","received_events_url":"https://api.github.com/users/netty/received_events","type":"Organization","site_admin":false},"repo":{"id":1064563,"name":"netty","full_name":"netty/netty","owner":{"login":"netty","id":473791,"avatar_url":"https://avatars.githubusercontent.com/u/473791?v=3","gravatar_id":"","url":"https://api.github.com/users/netty","html_url":"https://github.com/netty","followers_url":"https://api.github.com/users/netty/followers","following_url":"https://api.github.com/users/netty/following{/other_user}","gists_url":"https://api.github.com/users/netty/gists{/gist_id}","starred_url":"https://api.github.com/users/netty/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/netty/subscriptions","organizations_url":"https://api.github.com/users/netty/orgs","repos_url":"https://api.github.com/users/netty/repos","events_url":"https://api.github.com/users/netty/events{/privacy}","received_events_url":"https://api.github.com/users/netty/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/netty/netty","description":"Netty project - an event-driven asynchronous network application framework","fork":false,"url":"https://api.github.com/repos/netty/netty","forks_url":"https://api.github.com/repos/netty/netty/forks","keys_url":"https://api.github.com/repos/netty/netty/keys{/key_id}","collaborators_url":"https://api.github.com/repos/netty/netty/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/netty/netty/teams","hooks_url":"https://api.github.com/repos/netty/netty/hooks","issue_events_url":"https://api.github.com/repos/netty/netty/issues/events{/number}","events_url":"https://api.github.com/repos/netty/netty/events","assignees_url":"https://api.github.com/repos/netty/netty/assignees{/user}","branches_url":"https://api.github.com/repos/netty/netty/branches{/branch}","tags_url":"https://api.github.com/repos/netty/netty/tags","blobs_url":"https://api.github.com/repos/netty/netty/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/netty/netty/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/netty/netty/git/refs{/sha}","trees_url":"https://api.github.com/repos/netty/netty/git/trees{/sha}","statuses_url":"https://api.github.com/repos/netty/netty/statuses/{sha}","languages_url":"https://api.github.com/repos/netty/netty/languages","stargazers_url":"https://api.github.com/repos/netty/netty/stargazers","contributors_url":"https://api.github.com/repos/netty/netty/contributors","subscribers_url":"https://api.github.com/repos/netty/netty/subscribers","subscription_url":"https://api.github.com/repos/netty/netty/subscription","commits_url":"https://api.github.com/repos/netty/netty/commits{/sha}","git_commits_url":"https://api.github.com/repos/netty/netty/git/commits{/sha}","comments_url":"https://api.github.com/repos/netty/netty/comments{/number}","issue_comment_url":"https://api.github.com/repos/netty/netty/issues/comments{/number}","contents_url":"https://api.github.com/repos/netty/netty/contents/{+path}","compare_url":"https://api.github.com/repos/netty/netty/compare/{base}...{head}","merges_url":"https://api.github.com/repos/netty/netty/merges","archive_url":"https://api.github.com/repos/netty/netty/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/netty/netty/downloads","issues_url":"https://api.github.com/repos/netty/netty/issues{/number}","pulls_url":"https://api.github.com/repos/netty/netty/pulls{/number}","milestones_url":"https://api.github.com/repos/netty/netty/milestones{/number}","notifications_url":"https://api.github.com/repos/netty/netty/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/netty/netty/labels{/name}","releases_url":"https://api.github.com/repos/netty/netty/releases{/id}","deployments_url":"https://api.github.com/repos/netty/netty/deployments","created_at":"2010-11-09T09:22:21Z","updated_at":"2016-10-06T16:30:12Z","pushed_at":"2016-10-06T20:11:37Z","git_url":"git://github.com/netty/netty.git","ssh_url":"git@github.com:netty/netty.git","clone_url":"https://github.com/netty/netty.git","svn_url":"https://github.com/netty/netty","homepage":"http://netty.io/","size":72291,"stargazers_count":7931,"watchers_count":7931,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":4001,"mirror_url":null,"open_issues_count":342,"forks":4001,"open_issues":342,"watchers":7931,"default_branch":"4.1"}},"_links":{"self":{"href":"https://api.github.com/repos/netty/netty/pulls/5709"},"html":{"href":"https://github.com/netty/netty/pull/5709"},"issue":{"href":"https://api.github.com/repos/netty/netty/issues/5709"},"comments":{"href":"https://api.github.com/repos/netty/netty/issues/5709/comments"},"review_comments":{"href":"https://api.github.com/repos/netty/netty/pulls/5709/comments"},"review_comment":{"href":"https://api.github.com/repos/netty/netty/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/netty/netty/pulls/5709/commits"},"statuses":{"href":"https://api.github.com/repos/netty/netty/statuses/f4110ca980ad1acfa077c427e4e1545c944f832f"}}}}
{"actor":{"display_login":"Scottmitch"}}