{"action":"created","comment":{"url":"https://api.github.com/repos/apache/trafficserver/pulls/comments/228344048","pull_request_review_id":168598305,"id":228344048,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyODM0NDA0OA==","diff_hunk":"@@ -0,0 +1,97 @@\n+/** @file\n+\n+  publisher.h - Redis publisher\n+\n+  @section license License\n+\n+  Licensed to the Apache Software Foundation (ASF) under one\n+  or more contributor license agreements.  See the NOTICE file\n+  distributed with this work for additional information\n+  regarding copyright ownership.  The ASF licenses this file\n+  to you under the Apache License, Version 2.0 (the\n+  \"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,\n+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+  See the License for the specific language governing permissions and\n+  limitations under the License.\n+\n+ */\n+\n+#ifndef _PUBLISHER_H_\n+#define _PUBLISHER_H_\n+\n+#include <string>\n+#include <deque>\n+#include <vector>\n+#include <semaphore.h>\n+#include <hiredis/hiredis.h>\n+#include \"message.h\"\n+#include \"globals.h\"\n+#include \"redis_endpoint.h\"\n+#include \"simple_pool.h\"\n+#include \"tscore/HashFNV.h\"\n+\n+class RedisPublisher\n+{\n+  std::string redis_passwd;\n+  std::deque<Message> m_messageQueue;\n+  ::pthread_mutex_t m_messageQueueMutex;\n+  ::sem_t m_workerSem;\n+\n+  std::vector<RedisEndpoint> m_redisEndpoints;\n+  std::string m_redisEndpointsStr;\n+  int m_endpointIndex;\n+  ::pthread_mutex_t m_endpointIndexMutex;\n+\n+  std::vector<simple_pool *> pools;\n+\n+  unsigned int m_numWorkers;\n+  unsigned int m_redisConnectTimeout; // milliseconds\n+  unsigned int m_redisConnectTries;\n+  unsigned int m_redisPublishTries;\n+  unsigned int m_redisRetryDelay; // milliseconds\n+  unsigned int m_maxQueuedMessages;\n+  unsigned int m_poolRedisConnectTimeout; // milliseconds\n+\n+  bool err;\n+\n+  void runWorker();\n+\n+  ::redisContext *setup_connection(const RedisEndpoint &re);\n+  void teardown_connection(::redisContext *context);\n+\n+  ::redisReply *send_publish(::redisContext **ctx, const RedisEndpoint &re, const Message &msg);\n+  ::redisReply *set_session(const Message &msg);\n+  void clear_reply(::redisReply *reply);\n+\n+  uint32_t\n+  get_hash_index(const std::string &str) const\n+  {\n+    ATSHash32FNV1a hashFNV;\n+    hashFNV.update(str.c_str(), str.length());\n+    return hashFNV.get();\n+  }\n+\n+  uint32_t\n+  get_next_index(uint32_t index) const\n+  {\n+    return (index + 1) % m_redisEndpoints.size();\n+  }\n+\n+  int signal_cleanup();\n+  friend void *start_worker_thread(void *arg);","path":"plugins/experimental/ssl_session_reuse/src/publisher.h","position":87,"original_position":87,"commit_id":"c622290ba63965aa3393fb6291cd577cfd35b000","original_commit_id":"c622290ba63965aa3393fb6291cd577cfd35b000","user":{"login":"shinrich","id":334488,"node_id":"MDQ6VXNlcjMzNDQ4OA==","avatar_url":"https://avatars0.githubusercontent.com/u/334488?v=4","gravatar_id":"","url":"https://api.github.com/users/shinrich","html_url":"https://github.com/shinrich","followers_url":"https://api.github.com/users/shinrich/followers","following_url":"https://api.github.com/users/shinrich/following{/other_user}","gists_url":"https://api.github.com/users/shinrich/gists{/gist_id}","starred_url":"https://api.github.com/users/shinrich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shinrich/subscriptions","organizations_url":"https://api.github.com/users/shinrich/orgs","repos_url":"https://api.github.com/users/shinrich/repos","events_url":"https://api.github.com/users/shinrich/events{/privacy}","received_events_url":"https://api.github.com/users/shinrich/received_events","type":"User","site_admin":false},"body":"Agreed.","created_at":"2018-10-25T21:40:28Z","updated_at":"2018-10-25T21:40:28Z","html_url":"https://github.com/apache/trafficserver/pull/4125#discussion_r228344048","pull_request_url":"https://api.github.com/repos/apache/trafficserver/pulls/4125","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/comments/228344048"},"html":{"href":"https://github.com/apache/trafficserver/pull/4125#discussion_r228344048"},"pull_request":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/4125"}},"in_reply_to_id":224839590},"pull_request":{"url":"https://api.github.com/repos/apache/trafficserver/pulls/4125","id":208983176,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA4OTgzMTc2","html_url":"https://github.com/apache/trafficserver/pull/4125","diff_url":"https://github.com/apache/trafficserver/pull/4125.diff","patch_url":"https://github.com/apache/trafficserver/pull/4125.patch","issue_url":"https://api.github.com/repos/apache/trafficserver/issues/4125","number":4125,"state":"open","locked":false,"title":"ssl_session_reuse plugin","user":{"login":"shinrich","id":334488,"node_id":"MDQ6VXNlcjMzNDQ4OA==","avatar_url":"https://avatars0.githubusercontent.com/u/334488?v=4","gravatar_id":"","url":"https://api.github.com/users/shinrich","html_url":"https://github.com/shinrich","followers_url":"https://api.github.com/users/shinrich/followers","following_url":"https://api.github.com/users/shinrich/following{/other_user}","gists_url":"https://api.github.com/users/shinrich/gists{/gist_id}","starred_url":"https://api.github.com/users/shinrich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shinrich/subscriptions","organizations_url":"https://api.github.com/users/shinrich/orgs","repos_url":"https://api.github.com/users/shinrich/repos","events_url":"https://api.github.com/users/shinrich/events{/privacy}","received_events_url":"https://api.github.com/users/shinrich/received_events","type":"User","site_admin":false},"body":"This is based on a plugin that has been running within Yahoo/Oath for over 4 years.  Many people have contributed this this plugin over that time.  @suenway was one of the original developers.\r\n\r\nAbout a year ago @DaveThompson rewrote our Ticket support (STEK) to locally generate and distribute new ticket keys in fixed intervals within a group of servers.  The previous version relied on installed ticket key files from a central location which means they rotated very rarely.\r\n\r\nWe recently leveraged additions to the TSAPI to remove use of another library for external persistence and install used the Traffic Server session cache.  We have been running that version in production for 6 months or so.\r\n\r\n@persiaAziz then took a pass to remove the last of the Yahoo-specific support libraries.  She did dev testing on that, but we have not run this version in production.  Therefore, I put a WIP label on this PR.  I need to push this back and do some prod testing to make sure we didn't break anything in the cleanup.   I did want to put something up, to push things along and give people an early look.\r\n\r\nFrom April I looked at a few our our installations in the TLS session resumptions were around 30-50% of all TLS connections.   Session resumption is still a useful performance benefit.\r\n\r\nThe hiredis-devel package must be present to build the ssl_session_reuse library, so it seems unlikely that the CI build will do much with this code.","created_at":"2018-08-16T20:59:52Z","updated_at":"2018-10-25T21:40:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a15e1c0b8de36d67221ad054491c9f6375929c55","assignee":{"login":"shinrich","id":334488,"node_id":"MDQ6VXNlcjMzNDQ4OA==","avatar_url":"https://avatars0.githubusercontent.com/u/334488?v=4","gravatar_id":"","url":"https://api.github.com/users/shinrich","html_url":"https://github.com/shinrich","followers_url":"https://api.github.com/users/shinrich/followers","following_url":"https://api.github.com/users/shinrich/following{/other_user}","gists_url":"https://api.github.com/users/shinrich/gists{/gist_id}","starred_url":"https://api.github.com/users/shinrich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shinrich/subscriptions","organizations_url":"https://api.github.com/users/shinrich/orgs","repos_url":"https://api.github.com/users/shinrich/repos","events_url":"https://api.github.com/users/shinrich/events{/privacy}","received_events_url":"https://api.github.com/users/shinrich/received_events","type":"User","site_admin":false},"assignees":[{"login":"shinrich","id":334488,"node_id":"MDQ6VXNlcjMzNDQ4OA==","avatar_url":"https://avatars0.githubusercontent.com/u/334488?v=4","gravatar_id":"","url":"https://api.github.com/users/shinrich","html_url":"https://github.com/shinrich","followers_url":"https://api.github.com/users/shinrich/followers","following_url":"https://api.github.com/users/shinrich/following{/other_user}","gists_url":"https://api.github.com/users/shinrich/gists{/gist_id}","starred_url":"https://api.github.com/users/shinrich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shinrich/subscriptions","organizations_url":"https://api.github.com/users/shinrich/orgs","repos_url":"https://api.github.com/users/shinrich/repos","events_url":"https://api.github.com/users/shinrich/events{/privacy}","received_events_url":"https://api.github.com/users/shinrich/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":374860701,"node_id":"MDU6TGFiZWwzNzQ4NjA3MDE=","url":"https://api.github.com/repos/apache/trafficserver/labels/Plugins","name":"Plugins","color":"fbca04","default":false},{"id":374863192,"node_id":"MDU6TGFiZWwzNzQ4NjMxOTI=","url":"https://api.github.com/repos/apache/trafficserver/labels/TLS","name":"TLS","color":"006b75","default":false}],"milestone":{"url":"https://api.github.com/repos/apache/trafficserver/milestones/19","html_url":"https://github.com/apache/trafficserver/milestone/19","labels_url":"https://api.github.com/repos/apache/trafficserver/milestones/19/labels","id":3358032,"node_id":"MDk6TWlsZXN0b25lMzM1ODAzMg==","number":19,"title":"9.0.0","description":"","creator":{"login":"bryancall","id":216749,"node_id":"MDQ6VXNlcjIxNjc0OQ==","avatar_url":"https://avatars3.githubusercontent.com/u/216749?v=4","gravatar_id":"","url":"https://api.github.com/users/bryancall","html_url":"https://github.com/bryancall","followers_url":"https://api.github.com/users/bryancall/followers","following_url":"https://api.github.com/users/bryancall/following{/other_user}","gists_url":"https://api.github.com/users/bryancall/gists{/gist_id}","starred_url":"https://api.github.com/users/bryancall/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bryancall/subscriptions","organizations_url":"https://api.github.com/users/bryancall/orgs","repos_url":"https://api.github.com/users/bryancall/repos","events_url":"https://api.github.com/users/bryancall/events{/privacy}","received_events_url":"https://api.github.com/users/bryancall/received_events","type":"User","site_admin":false},"open_issues":55,"closed_issues":185,"state":"open","created_at":"2018-05-18T19:12:59Z","updated_at":"2018-10-25T18:59:32Z","due_on":"2019-06-30T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/apache/trafficserver/pulls/4125/commits","review_comments_url":"https://api.github.com/repos/apache/trafficserver/pulls/4125/comments","review_comment_url":"https://api.github.com/repos/apache/trafficserver/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/trafficserver/issues/4125/comments","statuses_url":"https://api.github.com/repos/apache/trafficserver/statuses/c622290ba63965aa3393fb6291cd577cfd35b000","head":{"label":"shinrich:ssl_session_reuse","ref":"ssl_session_reuse","sha":"c622290ba63965aa3393fb6291cd577cfd35b000","user":{"login":"shinrich","id":334488,"node_id":"MDQ6VXNlcjMzNDQ4OA==","avatar_url":"https://avatars0.githubusercontent.com/u/334488?v=4","gravatar_id":"","url":"https://api.github.com/users/shinrich","html_url":"https://github.com/shinrich","followers_url":"https://api.github.com/users/shinrich/followers","following_url":"https://api.github.com/users/shinrich/following{/other_user}","gists_url":"https://api.github.com/users/shinrich/gists{/gist_id}","starred_url":"https://api.github.com/users/shinrich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shinrich/subscriptions","organizations_url":"https://api.github.com/users/shinrich/orgs","repos_url":"https://api.github.com/users/shinrich/repos","events_url":"https://api.github.com/users/shinrich/events{/privacy}","received_events_url":"https://api.github.com/users/shinrich/received_events","type":"User","site_admin":false},"repo":{"id":22690186,"node_id":"MDEwOlJlcG9zaXRvcnkyMjY5MDE4Ng==","name":"trafficserver","full_name":"shinrich/trafficserver","private":false,"owner":{"login":"shinrich","id":334488,"node_id":"MDQ6VXNlcjMzNDQ4OA==","avatar_url":"https://avatars0.githubusercontent.com/u/334488?v=4","gravatar_id":"","url":"https://api.github.com/users/shinrich","html_url":"https://github.com/shinrich","followers_url":"https://api.github.com/users/shinrich/followers","following_url":"https://api.github.com/users/shinrich/following{/other_user}","gists_url":"https://api.github.com/users/shinrich/gists{/gist_id}","starred_url":"https://api.github.com/users/shinrich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shinrich/subscriptions","organizations_url":"https://api.github.com/users/shinrich/orgs","repos_url":"https://api.github.com/users/shinrich/repos","events_url":"https://api.github.com/users/shinrich/events{/privacy}","received_events_url":"https://api.github.com/users/shinrich/received_events","type":"User","site_admin":false},"html_url":"https://github.com/shinrich/trafficserver","description":"Mirror of Apache Traffic Server","fork":true,"url":"https://api.github.com/repos/shinrich/trafficserver","forks_url":"https://api.github.com/repos/shinrich/trafficserver/forks","keys_url":"https://api.github.com/repos/shinrich/trafficserver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shinrich/trafficserver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shinrich/trafficserver/teams","hooks_url":"https://api.github.com/repos/shinrich/trafficserver/hooks","issue_events_url":"https://api.github.com/repos/shinrich/trafficserver/issues/events{/number}","events_url":"https://api.github.com/repos/shinrich/trafficserver/events","assignees_url":"https://api.github.com/repos/shinrich/trafficserver/assignees{/user}","branches_url":"https://api.github.com/repos/shinrich/trafficserver/branches{/branch}","tags_url":"https://api.github.com/repos/shinrich/trafficserver/tags","blobs_url":"https://api.github.com/repos/shinrich/trafficserver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shinrich/trafficserver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shinrich/trafficserver/git/refs{/sha}","trees_url":"https://api.github.com/repos/shinrich/trafficserver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shinrich/trafficserver/statuses/{sha}","languages_url":"https://api.github.com/repos/shinrich/trafficserver/languages","stargazers_url":"https://api.github.com/repos/shinrich/trafficserver/stargazers","contributors_url":"https://api.github.com/repos/shinrich/trafficserver/contributors","subscribers_url":"https://api.github.com/repos/shinrich/trafficserver/subscribers","subscription_url":"https://api.github.com/repos/shinrich/trafficserver/subscription","commits_url":"https://api.github.com/repos/shinrich/trafficserver/commits{/sha}","git_commits_url":"https://api.github.com/repos/shinrich/trafficserver/git/commits{/sha}","comments_url":"https://api.github.com/repos/shinrich/trafficserver/comments{/number}","issue_comment_url":"https://api.github.com/repos/shinrich/trafficserver/issues/comments{/number}","contents_url":"https://api.github.com/repos/shinrich/trafficserver/contents/{+path}","compare_url":"https://api.github.com/repos/shinrich/trafficserver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shinrich/trafficserver/merges","archive_url":"https://api.github.com/repos/shinrich/trafficserver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shinrich/trafficserver/downloads","issues_url":"https://api.github.com/repos/shinrich/trafficserver/issues{/number}","pulls_url":"https://api.github.com/repos/shinrich/trafficserver/pulls{/number}","milestones_url":"https://api.github.com/repos/shinrich/trafficserver/milestones{/number}","notifications_url":"https://api.github.com/repos/shinrich/trafficserver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shinrich/trafficserver/labels{/name}","releases_url":"https://api.github.com/repos/shinrich/trafficserver/releases{/id}","deployments_url":"https://api.github.com/repos/shinrich/trafficserver/deployments","created_at":"2014-08-06T16:38:05Z","updated_at":"2015-05-01T19:57:32Z","pushed_at":"2018-10-25T18:34:29Z","git_url":"git://github.com/shinrich/trafficserver.git","ssh_url":"git@github.com:shinrich/trafficserver.git","clone_url":"https://github.com/shinrich/trafficserver.git","svn_url":"https://github.com/shinrich/trafficserver","homepage":null,"size":90798,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"344b0533503eacad8be456d459629c4485ebd762","user":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":356066,"node_id":"MDEwOlJlcG9zaXRvcnkzNTYwNjY=","name":"trafficserver","full_name":"apache/trafficserver","private":false,"owner":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/apache/trafficserver","description":"Mirror of Apache Traffic Server","fork":false,"url":"https://api.github.com/repos/apache/trafficserver","forks_url":"https://api.github.com/repos/apache/trafficserver/forks","keys_url":"https://api.github.com/repos/apache/trafficserver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/trafficserver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/trafficserver/teams","hooks_url":"https://api.github.com/repos/apache/trafficserver/hooks","issue_events_url":"https://api.github.com/repos/apache/trafficserver/issues/events{/number}","events_url":"https://api.github.com/repos/apache/trafficserver/events","assignees_url":"https://api.github.com/repos/apache/trafficserver/assignees{/user}","branches_url":"https://api.github.com/repos/apache/trafficserver/branches{/branch}","tags_url":"https://api.github.com/repos/apache/trafficserver/tags","blobs_url":"https://api.github.com/repos/apache/trafficserver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/trafficserver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/trafficserver/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/trafficserver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/trafficserver/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/trafficserver/languages","stargazers_url":"https://api.github.com/repos/apache/trafficserver/stargazers","contributors_url":"https://api.github.com/repos/apache/trafficserver/contributors","subscribers_url":"https://api.github.com/repos/apache/trafficserver/subscribers","subscription_url":"https://api.github.com/repos/apache/trafficserver/subscription","commits_url":"https://api.github.com/repos/apache/trafficserver/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/trafficserver/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/trafficserver/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/trafficserver/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/trafficserver/contents/{+path}","compare_url":"https://api.github.com/repos/apache/trafficserver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/trafficserver/merges","archive_url":"https://api.github.com/repos/apache/trafficserver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/trafficserver/downloads","issues_url":"https://api.github.com/repos/apache/trafficserver/issues{/number}","pulls_url":"https://api.github.com/repos/apache/trafficserver/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/trafficserver/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/trafficserver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/trafficserver/labels{/name}","releases_url":"https://api.github.com/repos/apache/trafficserver/releases{/id}","deployments_url":"https://api.github.com/repos/apache/trafficserver/deployments","created_at":"2009-10-31T08:00:10Z","updated_at":"2018-10-25T18:59:43Z","pushed_at":"2018-10-25T21:01:50Z","git_url":"git://github.com/apache/trafficserver.git","ssh_url":"git@github.com:apache/trafficserver.git","clone_url":"https://github.com/apache/trafficserver.git","svn_url":"https://github.com/apache/trafficserver","homepage":null,"size":92987,"stargazers_count":828,"watchers_count":828,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":550,"mirror_url":null,"archived":false,"open_issues_count":366,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":550,"open_issues":366,"watchers":828,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/4125"},"html":{"href":"https://github.com/apache/trafficserver/pull/4125"},"issue":{"href":"https://api.github.com/repos/apache/trafficserver/issues/4125"},"comments":{"href":"https://api.github.com/repos/apache/trafficserver/issues/4125/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/4125/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/trafficserver/pulls/4125/commits"},"statuses":{"href":"https://api.github.com/repos/apache/trafficserver/statuses/c622290ba63965aa3393fb6291cd577cfd35b000"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"shinrich"}}