{"action":"created","comment":{"url":"https://api.github.com/repos/ceckhardt/orbit/pulls/comments/236395526","pull_request_review_id":178462202,"id":236395526,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNjM5NTUyNg==","diff_hunk":"@@ -654,6 +414,18 @@ private Task onInvocation(final HandlerContext ctx, final Invocation invocation)\n             return Task.done();\n         }\n \n+        // Invocation is @OnlyIfActivated but got sent despite actor deactivation (this is possible even in a healthy","path":"actors/runtime/src/main/java/cloud/orbit/actors/runtime/Hosting.java","position":667,"original_position":667,"commit_id":"23fc15bf6f2b46038e0ca076cd39a662fd280758","original_commit_id":"23fc15bf6f2b46038e0ca076cd39a662fd280758","user":{"login":"JordanAngold","id":31076520,"node_id":"MDQ6VXNlcjMxMDc2NTIw","avatar_url":"https://avatars2.githubusercontent.com/u/31076520?v=4","gravatar_id":"","url":"https://api.github.com/users/JordanAngold","html_url":"https://github.com/JordanAngold","followers_url":"https://api.github.com/users/JordanAngold/followers","following_url":"https://api.github.com/users/JordanAngold/following{/other_user}","gists_url":"https://api.github.com/users/JordanAngold/gists{/gist_id}","starred_url":"https://api.github.com/users/JordanAngold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JordanAngold/subscriptions","organizations_url":"https://api.github.com/users/JordanAngold/orgs","repos_url":"https://api.github.com/users/JordanAngold/repos","events_url":"https://api.github.com/users/JordanAngold/events{/privacy}","received_events_url":"https://api.github.com/users/JordanAngold/received_events","type":"User","site_admin":false},"body":"This is the secondary bugfix mentioned elsewhere. There was a case where an `Invocation` for an `@OnlyIfActivated` method could be dispatched from a source stage A while the target actor was believed to be active on destination stage B. However, that actor could have deactivated before the `Invocation` arrived, and would prompt the destination stage B to start that actor -- even though the `Invocation` specifically says `@OnlyIfActivated`. So we need to guard against both _creating_ and _receiving_ those `Invocation`s.\r\n\r\nSee the new test case in `OnlyIfActivatedTest`.","created_at":"2018-11-26T19:31:20Z","updated_at":"2018-11-26T19:31:20Z","html_url":"https://github.com/ceckhardt/orbit/pull/12#discussion_r236395526","pull_request_url":"https://api.github.com/repos/ceckhardt/orbit/pulls/12","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/ceckhardt/orbit/pulls/comments/236395526"},"html":{"href":"https://github.com/ceckhardt/orbit/pull/12#discussion_r236395526"},"pull_request":{"href":"https://api.github.com/repos/ceckhardt/orbit/pulls/12"}}},"pull_request":{"url":"https://api.github.com/repos/ceckhardt/orbit/pulls/12","id":224333858,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI0MzMzODU4","html_url":"https://github.com/ceckhardt/orbit/pull/12","diff_url":"https://github.com/ceckhardt/orbit/pull/12.diff","patch_url":"https://github.com/ceckhardt/orbit/pull/12.patch","issue_url":"https://api.github.com/repos/ceckhardt/orbit/issues/12","number":12,"state":"closed","locked":false,"title":"Better Clustering Algorithm","user":{"login":"JordanAngold","id":31076520,"node_id":"MDQ6VXNlcjMxMDc2NTIw","avatar_url":"https://avatars2.githubusercontent.com/u/31076520?v=4","gravatar_id":"","url":"https://api.github.com/users/JordanAngold","html_url":"https://github.com/JordanAngold","followers_url":"https://api.github.com/users/JordanAngold/followers","following_url":"https://api.github.com/users/JordanAngold/following{/other_user}","gists_url":"https://api.github.com/users/JordanAngold/gists{/gist_id}","starred_url":"https://api.github.com/users/JordanAngold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/JordanAngold/subscriptions","organizations_url":"https://api.github.com/users/JordanAngold/orgs","repos_url":"https://api.github.com/users/JordanAngold/repos","events_url":"https://api.github.com/users/JordanAngold/events{/privacy}","received_events_url":"https://api.github.com/users/JordanAngold/received_events","type":"User","site_admin":false},"body":"Significantly alter clustering algorithm to resolve issues with Orbit incorrectly causing multiple activations of the same actor in a single cluster. These issues were specifically observed using the orbit-redis-cluster plugin, not the builtin JGroupsClusterPeer.\r\n\r\nOld cluster algorithm has nodes joining a cluster by announcing that they are members and the immediately proceeding without waiting for agreement from other nodes. This is bad because two nodes in the “same” cluster might not ‘see’ each other for several seconds. During this time, they will assume that any actor directory entries for the other node are defunct and will replace them, causing the multiple-activation issue above.\r\n\r\nThe old implementation also had the `Hosting` (aka `NodeCapabilities`) layer implement queries between nodes about which actors are supported where. The new implementation pushes those details down into the `ClusterPeer` implementation, which can then be simply based on a heartbeat-type algorithm.\r\n\r\nNow the `ClusterPeer` is responsible for making up-to-date `ClusterView` implementations available to the `Hosting` layer, which uses that `ClusterView` to perform its duties, including checking the `ActorDirectory` entries as appropriate.\r\n\r\nThis has had significant fallout:\r\n\r\n* JGroupsClusterPeer no longer works, because I didn't re-implement the queries from above on top of JGroups.\r\n* ActorClassFinder instances are now no longer permitted to be lazy (because nodes will announce their available set of actors as soon as they start up). `LazyActorClassFinder` is retained only for its role in unit tests.\r\n* Stage.pulse is now called 1/sec rather than 1/10sec. If this frequency becomes a problem then we will need to decouple Stage.pulse from ClusterPeer.pulse.\r\n* Actors will no longer \"time out\" while \"waiting for a server to host the X\" actor. If no such nodes are available, the actor will fail its activation immediately.\r\n\r\nAlso, an unrelated issue with `@OnlyWithActivated` invocations potentially triggering actor activations was found and fixed -- if an Invocation was issued for an actor that _seemed_ to be activated based on the ActorDirectory, but which was not actually activated, then the actor would be activated to serve that Invocation on the receive side. Invocations will now be discarded on both sender and receiver sides if the actor appears to be deactivated.","created_at":"2018-10-19T15:53:07Z","updated_at":"2018-11-26T19:31:20Z","closed_at":"2018-11-02T20:33:52Z","merged_at":"2018-11-02T20:33:52Z","merge_commit_sha":"9e1f9ae70ca34ffaef61f4b793b3001ae5d9c4de","assignee":{"login":"jpennell","id":318994,"node_id":"MDQ6VXNlcjMxODk5NA==","avatar_url":"https://avatars1.githubusercontent.com/u/318994?v=4","gravatar_id":"","url":"https://api.github.com/users/jpennell","html_url":"https://github.com/jpennell","followers_url":"https://api.github.com/users/jpennell/followers","following_url":"https://api.github.com/users/jpennell/following{/other_user}","gists_url":"https://api.github.com/users/jpennell/gists{/gist_id}","starred_url":"https://api.github.com/users/jpennell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpennell/subscriptions","organizations_url":"https://api.github.com/users/jpennell/orgs","repos_url":"https://api.github.com/users/jpennell/repos","events_url":"https://api.github.com/users/jpennell/events{/privacy}","received_events_url":"https://api.github.com/users/jpennell/received_events","type":"User","site_admin":false},"assignees":[{"login":"jpennell","id":318994,"node_id":"MDQ6VXNlcjMxODk5NA==","avatar_url":"https://avatars1.githubusercontent.com/u/318994?v=4","gravatar_id":"","url":"https://api.github.com/users/jpennell","html_url":"https://github.com/jpennell","followers_url":"https://api.github.com/users/jpennell/followers","following_url":"https://api.github.com/users/jpennell/following{/other_user}","gists_url":"https://api.github.com/users/jpennell/gists{/gist_id}","starred_url":"https://api.github.com/users/jpennell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpennell/subscriptions","organizations_url":"https://api.github.com/users/jpennell/orgs","repos_url":"https://api.github.com/users/jpennell/repos","events_url":"https://api.github.com/users/jpennell/events{/privacy}","received_events_url":"https://api.github.com/users/jpennell/received_events","type":"User","site_admin":false},{"login":"ceckhardt","id":2566885,"node_id":"MDQ6VXNlcjI1NjY4ODU=","avatar_url":"https://avatars1.githubusercontent.com/u/2566885?v=4","gravatar_id":"","url":"https://api.github.com/users/ceckhardt","html_url":"https://github.com/ceckhardt","followers_url":"https://api.github.com/users/ceckhardt/followers","following_url":"https://api.github.com/users/ceckhardt/following{/other_user}","gists_url":"https://api.github.com/users/ceckhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/ceckhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ceckhardt/subscriptions","organizations_url":"https://api.github.com/users/ceckhardt/orgs","repos_url":"https://api.github.com/users/ceckhardt/repos","events_url":"https://api.github.com/users/ceckhardt/events{/privacy}","received_events_url":"https://api.github.com/users/ceckhardt/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"jpennell","id":318994,"node_id":"MDQ6VXNlcjMxODk5NA==","avatar_url":"https://avatars1.githubusercontent.com/u/318994?v=4","gravatar_id":"","url":"https://api.github.com/users/jpennell","html_url":"https://github.com/jpennell","followers_url":"https://api.github.com/users/jpennell/followers","following_url":"https://api.github.com/users/jpennell/following{/other_user}","gists_url":"https://api.github.com/users/jpennell/gists{/gist_id}","starred_url":"https://api.github.com/users/jpennell/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jpennell/subscriptions","organizations_url":"https://api.github.com/users/jpennell/orgs","repos_url":"https://api.github.com/users/jpennell/repos","events_url":"https://api.github.com/users/jpennell/events{/privacy}","received_events_url":"https://api.github.com/users/jpennell/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ceckhardt/orbit/pulls/12/commits","review_comments_url":"https://api.github.com/repos/ceckhardt/orbit/pulls/12/comments","review_comment_url":"https://api.github.com/repos/ceckhardt/orbit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ceckhardt/orbit/issues/12/comments","statuses_url":"https://api.github.com/repos/ceckhardt/orbit/statuses/23fc15bf6f2b46038e0ca076cd39a662fd280758","head":{"label":"ceckhardt:feature/better-clustering-algorithm","ref":"feature/better-clustering-algorithm","sha":"23fc15bf6f2b46038e0ca076cd39a662fd280758","user":{"login":"ceckhardt","id":2566885,"node_id":"MDQ6VXNlcjI1NjY4ODU=","avatar_url":"https://avatars1.githubusercontent.com/u/2566885?v=4","gravatar_id":"","url":"https://api.github.com/users/ceckhardt","html_url":"https://github.com/ceckhardt","followers_url":"https://api.github.com/users/ceckhardt/followers","following_url":"https://api.github.com/users/ceckhardt/following{/other_user}","gists_url":"https://api.github.com/users/ceckhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/ceckhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ceckhardt/subscriptions","organizations_url":"https://api.github.com/users/ceckhardt/orgs","repos_url":"https://api.github.com/users/ceckhardt/repos","events_url":"https://api.github.com/users/ceckhardt/events{/privacy}","received_events_url":"https://api.github.com/users/ceckhardt/received_events","type":"User","site_admin":false},"repo":{"id":76073946,"node_id":"MDEwOlJlcG9zaXRvcnk3NjA3Mzk0Ng==","name":"orbit","full_name":"ceckhardt/orbit","private":false,"owner":{"login":"ceckhardt","id":2566885,"node_id":"MDQ6VXNlcjI1NjY4ODU=","avatar_url":"https://avatars1.githubusercontent.com/u/2566885?v=4","gravatar_id":"","url":"https://api.github.com/users/ceckhardt","html_url":"https://github.com/ceckhardt","followers_url":"https://api.github.com/users/ceckhardt/followers","following_url":"https://api.github.com/users/ceckhardt/following{/other_user}","gists_url":"https://api.github.com/users/ceckhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/ceckhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ceckhardt/subscriptions","organizations_url":"https://api.github.com/users/ceckhardt/orgs","repos_url":"https://api.github.com/users/ceckhardt/repos","events_url":"https://api.github.com/users/ceckhardt/events{/privacy}","received_events_url":"https://api.github.com/users/ceckhardt/received_events","type":"User","site_admin":false},"html_url":"https://github.com/ceckhardt/orbit","description":"Orbit - Virtual actor framework for building distributed systems","fork":true,"url":"https://api.github.com/repos/ceckhardt/orbit","forks_url":"https://api.github.com/repos/ceckhardt/orbit/forks","keys_url":"https://api.github.com/repos/ceckhardt/orbit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ceckhardt/orbit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ceckhardt/orbit/teams","hooks_url":"https://api.github.com/repos/ceckhardt/orbit/hooks","issue_events_url":"https://api.github.com/repos/ceckhardt/orbit/issues/events{/number}","events_url":"https://api.github.com/repos/ceckhardt/orbit/events","assignees_url":"https://api.github.com/repos/ceckhardt/orbit/assignees{/user}","branches_url":"https://api.github.com/repos/ceckhardt/orbit/branches{/branch}","tags_url":"https://api.github.com/repos/ceckhardt/orbit/tags","blobs_url":"https://api.github.com/repos/ceckhardt/orbit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ceckhardt/orbit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ceckhardt/orbit/git/refs{/sha}","trees_url":"https://api.github.com/repos/ceckhardt/orbit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ceckhardt/orbit/statuses/{sha}","languages_url":"https://api.github.com/repos/ceckhardt/orbit/languages","stargazers_url":"https://api.github.com/repos/ceckhardt/orbit/stargazers","contributors_url":"https://api.github.com/repos/ceckhardt/orbit/contributors","subscribers_url":"https://api.github.com/repos/ceckhardt/orbit/subscribers","subscription_url":"https://api.github.com/repos/ceckhardt/orbit/subscription","commits_url":"https://api.github.com/repos/ceckhardt/orbit/commits{/sha}","git_commits_url":"https://api.github.com/repos/ceckhardt/orbit/git/commits{/sha}","comments_url":"https://api.github.com/repos/ceckhardt/orbit/comments{/number}","issue_comment_url":"https://api.github.com/repos/ceckhardt/orbit/issues/comments{/number}","contents_url":"https://api.github.com/repos/ceckhardt/orbit/contents/{+path}","compare_url":"https://api.github.com/repos/ceckhardt/orbit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ceckhardt/orbit/merges","archive_url":"https://api.github.com/repos/ceckhardt/orbit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ceckhardt/orbit/downloads","issues_url":"https://api.github.com/repos/ceckhardt/orbit/issues{/number}","pulls_url":"https://api.github.com/repos/ceckhardt/orbit/pulls{/number}","milestones_url":"https://api.github.com/repos/ceckhardt/orbit/milestones{/number}","notifications_url":"https://api.github.com/repos/ceckhardt/orbit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ceckhardt/orbit/labels{/name}","releases_url":"https://api.github.com/repos/ceckhardt/orbit/releases{/id}","deployments_url":"https://api.github.com/repos/ceckhardt/orbit/deployments","created_at":"2016-12-09T22:07:21Z","updated_at":"2018-11-23T19:59:04Z","pushed_at":"2018-11-23T19:59:01Z","git_url":"git://github.com/ceckhardt/orbit.git","ssh_url":"git@github.com:ceckhardt/orbit.git","clone_url":"https://github.com/ceckhardt/orbit.git","svn_url":"https://github.com/ceckhardt/orbit","homepage":"","size":7043,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"ceckhardt:master","ref":"master","sha":"4a589848f14ee5f3ee32d7c9a14e61b372570719","user":{"login":"ceckhardt","id":2566885,"node_id":"MDQ6VXNlcjI1NjY4ODU=","avatar_url":"https://avatars1.githubusercontent.com/u/2566885?v=4","gravatar_id":"","url":"https://api.github.com/users/ceckhardt","html_url":"https://github.com/ceckhardt","followers_url":"https://api.github.com/users/ceckhardt/followers","following_url":"https://api.github.com/users/ceckhardt/following{/other_user}","gists_url":"https://api.github.com/users/ceckhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/ceckhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ceckhardt/subscriptions","organizations_url":"https://api.github.com/users/ceckhardt/orgs","repos_url":"https://api.github.com/users/ceckhardt/repos","events_url":"https://api.github.com/users/ceckhardt/events{/privacy}","received_events_url":"https://api.github.com/users/ceckhardt/received_events","type":"User","site_admin":false},"repo":{"id":76073946,"node_id":"MDEwOlJlcG9zaXRvcnk3NjA3Mzk0Ng==","name":"orbit","full_name":"ceckhardt/orbit","private":false,"owner":{"login":"ceckhardt","id":2566885,"node_id":"MDQ6VXNlcjI1NjY4ODU=","avatar_url":"https://avatars1.githubusercontent.com/u/2566885?v=4","gravatar_id":"","url":"https://api.github.com/users/ceckhardt","html_url":"https://github.com/ceckhardt","followers_url":"https://api.github.com/users/ceckhardt/followers","following_url":"https://api.github.com/users/ceckhardt/following{/other_user}","gists_url":"https://api.github.com/users/ceckhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/ceckhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ceckhardt/subscriptions","organizations_url":"https://api.github.com/users/ceckhardt/orgs","repos_url":"https://api.github.com/users/ceckhardt/repos","events_url":"https://api.github.com/users/ceckhardt/events{/privacy}","received_events_url":"https://api.github.com/users/ceckhardt/received_events","type":"User","site_admin":false},"html_url":"https://github.com/ceckhardt/orbit","description":"Orbit - Virtual actor framework for building distributed systems","fork":true,"url":"https://api.github.com/repos/ceckhardt/orbit","forks_url":"https://api.github.com/repos/ceckhardt/orbit/forks","keys_url":"https://api.github.com/repos/ceckhardt/orbit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ceckhardt/orbit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ceckhardt/orbit/teams","hooks_url":"https://api.github.com/repos/ceckhardt/orbit/hooks","issue_events_url":"https://api.github.com/repos/ceckhardt/orbit/issues/events{/number}","events_url":"https://api.github.com/repos/ceckhardt/orbit/events","assignees_url":"https://api.github.com/repos/ceckhardt/orbit/assignees{/user}","branches_url":"https://api.github.com/repos/ceckhardt/orbit/branches{/branch}","tags_url":"https://api.github.com/repos/ceckhardt/orbit/tags","blobs_url":"https://api.github.com/repos/ceckhardt/orbit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ceckhardt/orbit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ceckhardt/orbit/git/refs{/sha}","trees_url":"https://api.github.com/repos/ceckhardt/orbit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ceckhardt/orbit/statuses/{sha}","languages_url":"https://api.github.com/repos/ceckhardt/orbit/languages","stargazers_url":"https://api.github.com/repos/ceckhardt/orbit/stargazers","contributors_url":"https://api.github.com/repos/ceckhardt/orbit/contributors","subscribers_url":"https://api.github.com/repos/ceckhardt/orbit/subscribers","subscription_url":"https://api.github.com/repos/ceckhardt/orbit/subscription","commits_url":"https://api.github.com/repos/ceckhardt/orbit/commits{/sha}","git_commits_url":"https://api.github.com/repos/ceckhardt/orbit/git/commits{/sha}","comments_url":"https://api.github.com/repos/ceckhardt/orbit/comments{/number}","issue_comment_url":"https://api.github.com/repos/ceckhardt/orbit/issues/comments{/number}","contents_url":"https://api.github.com/repos/ceckhardt/orbit/contents/{+path}","compare_url":"https://api.github.com/repos/ceckhardt/orbit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ceckhardt/orbit/merges","archive_url":"https://api.github.com/repos/ceckhardt/orbit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ceckhardt/orbit/downloads","issues_url":"https://api.github.com/repos/ceckhardt/orbit/issues{/number}","pulls_url":"https://api.github.com/repos/ceckhardt/orbit/pulls{/number}","milestones_url":"https://api.github.com/repos/ceckhardt/orbit/milestones{/number}","notifications_url":"https://api.github.com/repos/ceckhardt/orbit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ceckhardt/orbit/labels{/name}","releases_url":"https://api.github.com/repos/ceckhardt/orbit/releases{/id}","deployments_url":"https://api.github.com/repos/ceckhardt/orbit/deployments","created_at":"2016-12-09T22:07:21Z","updated_at":"2018-11-23T19:59:04Z","pushed_at":"2018-11-23T19:59:01Z","git_url":"git://github.com/ceckhardt/orbit.git","ssh_url":"git@github.com:ceckhardt/orbit.git","clone_url":"https://github.com/ceckhardt/orbit.git","svn_url":"https://github.com/ceckhardt/orbit","homepage":"","size":7043,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ceckhardt/orbit/pulls/12"},"html":{"href":"https://github.com/ceckhardt/orbit/pull/12"},"issue":{"href":"https://api.github.com/repos/ceckhardt/orbit/issues/12"},"comments":{"href":"https://api.github.com/repos/ceckhardt/orbit/issues/12/comments"},"review_comments":{"href":"https://api.github.com/repos/ceckhardt/orbit/pulls/12/comments"},"review_comment":{"href":"https://api.github.com/repos/ceckhardt/orbit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ceckhardt/orbit/pulls/12/commits"},"statuses":{"href":"https://api.github.com/repos/ceckhardt/orbit/statuses/23fc15bf6f2b46038e0ca076cd39a662fd280758"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"JordanAngold"}}