{"action":"closed","number":404,"pull_request":{"url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls/404","id":67467599,"html_url":"https://github.com/s3fs-fuse/s3fs-fuse/pull/404","diff_url":"https://github.com/s3fs-fuse/s3fs-fuse/pull/404.diff","patch_url":"https://github.com/s3fs-fuse/s3fs-fuse/pull/404.patch","issue_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/issues/404","number":404,"state":"closed","locked":false,"title":"Add curl handler pool to reuse connections","user":{"login":"rockuw","id":1209779,"avatar_url":"https://avatars.githubusercontent.com/u/1209779?v=3","gravatar_id":"","url":"https://api.github.com/users/rockuw","html_url":"https://github.com/rockuw","followers_url":"https://api.github.com/users/rockuw/followers","following_url":"https://api.github.com/users/rockuw/following{/other_user}","gists_url":"https://api.github.com/users/rockuw/gists{/gist_id}","starred_url":"https://api.github.com/users/rockuw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rockuw/subscriptions","organizations_url":"https://api.github.com/users/rockuw/orgs","repos_url":"https://api.github.com/users/rockuw/repos","events_url":"https://api.github.com/users/rockuw/events{/privacy}","received_events_url":"https://api.github.com/users/rockuw/received_events","type":"User","site_admin":false},"body":"Currently s3fs creates a new tcp connection for each request to s3. Together with the fact that curl(or HTTP) defaults to use 'Connection:keep-alive', the client may ends with lots of 'TIME_WAIT' connections:\r\n\r\n```\r\nubuntu@ip-172-31-29-108:~/s3fs-fuse$ for i in $(seq 100); do ls /tmp/s3fs > /dev/null; done\r\nubuntu@ip-172-31-29-108:~/s3fs-fuse$ sudo ss -tan | grep TIME | wc -l\r\n101\r\n```\r\n\r\nThis patches enables reusing curl handlers and thus utilizes HTTP keep-alive, which has the effects:\r\n\r\n1. boost performance\r\n2. largely reduce TIME_WAIT connections","created_at":"2016-04-22T07:03:16Z","updated_at":"2016-04-26T14:40:46Z","closed_at":"2016-04-26T14:40:46Z","merged_at":"2016-04-26T14:40:46Z","merge_commit_sha":"845fdb43f264fe360a911db59e55a945d6de3993","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls/404/commits","review_comments_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls/404/comments","review_comment_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls/comments{/number}","comments_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/issues/404/comments","statuses_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/statuses/b78adb4bb0542301dbe406023b7022fcdf2d8f4c","head":{"label":"rockuw:keep-alive","ref":"keep-alive","sha":"b78adb4bb0542301dbe406023b7022fcdf2d8f4c","user":{"login":"rockuw","id":1209779,"avatar_url":"https://avatars.githubusercontent.com/u/1209779?v=3","gravatar_id":"","url":"https://api.github.com/users/rockuw","html_url":"https://github.com/rockuw","followers_url":"https://api.github.com/users/rockuw/followers","following_url":"https://api.github.com/users/rockuw/following{/other_user}","gists_url":"https://api.github.com/users/rockuw/gists{/gist_id}","starred_url":"https://api.github.com/users/rockuw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rockuw/subscriptions","organizations_url":"https://api.github.com/users/rockuw/orgs","repos_url":"https://api.github.com/users/rockuw/repos","events_url":"https://api.github.com/users/rockuw/events{/privacy}","received_events_url":"https://api.github.com/users/rockuw/received_events","type":"User","site_admin":false},"repo":{"id":47302358,"name":"s3fs-fuse","full_name":"rockuw/s3fs-fuse","owner":{"login":"rockuw","id":1209779,"avatar_url":"https://avatars.githubusercontent.com/u/1209779?v=3","gravatar_id":"","url":"https://api.github.com/users/rockuw","html_url":"https://github.com/rockuw","followers_url":"https://api.github.com/users/rockuw/followers","following_url":"https://api.github.com/users/rockuw/following{/other_user}","gists_url":"https://api.github.com/users/rockuw/gists{/gist_id}","starred_url":"https://api.github.com/users/rockuw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rockuw/subscriptions","organizations_url":"https://api.github.com/users/rockuw/orgs","repos_url":"https://api.github.com/users/rockuw/repos","events_url":"https://api.github.com/users/rockuw/events{/privacy}","received_events_url":"https://api.github.com/users/rockuw/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rockuw/s3fs-fuse","description":"FUSE-based file system backed by Amazon S3","fork":true,"url":"https://api.github.com/repos/rockuw/s3fs-fuse","forks_url":"https://api.github.com/repos/rockuw/s3fs-fuse/forks","keys_url":"https://api.github.com/repos/rockuw/s3fs-fuse/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rockuw/s3fs-fuse/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rockuw/s3fs-fuse/teams","hooks_url":"https://api.github.com/repos/rockuw/s3fs-fuse/hooks","issue_events_url":"https://api.github.com/repos/rockuw/s3fs-fuse/issues/events{/number}","events_url":"https://api.github.com/repos/rockuw/s3fs-fuse/events","assignees_url":"https://api.github.com/repos/rockuw/s3fs-fuse/assignees{/user}","branches_url":"https://api.github.com/repos/rockuw/s3fs-fuse/branches{/branch}","tags_url":"https://api.github.com/repos/rockuw/s3fs-fuse/tags","blobs_url":"https://api.github.com/repos/rockuw/s3fs-fuse/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rockuw/s3fs-fuse/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rockuw/s3fs-fuse/git/refs{/sha}","trees_url":"https://api.github.com/repos/rockuw/s3fs-fuse/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rockuw/s3fs-fuse/statuses/{sha}","languages_url":"https://api.github.com/repos/rockuw/s3fs-fuse/languages","stargazers_url":"https://api.github.com/repos/rockuw/s3fs-fuse/stargazers","contributors_url":"https://api.github.com/repos/rockuw/s3fs-fuse/contributors","subscribers_url":"https://api.github.com/repos/rockuw/s3fs-fuse/subscribers","subscription_url":"https://api.github.com/repos/rockuw/s3fs-fuse/subscription","commits_url":"https://api.github.com/repos/rockuw/s3fs-fuse/commits{/sha}","git_commits_url":"https://api.github.com/repos/rockuw/s3fs-fuse/git/commits{/sha}","comments_url":"https://api.github.com/repos/rockuw/s3fs-fuse/comments{/number}","issue_comment_url":"https://api.github.com/repos/rockuw/s3fs-fuse/issues/comments{/number}","contents_url":"https://api.github.com/repos/rockuw/s3fs-fuse/contents/{+path}","compare_url":"https://api.github.com/repos/rockuw/s3fs-fuse/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rockuw/s3fs-fuse/merges","archive_url":"https://api.github.com/repos/rockuw/s3fs-fuse/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rockuw/s3fs-fuse/downloads","issues_url":"https://api.github.com/repos/rockuw/s3fs-fuse/issues{/number}","pulls_url":"https://api.github.com/repos/rockuw/s3fs-fuse/pulls{/number}","milestones_url":"https://api.github.com/repos/rockuw/s3fs-fuse/milestones{/number}","notifications_url":"https://api.github.com/repos/rockuw/s3fs-fuse/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rockuw/s3fs-fuse/labels{/name}","releases_url":"https://api.github.com/repos/rockuw/s3fs-fuse/releases{/id}","deployments_url":"https://api.github.com/repos/rockuw/s3fs-fuse/deployments","created_at":"2015-12-03T02:36:18Z","updated_at":"2016-04-22T06:49:57Z","pushed_at":"2016-04-22T08:24:35Z","git_url":"git://github.com/rockuw/s3fs-fuse.git","ssh_url":"git@github.com:rockuw/s3fs-fuse.git","clone_url":"https://github.com/rockuw/s3fs-fuse.git","svn_url":"https://github.com/rockuw/s3fs-fuse","homepage":"","size":1761,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"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":"s3fs-fuse:master","ref":"master","sha":"b979d40778748b94d28b004a577d7c166603dfe1","user":{"login":"s3fs-fuse","id":6013166,"avatar_url":"https://avatars.githubusercontent.com/u/6013166?v=3","gravatar_id":"","url":"https://api.github.com/users/s3fs-fuse","html_url":"https://github.com/s3fs-fuse","followers_url":"https://api.github.com/users/s3fs-fuse/followers","following_url":"https://api.github.com/users/s3fs-fuse/following{/other_user}","gists_url":"https://api.github.com/users/s3fs-fuse/gists{/gist_id}","starred_url":"https://api.github.com/users/s3fs-fuse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s3fs-fuse/subscriptions","organizations_url":"https://api.github.com/users/s3fs-fuse/orgs","repos_url":"https://api.github.com/users/s3fs-fuse/repos","events_url":"https://api.github.com/users/s3fs-fuse/events{/privacy}","received_events_url":"https://api.github.com/users/s3fs-fuse/received_events","type":"Organization","site_admin":false},"repo":{"id":14627445,"name":"s3fs-fuse","full_name":"s3fs-fuse/s3fs-fuse","owner":{"login":"s3fs-fuse","id":6013166,"avatar_url":"https://avatars.githubusercontent.com/u/6013166?v=3","gravatar_id":"","url":"https://api.github.com/users/s3fs-fuse","html_url":"https://github.com/s3fs-fuse","followers_url":"https://api.github.com/users/s3fs-fuse/followers","following_url":"https://api.github.com/users/s3fs-fuse/following{/other_user}","gists_url":"https://api.github.com/users/s3fs-fuse/gists{/gist_id}","starred_url":"https://api.github.com/users/s3fs-fuse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/s3fs-fuse/subscriptions","organizations_url":"https://api.github.com/users/s3fs-fuse/orgs","repos_url":"https://api.github.com/users/s3fs-fuse/repos","events_url":"https://api.github.com/users/s3fs-fuse/events{/privacy}","received_events_url":"https://api.github.com/users/s3fs-fuse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/s3fs-fuse/s3fs-fuse","description":"FUSE-based file system backed by Amazon S3","fork":false,"url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse","forks_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/forks","keys_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/keys{/key_id}","collaborators_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/teams","hooks_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/hooks","issue_events_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/issues/events{/number}","events_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/events","assignees_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/assignees{/user}","branches_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/branches{/branch}","tags_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/tags","blobs_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/git/refs{/sha}","trees_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/git/trees{/sha}","statuses_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/statuses/{sha}","languages_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/languages","stargazers_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/stargazers","contributors_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/contributors","subscribers_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/subscribers","subscription_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/subscription","commits_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/commits{/sha}","git_commits_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/git/commits{/sha}","comments_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/comments{/number}","issue_comment_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/issues/comments{/number}","contents_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/contents/{+path}","compare_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/compare/{base}...{head}","merges_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/merges","archive_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/downloads","issues_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/issues{/number}","pulls_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls{/number}","milestones_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/milestones{/number}","notifications_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/labels{/name}","releases_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/releases{/id}","deployments_url":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/deployments","created_at":"2013-11-22T19:31:12Z","updated_at":"2016-04-26T08:46:17Z","pushed_at":"2016-04-26T14:40:46Z","git_url":"git://github.com/s3fs-fuse/s3fs-fuse.git","ssh_url":"git@github.com:s3fs-fuse/s3fs-fuse.git","clone_url":"https://github.com/s3fs-fuse/s3fs-fuse.git","svn_url":"https://github.com/s3fs-fuse/s3fs-fuse","homepage":"","size":2210,"stargazers_count":1172,"watchers_count":1172,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":182,"mirror_url":null,"open_issues_count":63,"forks":182,"open_issues":63,"watchers":1172,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls/404"},"html":{"href":"https://github.com/s3fs-fuse/s3fs-fuse/pull/404"},"issue":{"href":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/issues/404"},"comments":{"href":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/issues/404/comments"},"review_comments":{"href":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls/404/comments"},"review_comment":{"href":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/pulls/404/commits"},"statuses":{"href":"https://api.github.com/repos/s3fs-fuse/s3fs-fuse/statuses/b78adb4bb0542301dbe406023b7022fcdf2d8f4c"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"ggtakec","id":3221882,"avatar_url":"https://avatars.githubusercontent.com/u/3221882?v=3","gravatar_id":"","url":"https://api.github.com/users/ggtakec","html_url":"https://github.com/ggtakec","followers_url":"https://api.github.com/users/ggtakec/followers","following_url":"https://api.github.com/users/ggtakec/following{/other_user}","gists_url":"https://api.github.com/users/ggtakec/gists{/gist_id}","starred_url":"https://api.github.com/users/ggtakec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ggtakec/subscriptions","organizations_url":"https://api.github.com/users/ggtakec/orgs","repos_url":"https://api.github.com/users/ggtakec/repos","events_url":"https://api.github.com/users/ggtakec/events{/privacy}","received_events_url":"https://api.github.com/users/ggtakec/received_events","type":"User","site_admin":false},"comments":7,"review_comments":0,"commits":1,"additions":126,"deletions":2,"changed_files":2}}