{"action":"created","comment":{"url":"https://api.github.com/repos/quantcast/qfs/pulls/comments/89359116","pull_request_review_id":9905322,"id":89359116,"diff_hunk":"@@ -0,0 +1,199 @@\n+# QFS on S3 Guide\n+Starting with version 1.2.0, QFS provides the ability to create a filesystem\n+instance that is backed by Amazon S3. This guide documents the instructions for\n+how to enable Amazon S3 support on QFS. For a general discussion of existing\n+features, design and a performance comparison with EMRFS, we encourage you to read the release announcement.\n+\n+## For the Impatient!\n+[sample_setup.py](https://github.com/quantcast/qfs/blob/master/examples/sampleservers/sample_setup.py) has been updated, so that you can quickly spin up a local\n+QFS on S3 instance and try it out. Before invoking the script, first,\n+uncomment and fill in the following fields in [sample_setup.cfg](https://github.com/quantcast/qfs/blob/master/examples/sampleservers/sample_setup.cfg)\n+file:\n+```\n+# S3 properties: for S3 support, uncomment and \n+# set the correct values depending on your AWS S3 bucket \n+# and IAM settings. \n+bucketName = <myBucketName> \n+accessKeyId = <myAccessKeyId> \n+secretAccessKey = <mySecretAccessKey>\n+```\n+Once this is done, run the following command:\n+```\n+$QFS_SOURCE_DIR/examples/sampleservers/sample_setup.py --object-store -a install\n+```\n+If the remaining fields on sample_setup.cfg are left unchanged, this creates\n+an QFS instance that consists of one metaserver and three chunkservers\n+(serving as access proxies) all running on the localhost. If you want to\n+take a look at the generated metaserver and chunkserver configuration files,\n+please see the following files: ~/qfsbase/meta/conf/MetaServer.prp and ~/qfsbase/chunk1/conf/ChunkServer.prp.\n+\n+Next, use the existing QFS tool and run the following command to copy\n+a text file under the root directory of the QFS instance that we just created:\n+```\n+$QFS_BUILD_DIR/bin/tools/cptoqfs -s 127.0.0.1 -p 20000 -d TestFile.txt -k /TestFile.txt\n+```\n+Alternatively, you can run the binary of [qfssample_main.cc](https://github.com/quantcast/qfs/blob/master/examples/cc/qfssample_main.cc),\n+which performs various operations against a given filesystem instance including file creation, read, write, rename and deletion.\n+```\n+$QFS_BUILD_DIR/bin/examples/qfssample -s localhost -p 20000\n+```\n+Once done testing, you can bring down the QFS instance with the following command:\n+```\n+$QFS_SOURCE_DIR/examples/sampleservers/sample_setup.py --object-store -a uninstall \n+```\n+\n+## Enabling S3 Support on QFS\n+Next, we want to show how to enable Amazon S3 support on an\n+QFS instance by modifying chunkserver and metaserver configuration files manually.\n+The changes for each is presented below.\n+\n+### chunkserver configuration changes:\n+1. *Add and set [chunkServer.objectDir](https://github.com/quantcast/qfs/blob/master/conf/ChunkServer.prp#L310) parameter.*\n+\n+   chunkServer.objectDir is similar to chunkServer.chunkDir parameter. The difference is that\n+instead of pointing to an existing directory in chunkserver, it points to an hypothetical\n+directory in which chunkservers can place S3 files. For example, the corresponding line\n+for this parameter can read:\n+``` \n+chunkServer.objectDir = s3://myfirstbucket.\n+```\n+In example, the part after \"s3://\" in the specified object directory, i.e. \"myfirstbucket.\"\n+(including the . sign at the end), is treated as the configuration suffix. Metaserver\n+associates the configuration suffix with an S3 bucket name and AWS credentials to access\n+the given bucket. Corresponding metaserver configuration changes are described in the next section.\n+\n+   This is the only required parameter that needs to be set up in chunkserver configuration file for S3 support. For the optional S3 parameters in chunkserver configuration file, please visit [here](https://github.com/quantcast/qfs/blob/master/conf/ChunkServer.prp#L290).\n+\n+   \\* **One can specify multiple object directories with chunkServer.objectDir parameter.\n+Please refer to [Specifying Multiple Object Store Directories](#MultipleObjectStoreSection) section in this guide for more details.**\n+\n+### metaserver configuration changes:\n+1. *Add and set [metaServer.objectStoreEnabled](https://github.com/quantcast/qfs/blob/master/conf/MetaServer.prp#L1200) parameter.*\n+\n+   This parameter enables object store in metaserver. For example:\n+```\n+metaServer.objectStoreEnabled = 1\n+```\n+2. *For each configuration suffix specified in the chunkserver configuration file, specify\n+the [chunkServer.diskQueue.&lt;object-store-directory-prefix&gt;bucketName](https://github.com/quantcast/qfs/blob/master/conf/MetaServer.prp#L1245),\n+[chunkServer.diskQueue.&lt;object-store-directory-prefix&gt;accessKeyId](https://github.com/quantcast/qfs/blob/master/conf/MetaServer.prp#L1248),\n+and [chunkServer.diskQueue.&lt;object-store-directory-prefix&gt;secretAccessKey](https://github.com/quantcast/qfs/blob/master/conf/MetaServer.prp#L1251)\n+parameters.*\n+\n+   For example, using the same object directory specified in chunkserver configuration example, one can have:\n+```\n+metaServer.diskQueue.myfirstbucket.bucketName = <my-first-bucket-name> \n+metaServer.diskQueue.myfirstbucket.accessKeyId = <access-key-ID> \n+metaServer.diskQueue.myfirstbucket.secretAccessKey  = <secret-access-key> \n+```\n+\n+   The actual values for &lt;my-first-bucket-name&gt;, &lt;access-key-ID&gt; and\n+&lt;secret-access-key&gt; depend on the existing S3 bucket and the IAM\n+(Identity & Access Management) settings of the corresponding AWS account.\n+\n+3. *(optional) Add and set [metaServer.maxReplicasPerFile](https://github.com/quantcast/qfs/blob/master/conf/MetaServer.prp#L297)\n+and [metaServer.maxReplicasPerRSFile](https://github.com/quantcast/qfs/blob/master/conf/MetaServer.prp#L302) parameters.*\n+\n+   These two parameters tell metaserver to store all files in S3 object store,\n+regardless of the file creation arguments sent by QFS clients. For example:\n+```","path":"wiki/QFS-on-S3.md","position":null,"original_position":99,"commit_id":"f942435e35cb29ecf3f20f9f6621b594ee536c85","original_commit_id":"7570bfffba58ac2a5eeaabd1d75250f6116e00b6","user":{"login":"mckurt","id":15147662,"avatar_url":"https://avatars.githubusercontent.com/u/15147662?v=3","gravatar_id":"","url":"https://api.github.com/users/mckurt","html_url":"https://github.com/mckurt","followers_url":"https://api.github.com/users/mckurt/followers","following_url":"https://api.github.com/users/mckurt/following{/other_user}","gists_url":"https://api.github.com/users/mckurt/gists{/gist_id}","starred_url":"https://api.github.com/users/mckurt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mckurt/subscriptions","organizations_url":"https://api.github.com/users/mckurt/orgs","repos_url":"https://api.github.com/users/mckurt/repos","events_url":"https://api.github.com/users/mckurt/events{/privacy}","received_events_url":"https://api.github.com/users/mckurt/received_events","type":"User","site_admin":false},"body":"Modified the text and made this clear.","created_at":"2016-11-23T17:02:58Z","updated_at":"2016-11-23T17:02:58Z","html_url":"https://github.com/quantcast/qfs/pull/202#discussion_r89359116","pull_request_url":"https://api.github.com/repos/quantcast/qfs/pulls/202","_links":{"self":{"href":"https://api.github.com/repos/quantcast/qfs/pulls/comments/89359116"},"html":{"href":"https://github.com/quantcast/qfs/pull/202#discussion_r89359116"},"pull_request":{"href":"https://api.github.com/repos/quantcast/qfs/pulls/202"}}},"pull_request":{"url":"https://api.github.com/repos/quantcast/qfs/pulls/202","id":94896202,"html_url":"https://github.com/quantcast/qfs/pull/202","diff_url":"https://github.com/quantcast/qfs/pull/202.diff","patch_url":"https://github.com/quantcast/qfs/pull/202.patch","issue_url":"https://api.github.com/repos/quantcast/qfs/issues/202","number":202,"state":"open","locked":false,"title":"wiki: add an QFS on S3 guide","user":{"login":"mckurt","id":15147662,"avatar_url":"https://avatars.githubusercontent.com/u/15147662?v=3","gravatar_id":"","url":"https://api.github.com/users/mckurt","html_url":"https://github.com/mckurt","followers_url":"https://api.github.com/users/mckurt/followers","following_url":"https://api.github.com/users/mckurt/following{/other_user}","gists_url":"https://api.github.com/users/mckurt/gists{/gist_id}","starred_url":"https://api.github.com/users/mckurt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mckurt/subscriptions","organizations_url":"https://api.github.com/users/mckurt/orgs","repos_url":"https://api.github.com/users/mckurt/repos","events_url":"https://api.github.com/users/mckurt/events{/privacy}","received_events_url":"https://api.github.com/users/mckurt/received_events","type":"User","site_admin":false},"body":"A wiki guide that talks about how one can enable S3 support on QFS.\r\n","created_at":"2016-11-22T20:55:07Z","updated_at":"2016-11-23T17:02:58Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f831313e7e5cefa4ff408a6906950bebbedf974f","assignee":{"login":"mikeov","id":2245721,"avatar_url":"https://avatars.githubusercontent.com/u/2245721?v=3","gravatar_id":"","url":"https://api.github.com/users/mikeov","html_url":"https://github.com/mikeov","followers_url":"https://api.github.com/users/mikeov/followers","following_url":"https://api.github.com/users/mikeov/following{/other_user}","gists_url":"https://api.github.com/users/mikeov/gists{/gist_id}","starred_url":"https://api.github.com/users/mikeov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikeov/subscriptions","organizations_url":"https://api.github.com/users/mikeov/orgs","repos_url":"https://api.github.com/users/mikeov/repos","events_url":"https://api.github.com/users/mikeov/events{/privacy}","received_events_url":"https://api.github.com/users/mikeov/received_events","type":"User","site_admin":false},"assignees":[{"login":"mikeov","id":2245721,"avatar_url":"https://avatars.githubusercontent.com/u/2245721?v=3","gravatar_id":"","url":"https://api.github.com/users/mikeov","html_url":"https://github.com/mikeov","followers_url":"https://api.github.com/users/mikeov/followers","following_url":"https://api.github.com/users/mikeov/following{/other_user}","gists_url":"https://api.github.com/users/mikeov/gists{/gist_id}","starred_url":"https://api.github.com/users/mikeov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mikeov/subscriptions","organizations_url":"https://api.github.com/users/mikeov/orgs","repos_url":"https://api.github.com/users/mikeov/repos","events_url":"https://api.github.com/users/mikeov/events{/privacy}","received_events_url":"https://api.github.com/users/mikeov/received_events","type":"User","site_admin":false},{"login":"kstinsonqc","id":6910507,"avatar_url":"https://avatars.githubusercontent.com/u/6910507?v=3","gravatar_id":"","url":"https://api.github.com/users/kstinsonqc","html_url":"https://github.com/kstinsonqc","followers_url":"https://api.github.com/users/kstinsonqc/followers","following_url":"https://api.github.com/users/kstinsonqc/following{/other_user}","gists_url":"https://api.github.com/users/kstinsonqc/gists{/gist_id}","starred_url":"https://api.github.com/users/kstinsonqc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kstinsonqc/subscriptions","organizations_url":"https://api.github.com/users/kstinsonqc/orgs","repos_url":"https://api.github.com/users/kstinsonqc/repos","events_url":"https://api.github.com/users/kstinsonqc/events{/privacy}","received_events_url":"https://api.github.com/users/kstinsonqc/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/quantcast/qfs/pulls/202/commits","review_comments_url":"https://api.github.com/repos/quantcast/qfs/pulls/202/comments","review_comment_url":"https://api.github.com/repos/quantcast/qfs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/quantcast/qfs/issues/202/comments","statuses_url":"https://api.github.com/repos/quantcast/qfs/statuses/f942435e35cb29ecf3f20f9f6621b594ee536c85","head":{"label":"mckurt:mckurt/wiki","ref":"mckurt/wiki","sha":"f942435e35cb29ecf3f20f9f6621b594ee536c85","user":{"login":"mckurt","id":15147662,"avatar_url":"https://avatars.githubusercontent.com/u/15147662?v=3","gravatar_id":"","url":"https://api.github.com/users/mckurt","html_url":"https://github.com/mckurt","followers_url":"https://api.github.com/users/mckurt/followers","following_url":"https://api.github.com/users/mckurt/following{/other_user}","gists_url":"https://api.github.com/users/mckurt/gists{/gist_id}","starred_url":"https://api.github.com/users/mckurt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mckurt/subscriptions","organizations_url":"https://api.github.com/users/mckurt/orgs","repos_url":"https://api.github.com/users/mckurt/repos","events_url":"https://api.github.com/users/mckurt/events{/privacy}","received_events_url":"https://api.github.com/users/mckurt/received_events","type":"User","site_admin":false},"repo":{"id":44341325,"name":"qfs","full_name":"mckurt/qfs","owner":{"login":"mckurt","id":15147662,"avatar_url":"https://avatars.githubusercontent.com/u/15147662?v=3","gravatar_id":"","url":"https://api.github.com/users/mckurt","html_url":"https://github.com/mckurt","followers_url":"https://api.github.com/users/mckurt/followers","following_url":"https://api.github.com/users/mckurt/following{/other_user}","gists_url":"https://api.github.com/users/mckurt/gists{/gist_id}","starred_url":"https://api.github.com/users/mckurt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mckurt/subscriptions","organizations_url":"https://api.github.com/users/mckurt/orgs","repos_url":"https://api.github.com/users/mckurt/repos","events_url":"https://api.github.com/users/mckurt/events{/privacy}","received_events_url":"https://api.github.com/users/mckurt/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mckurt/qfs","description":"Quantcast File System","fork":true,"url":"https://api.github.com/repos/mckurt/qfs","forks_url":"https://api.github.com/repos/mckurt/qfs/forks","keys_url":"https://api.github.com/repos/mckurt/qfs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mckurt/qfs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mckurt/qfs/teams","hooks_url":"https://api.github.com/repos/mckurt/qfs/hooks","issue_events_url":"https://api.github.com/repos/mckurt/qfs/issues/events{/number}","events_url":"https://api.github.com/repos/mckurt/qfs/events","assignees_url":"https://api.github.com/repos/mckurt/qfs/assignees{/user}","branches_url":"https://api.github.com/repos/mckurt/qfs/branches{/branch}","tags_url":"https://api.github.com/repos/mckurt/qfs/tags","blobs_url":"https://api.github.com/repos/mckurt/qfs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mckurt/qfs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mckurt/qfs/git/refs{/sha}","trees_url":"https://api.github.com/repos/mckurt/qfs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mckurt/qfs/statuses/{sha}","languages_url":"https://api.github.com/repos/mckurt/qfs/languages","stargazers_url":"https://api.github.com/repos/mckurt/qfs/stargazers","contributors_url":"https://api.github.com/repos/mckurt/qfs/contributors","subscribers_url":"https://api.github.com/repos/mckurt/qfs/subscribers","subscription_url":"https://api.github.com/repos/mckurt/qfs/subscription","commits_url":"https://api.github.com/repos/mckurt/qfs/commits{/sha}","git_commits_url":"https://api.github.com/repos/mckurt/qfs/git/commits{/sha}","comments_url":"https://api.github.com/repos/mckurt/qfs/comments{/number}","issue_comment_url":"https://api.github.com/repos/mckurt/qfs/issues/comments{/number}","contents_url":"https://api.github.com/repos/mckurt/qfs/contents/{+path}","compare_url":"https://api.github.com/repos/mckurt/qfs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mckurt/qfs/merges","archive_url":"https://api.github.com/repos/mckurt/qfs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mckurt/qfs/downloads","issues_url":"https://api.github.com/repos/mckurt/qfs/issues{/number}","pulls_url":"https://api.github.com/repos/mckurt/qfs/pulls{/number}","milestones_url":"https://api.github.com/repos/mckurt/qfs/milestones{/number}","notifications_url":"https://api.github.com/repos/mckurt/qfs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mckurt/qfs/labels{/name}","releases_url":"https://api.github.com/repos/mckurt/qfs/releases{/id}","deployments_url":"https://api.github.com/repos/mckurt/qfs/deployments","created_at":"2015-10-15T19:48:06Z","updated_at":"2016-02-11T16:58:51Z","pushed_at":"2016-11-23T17:01:28Z","git_url":"git://github.com/mckurt/qfs.git","ssh_url":"git@github.com:mckurt/qfs.git","clone_url":"https://github.com/mckurt/qfs.git","svn_url":"https://github.com/mckurt/qfs","homepage":"","size":16696,"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":"quantcast:master","ref":"master","sha":"03f40dff6b8e56d662f246ec9b73222327aab07b","user":{"login":"quantcast","id":2146873,"avatar_url":"https://avatars.githubusercontent.com/u/2146873?v=3","gravatar_id":"","url":"https://api.github.com/users/quantcast","html_url":"https://github.com/quantcast","followers_url":"https://api.github.com/users/quantcast/followers","following_url":"https://api.github.com/users/quantcast/following{/other_user}","gists_url":"https://api.github.com/users/quantcast/gists{/gist_id}","starred_url":"https://api.github.com/users/quantcast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quantcast/subscriptions","organizations_url":"https://api.github.com/users/quantcast/orgs","repos_url":"https://api.github.com/users/quantcast/repos","events_url":"https://api.github.com/users/quantcast/events{/privacy}","received_events_url":"https://api.github.com/users/quantcast/received_events","type":"Organization","site_admin":false},"repo":{"id":5447814,"name":"qfs","full_name":"quantcast/qfs","owner":{"login":"quantcast","id":2146873,"avatar_url":"https://avatars.githubusercontent.com/u/2146873?v=3","gravatar_id":"","url":"https://api.github.com/users/quantcast","html_url":"https://github.com/quantcast","followers_url":"https://api.github.com/users/quantcast/followers","following_url":"https://api.github.com/users/quantcast/following{/other_user}","gists_url":"https://api.github.com/users/quantcast/gists{/gist_id}","starred_url":"https://api.github.com/users/quantcast/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/quantcast/subscriptions","organizations_url":"https://api.github.com/users/quantcast/orgs","repos_url":"https://api.github.com/users/quantcast/repos","events_url":"https://api.github.com/users/quantcast/events{/privacy}","received_events_url":"https://api.github.com/users/quantcast/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/quantcast/qfs","description":"Quantcast File System","fork":false,"url":"https://api.github.com/repos/quantcast/qfs","forks_url":"https://api.github.com/repos/quantcast/qfs/forks","keys_url":"https://api.github.com/repos/quantcast/qfs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/quantcast/qfs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/quantcast/qfs/teams","hooks_url":"https://api.github.com/repos/quantcast/qfs/hooks","issue_events_url":"https://api.github.com/repos/quantcast/qfs/issues/events{/number}","events_url":"https://api.github.com/repos/quantcast/qfs/events","assignees_url":"https://api.github.com/repos/quantcast/qfs/assignees{/user}","branches_url":"https://api.github.com/repos/quantcast/qfs/branches{/branch}","tags_url":"https://api.github.com/repos/quantcast/qfs/tags","blobs_url":"https://api.github.com/repos/quantcast/qfs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/quantcast/qfs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/quantcast/qfs/git/refs{/sha}","trees_url":"https://api.github.com/repos/quantcast/qfs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/quantcast/qfs/statuses/{sha}","languages_url":"https://api.github.com/repos/quantcast/qfs/languages","stargazers_url":"https://api.github.com/repos/quantcast/qfs/stargazers","contributors_url":"https://api.github.com/repos/quantcast/qfs/contributors","subscribers_url":"https://api.github.com/repos/quantcast/qfs/subscribers","subscription_url":"https://api.github.com/repos/quantcast/qfs/subscription","commits_url":"https://api.github.com/repos/quantcast/qfs/commits{/sha}","git_commits_url":"https://api.github.com/repos/quantcast/qfs/git/commits{/sha}","comments_url":"https://api.github.com/repos/quantcast/qfs/comments{/number}","issue_comment_url":"https://api.github.com/repos/quantcast/qfs/issues/comments{/number}","contents_url":"https://api.github.com/repos/quantcast/qfs/contents/{+path}","compare_url":"https://api.github.com/repos/quantcast/qfs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/quantcast/qfs/merges","archive_url":"https://api.github.com/repos/quantcast/qfs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/quantcast/qfs/downloads","issues_url":"https://api.github.com/repos/quantcast/qfs/issues{/number}","pulls_url":"https://api.github.com/repos/quantcast/qfs/pulls{/number}","milestones_url":"https://api.github.com/repos/quantcast/qfs/milestones{/number}","notifications_url":"https://api.github.com/repos/quantcast/qfs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/quantcast/qfs/labels{/name}","releases_url":"https://api.github.com/repos/quantcast/qfs/releases{/id}","deployments_url":"https://api.github.com/repos/quantcast/qfs/deployments","created_at":"2012-08-17T03:59:37Z","updated_at":"2016-11-18T02:16:44Z","pushed_at":"2016-11-23T17:01:28Z","git_url":"git://github.com/quantcast/qfs.git","ssh_url":"git@github.com:quantcast/qfs.git","clone_url":"https://github.com/quantcast/qfs.git","svn_url":"https://github.com/quantcast/qfs","homepage":"https://quantcast.atlassian.net","size":23242,"stargazers_count":478,"watchers_count":478,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":132,"mirror_url":null,"open_issues_count":9,"forks":132,"open_issues":9,"watchers":478,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/quantcast/qfs/pulls/202"},"html":{"href":"https://github.com/quantcast/qfs/pull/202"},"issue":{"href":"https://api.github.com/repos/quantcast/qfs/issues/202"},"comments":{"href":"https://api.github.com/repos/quantcast/qfs/issues/202/comments"},"review_comments":{"href":"https://api.github.com/repos/quantcast/qfs/pulls/202/comments"},"review_comment":{"href":"https://api.github.com/repos/quantcast/qfs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/quantcast/qfs/pulls/202/commits"},"statuses":{"href":"https://api.github.com/repos/quantcast/qfs/statuses/f942435e35cb29ecf3f20f9f6621b594ee536c85"}}}}
{"actor":{"display_login":"mckurt"}}