{"action":"created","comment":{"url":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/comments/77159126","id":77159126,"diff_hunk":"@@ -347,123 +347,24 @@ void BaseResolver::a_resolve(const std::string& hostname,\n                              int& ttl,\n                              SAS::TrailId trail)\n {\n-  // Clear the list of targets just in case.\n-  targets.clear();\n-\n-  // Accumulate unhealthy (that is, black or graylisted) targets in case they\n-  // are needed.\n-  std::vector<AddrInfo> unhealthy_targets;\n+  BaseAddrIterator* it = a_resolve_iter(hostname, af, port, transport, ttl, trail);\n+  targets = it->take(retries);\n+  delete it; it = nullptr;\n+}\n \n-  // Do A/AAAA lookup.\n+BaseAddrIterator* BaseResolver::a_resolve_iter(const std::string& hostname,\n+                                               int af,\n+                                               int port,\n+                                               int transport,\n+                                               int& ttl,\n+                                               SAS::TrailId trail)\n+{\n   DnsResult result = _dns_client->dns_query(hostname, (af == AF_INET) ? ns_t_a : ns_t_aaaa, trail);\n   ttl = result.ttl();\n \n-  // Randomize the records in the result.\n-  TRC_DEBUG(\"Found %ld A/AAAA records, randomizing\", result.records().size());\n-  std::random_shuffle(result.records().begin(), result.records().end());\n-\n-  AddrInfo ai;\n-  ai.transport = transport;\n-  ai.port = port;\n-  std::string targetlist_str;\n-  std::string unhealthy_str;\n-  std::string added_from_unhealthy_str;\n-  time_t current_time = time(NULL);\n-\n-  pthread_mutex_lock(&_hosts_lock);\n-\n-  // If there are any graylisted targets not being probed, we want to return one\n-  // as the first target.\n-  std::vector<DnsRRecord*>::const_iterator result_to_probe;\n-  for (result_to_probe = result.records().begin();\n-       result_to_probe != result.records().end();\n-      ++result_to_probe)\n-  {\n-    ai.address = to_ip46(*result_to_probe);\n-    if (host_state(ai, current_time) == Host::State::GRAY_NOT_PROBING)\n-    {\n-      select_for_probing(ai);\n-      targets.push_back(ai);\n-      targetlist_str = targetlist_str + (*result_to_probe)->to_string() + \";\";\n-      TRC_DEBUG(\"Added a server, now have %ld of %d\", targets.size(), retries);\n-      break;\n-    }\n-  }\n-\n-  // Loop through the records in the result picking healthy targets\n-  for (std::vector<DnsRRecord*>::const_iterator current_result = result.records().begin();\n-       current_result != result.records().end();\n-       ++current_result)\n-  {\n-    if (current_result != result_to_probe)\n-    {\n-      ai.address = to_ip46(*current_result);\n-      if (host_state(ai, current_time) == Host::State::WHITE)\n-      {\n-        // Host is healthy, so copy across to the target list.\n-        targets.push_back(ai);\n-        targetlist_str = targetlist_str + (*current_result)->to_string() + \";\";\n-        TRC_DEBUG(\"Added a server, now have %ld of %d\", targets.size(), retries);\n-      }\n-      else\n-      {\n-        // Host is unhealthy, so copy to unhealthy list.\n-        unhealthy_targets.push_back(ai);\n-        unhealthy_str = unhealthy_str + (*current_result)->to_string() + \";\";\n-      }\n-\n-      if (targets.size() >= (size_t)retries)\n-      {\n-        // We have enough targets so stop looking at records.\n-        TRC_DEBUG(\"Have enough targets\");\n-\n-        if (trail != 0)\n-        {\n-          SAS::Event event(trail, SASEvent::BASERESOLVE_A_RESULT, 0);\n-          event.add_var_param(hostname);\n-          event.add_var_param(targetlist_str);\n-          event.add_var_param(unhealthy_str);\n-          event.add_var_param(added_from_unhealthy_str);\n-          SAS::report_event(event);\n-        }\n-\n-        break;\n-      }\n-    }\n-  }\n-\n-  pthread_mutex_unlock(&_hosts_lock);\n-\n-  // If we've gone through the whole set of A/AAAA record and haven't found\n-  // enough healthy targets, add unhealthy targets.\n-  if (targets.size() < (size_t)retries)\n-  {\n-    size_t to_copy = (size_t)retries - targets.size();\n-    if (to_copy > unhealthy_targets.size())\n-    {\n-      to_copy = unhealthy_targets.size();\n-    }\n-\n-    TRC_DEBUG(\"Adding %ld servers from blacklist\", to_copy);\n+  TRC_DEBUG(\"Found %ld A/AAAA records, creating iterator\", result.records().size());\n \n-    for (size_t ii = 0; ii < to_copy; ++ii)\n-    {\n-      targets.push_back(unhealthy_targets[ii]);\n-      std::string unhealthy_target = unhealthy_targets[ii].address_and_port_to_string();\n-      std::string bl = \"[\" + unhealthy_target + \"]\";\n-      added_from_unhealthy_str = added_from_unhealthy_str + bl;\n-    }\n-  }\n-\n-  if (trail != 0)\n-  {\n-    SAS::Event event(trail, SASEvent::BASERESOLVE_A_RESULT, 0);\n-    event.add_var_param(hostname);\n-    event.add_var_param(targetlist_str);\n-    event.add_var_param(unhealthy_str);\n-    event.add_var_param(added_from_unhealthy_str);\n-    SAS::report_event(event);\n-  }\n+  return new LazyAddrIterator(result, this, port, transport, trail);","path":"src/baseresolver.cpp","position":133,"original_position":133,"commit_id":"0d213a65b68ad75fc8d5fa4035d7866a7181fa72","original_commit_id":"0d213a65b68ad75fc8d5fa4035d7866a7181fa72","user":{"login":"AlexHockey","id":4903205,"avatar_url":"https://avatars.githubusercontent.com/u/4903205?v=3","gravatar_id":"","url":"https://api.github.com/users/AlexHockey","html_url":"https://github.com/AlexHockey","followers_url":"https://api.github.com/users/AlexHockey/followers","following_url":"https://api.github.com/users/AlexHockey/following{/other_user}","gists_url":"https://api.github.com/users/AlexHockey/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexHockey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexHockey/subscriptions","organizations_url":"https://api.github.com/users/AlexHockey/orgs","repos_url":"https://api.github.com/users/AlexHockey/repos","events_url":"https://api.github.com/users/AlexHockey/events{/privacy}","received_events_url":"https://api.github.com/users/AlexHockey/received_events","type":"User","site_admin":false},"body":"Do we need to `std::move` the `result` or is the compiler smart enough to automatically call the move constructor?","created_at":"2016-09-01T11:52:14Z","updated_at":"2016-09-01T11:52:14Z","html_url":"https://github.com/Metaswitch/cpp-common/pull/549#discussion_r77159126","pull_request_url":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/549","_links":{"self":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/comments/77159126"},"html":{"href":"https://github.com/Metaswitch/cpp-common/pull/549#discussion_r77159126"},"pull_request":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/549"}}},"pull_request":{"url":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/549","id":81961496,"html_url":"https://github.com/Metaswitch/cpp-common/pull/549","diff_url":"https://github.com/Metaswitch/cpp-common/pull/549.diff","patch_url":"https://github.com/Metaswitch/cpp-common/pull/549.patch","issue_url":"https://api.github.com/repos/Metaswitch/cpp-common/issues/549","number":549,"state":"open","locked":false,"title":"[Reviewer: AJH] Add HTTP Lazy Targeting","user":{"login":"TJW2","id":20281378,"avatar_url":"https://avatars.githubusercontent.com/u/20281378?v=3","gravatar_id":"","url":"https://api.github.com/users/TJW2","html_url":"https://github.com/TJW2","followers_url":"https://api.github.com/users/TJW2/followers","following_url":"https://api.github.com/users/TJW2/following{/other_user}","gists_url":"https://api.github.com/users/TJW2/gists{/gist_id}","starred_url":"https://api.github.com/users/TJW2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TJW2/subscriptions","organizations_url":"https://api.github.com/users/TJW2/orgs","repos_url":"https://api.github.com/users/TJW2/repos","events_url":"https://api.github.com/users/TJW2/events{/privacy}","received_events_url":"https://api.github.com/users/TJW2/received_events","type":"User","site_admin":false},"body":"Add resolve methods to BaseResolver and HttpResolver that return an iterator enabling targets to be selected lazily, using the most up-to-date information available to the resolver in the state of the hosts.","created_at":"2016-08-19T10:44:12Z","updated_at":"2016-09-01T11:52:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e8782292ab426d34736b8912ed8e4ce30457c729","assignee":{"login":"AlexHockey","id":4903205,"avatar_url":"https://avatars.githubusercontent.com/u/4903205?v=3","gravatar_id":"","url":"https://api.github.com/users/AlexHockey","html_url":"https://github.com/AlexHockey","followers_url":"https://api.github.com/users/AlexHockey/followers","following_url":"https://api.github.com/users/AlexHockey/following{/other_user}","gists_url":"https://api.github.com/users/AlexHockey/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexHockey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexHockey/subscriptions","organizations_url":"https://api.github.com/users/AlexHockey/orgs","repos_url":"https://api.github.com/users/AlexHockey/repos","events_url":"https://api.github.com/users/AlexHockey/events{/privacy}","received_events_url":"https://api.github.com/users/AlexHockey/received_events","type":"User","site_admin":false},"assignees":[{"login":"AlexHockey","id":4903205,"avatar_url":"https://avatars.githubusercontent.com/u/4903205?v=3","gravatar_id":"","url":"https://api.github.com/users/AlexHockey","html_url":"https://github.com/AlexHockey","followers_url":"https://api.github.com/users/AlexHockey/followers","following_url":"https://api.github.com/users/AlexHockey/following{/other_user}","gists_url":"https://api.github.com/users/AlexHockey/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexHockey/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexHockey/subscriptions","organizations_url":"https://api.github.com/users/AlexHockey/orgs","repos_url":"https://api.github.com/users/AlexHockey/repos","events_url":"https://api.github.com/users/AlexHockey/events{/privacy}","received_events_url":"https://api.github.com/users/AlexHockey/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/549/commits","review_comments_url":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/549/comments","review_comment_url":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Metaswitch/cpp-common/issues/549/comments","statuses_url":"https://api.github.com/repos/Metaswitch/cpp-common/statuses/0d213a65b68ad75fc8d5fa4035d7866a7181fa72","head":{"label":"Metaswitch:http-lazy-targeting","ref":"http-lazy-targeting","sha":"0d213a65b68ad75fc8d5fa4035d7866a7181fa72","user":{"login":"Metaswitch","id":453759,"avatar_url":"https://avatars.githubusercontent.com/u/453759?v=3","gravatar_id":"","url":"https://api.github.com/users/Metaswitch","html_url":"https://github.com/Metaswitch","followers_url":"https://api.github.com/users/Metaswitch/followers","following_url":"https://api.github.com/users/Metaswitch/following{/other_user}","gists_url":"https://api.github.com/users/Metaswitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Metaswitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metaswitch/subscriptions","organizations_url":"https://api.github.com/users/Metaswitch/orgs","repos_url":"https://api.github.com/users/Metaswitch/repos","events_url":"https://api.github.com/users/Metaswitch/events{/privacy}","received_events_url":"https://api.github.com/users/Metaswitch/received_events","type":"Organization","site_admin":false},"repo":{"id":15284898,"name":"cpp-common","full_name":"Metaswitch/cpp-common","owner":{"login":"Metaswitch","id":453759,"avatar_url":"https://avatars.githubusercontent.com/u/453759?v=3","gravatar_id":"","url":"https://api.github.com/users/Metaswitch","html_url":"https://github.com/Metaswitch","followers_url":"https://api.github.com/users/Metaswitch/followers","following_url":"https://api.github.com/users/Metaswitch/following{/other_user}","gists_url":"https://api.github.com/users/Metaswitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Metaswitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metaswitch/subscriptions","organizations_url":"https://api.github.com/users/Metaswitch/orgs","repos_url":"https://api.github.com/users/Metaswitch/repos","events_url":"https://api.github.com/users/Metaswitch/events{/privacy}","received_events_url":"https://api.github.com/users/Metaswitch/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Metaswitch/cpp-common","description":"Common C/C++ modules for Clearwater components","fork":false,"url":"https://api.github.com/repos/Metaswitch/cpp-common","forks_url":"https://api.github.com/repos/Metaswitch/cpp-common/forks","keys_url":"https://api.github.com/repos/Metaswitch/cpp-common/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Metaswitch/cpp-common/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Metaswitch/cpp-common/teams","hooks_url":"https://api.github.com/repos/Metaswitch/cpp-common/hooks","issue_events_url":"https://api.github.com/repos/Metaswitch/cpp-common/issues/events{/number}","events_url":"https://api.github.com/repos/Metaswitch/cpp-common/events","assignees_url":"https://api.github.com/repos/Metaswitch/cpp-common/assignees{/user}","branches_url":"https://api.github.com/repos/Metaswitch/cpp-common/branches{/branch}","tags_url":"https://api.github.com/repos/Metaswitch/cpp-common/tags","blobs_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/refs{/sha}","trees_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Metaswitch/cpp-common/statuses/{sha}","languages_url":"https://api.github.com/repos/Metaswitch/cpp-common/languages","stargazers_url":"https://api.github.com/repos/Metaswitch/cpp-common/stargazers","contributors_url":"https://api.github.com/repos/Metaswitch/cpp-common/contributors","subscribers_url":"https://api.github.com/repos/Metaswitch/cpp-common/subscribers","subscription_url":"https://api.github.com/repos/Metaswitch/cpp-common/subscription","commits_url":"https://api.github.com/repos/Metaswitch/cpp-common/commits{/sha}","git_commits_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/commits{/sha}","comments_url":"https://api.github.com/repos/Metaswitch/cpp-common/comments{/number}","issue_comment_url":"https://api.github.com/repos/Metaswitch/cpp-common/issues/comments{/number}","contents_url":"https://api.github.com/repos/Metaswitch/cpp-common/contents/{+path}","compare_url":"https://api.github.com/repos/Metaswitch/cpp-common/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Metaswitch/cpp-common/merges","archive_url":"https://api.github.com/repos/Metaswitch/cpp-common/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Metaswitch/cpp-common/downloads","issues_url":"https://api.github.com/repos/Metaswitch/cpp-common/issues{/number}","pulls_url":"https://api.github.com/repos/Metaswitch/cpp-common/pulls{/number}","milestones_url":"https://api.github.com/repos/Metaswitch/cpp-common/milestones{/number}","notifications_url":"https://api.github.com/repos/Metaswitch/cpp-common/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Metaswitch/cpp-common/labels{/name}","releases_url":"https://api.github.com/repos/Metaswitch/cpp-common/releases{/id}","deployments_url":"https://api.github.com/repos/Metaswitch/cpp-common/deployments","created_at":"2013-12-18T14:11:57Z","updated_at":"2016-01-11T14:34:27Z","pushed_at":"2016-08-31T15:20:33Z","git_url":"git://github.com/Metaswitch/cpp-common.git","ssh_url":"git@github.com:Metaswitch/cpp-common.git","clone_url":"https://github.com/Metaswitch/cpp-common.git","svn_url":"https://github.com/Metaswitch/cpp-common","homepage":null,"size":2384,"stargazers_count":3,"watchers_count":3,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":20,"forks":5,"open_issues":20,"watchers":3,"default_branch":"master"}},"base":{"label":"Metaswitch:master","ref":"master","sha":"0e51ce9e64b343e26b365529420bbcf4c979da4b","user":{"login":"Metaswitch","id":453759,"avatar_url":"https://avatars.githubusercontent.com/u/453759?v=3","gravatar_id":"","url":"https://api.github.com/users/Metaswitch","html_url":"https://github.com/Metaswitch","followers_url":"https://api.github.com/users/Metaswitch/followers","following_url":"https://api.github.com/users/Metaswitch/following{/other_user}","gists_url":"https://api.github.com/users/Metaswitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Metaswitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metaswitch/subscriptions","organizations_url":"https://api.github.com/users/Metaswitch/orgs","repos_url":"https://api.github.com/users/Metaswitch/repos","events_url":"https://api.github.com/users/Metaswitch/events{/privacy}","received_events_url":"https://api.github.com/users/Metaswitch/received_events","type":"Organization","site_admin":false},"repo":{"id":15284898,"name":"cpp-common","full_name":"Metaswitch/cpp-common","owner":{"login":"Metaswitch","id":453759,"avatar_url":"https://avatars.githubusercontent.com/u/453759?v=3","gravatar_id":"","url":"https://api.github.com/users/Metaswitch","html_url":"https://github.com/Metaswitch","followers_url":"https://api.github.com/users/Metaswitch/followers","following_url":"https://api.github.com/users/Metaswitch/following{/other_user}","gists_url":"https://api.github.com/users/Metaswitch/gists{/gist_id}","starred_url":"https://api.github.com/users/Metaswitch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Metaswitch/subscriptions","organizations_url":"https://api.github.com/users/Metaswitch/orgs","repos_url":"https://api.github.com/users/Metaswitch/repos","events_url":"https://api.github.com/users/Metaswitch/events{/privacy}","received_events_url":"https://api.github.com/users/Metaswitch/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Metaswitch/cpp-common","description":"Common C/C++ modules for Clearwater components","fork":false,"url":"https://api.github.com/repos/Metaswitch/cpp-common","forks_url":"https://api.github.com/repos/Metaswitch/cpp-common/forks","keys_url":"https://api.github.com/repos/Metaswitch/cpp-common/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Metaswitch/cpp-common/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Metaswitch/cpp-common/teams","hooks_url":"https://api.github.com/repos/Metaswitch/cpp-common/hooks","issue_events_url":"https://api.github.com/repos/Metaswitch/cpp-common/issues/events{/number}","events_url":"https://api.github.com/repos/Metaswitch/cpp-common/events","assignees_url":"https://api.github.com/repos/Metaswitch/cpp-common/assignees{/user}","branches_url":"https://api.github.com/repos/Metaswitch/cpp-common/branches{/branch}","tags_url":"https://api.github.com/repos/Metaswitch/cpp-common/tags","blobs_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/refs{/sha}","trees_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Metaswitch/cpp-common/statuses/{sha}","languages_url":"https://api.github.com/repos/Metaswitch/cpp-common/languages","stargazers_url":"https://api.github.com/repos/Metaswitch/cpp-common/stargazers","contributors_url":"https://api.github.com/repos/Metaswitch/cpp-common/contributors","subscribers_url":"https://api.github.com/repos/Metaswitch/cpp-common/subscribers","subscription_url":"https://api.github.com/repos/Metaswitch/cpp-common/subscription","commits_url":"https://api.github.com/repos/Metaswitch/cpp-common/commits{/sha}","git_commits_url":"https://api.github.com/repos/Metaswitch/cpp-common/git/commits{/sha}","comments_url":"https://api.github.com/repos/Metaswitch/cpp-common/comments{/number}","issue_comment_url":"https://api.github.com/repos/Metaswitch/cpp-common/issues/comments{/number}","contents_url":"https://api.github.com/repos/Metaswitch/cpp-common/contents/{+path}","compare_url":"https://api.github.com/repos/Metaswitch/cpp-common/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Metaswitch/cpp-common/merges","archive_url":"https://api.github.com/repos/Metaswitch/cpp-common/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Metaswitch/cpp-common/downloads","issues_url":"https://api.github.com/repos/Metaswitch/cpp-common/issues{/number}","pulls_url":"https://api.github.com/repos/Metaswitch/cpp-common/pulls{/number}","milestones_url":"https://api.github.com/repos/Metaswitch/cpp-common/milestones{/number}","notifications_url":"https://api.github.com/repos/Metaswitch/cpp-common/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Metaswitch/cpp-common/labels{/name}","releases_url":"https://api.github.com/repos/Metaswitch/cpp-common/releases{/id}","deployments_url":"https://api.github.com/repos/Metaswitch/cpp-common/deployments","created_at":"2013-12-18T14:11:57Z","updated_at":"2016-01-11T14:34:27Z","pushed_at":"2016-08-31T15:20:33Z","git_url":"git://github.com/Metaswitch/cpp-common.git","ssh_url":"git@github.com:Metaswitch/cpp-common.git","clone_url":"https://github.com/Metaswitch/cpp-common.git","svn_url":"https://github.com/Metaswitch/cpp-common","homepage":null,"size":2384,"stargazers_count":3,"watchers_count":3,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":20,"forks":5,"open_issues":20,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/549"},"html":{"href":"https://github.com/Metaswitch/cpp-common/pull/549"},"issue":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/issues/549"},"comments":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/issues/549/comments"},"review_comments":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/549/comments"},"review_comment":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/pulls/549/commits"},"statuses":{"href":"https://api.github.com/repos/Metaswitch/cpp-common/statuses/0d213a65b68ad75fc8d5fa4035d7866a7181fa72"}}}}
{"actor":{"display_login":"AlexHockey"}}