{"action":"opened","number":828,"pull_request":{"url":"https://api.github.com/repos/atomix/atomix/pulls/828","id":212201491,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEyMjAxNDkx","html_url":"https://github.com/atomix/atomix/pull/828","diff_url":"https://github.com/atomix/atomix/pull/828.diff","patch_url":"https://github.com/atomix/atomix/pull/828.patch","issue_url":"https://api.github.com/repos/atomix/atomix/issues/828","number":828,"state":"open","locked":false,"title":"Avoid globally expiring sessions that have not been orphaned by a deleted primitive service","user":{"login":"kuujo","id":823318,"node_id":"MDQ6VXNlcjgyMzMxOA==","avatar_url":"https://avatars3.githubusercontent.com/u/823318?v=4","gravatar_id":"","url":"https://api.github.com/users/kuujo","html_url":"https://github.com/kuujo","followers_url":"https://api.github.com/users/kuujo/followers","following_url":"https://api.github.com/users/kuujo/following{/other_user}","gists_url":"https://api.github.com/users/kuujo/gists{/gist_id}","starred_url":"https://api.github.com/users/kuujo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kuujo/subscriptions","organizations_url":"https://api.github.com/users/kuujo/orgs","repos_url":"https://api.github.com/users/kuujo/repos","events_url":"https://api.github.com/users/kuujo/events{/privacy}","received_events_url":"https://api.github.com/users/kuujo/received_events","type":"User","site_admin":false},"body":"This PR fixes a bug in the implementation of deletes for Raft primitives. The implementation of deletes expires Raft sessions outside the context of specific primitive services to ensure that sessions that are active for a deleted primitive are eventually expired if the primitive client doesn't send a keep-alive. But the current implementation does not just expire sessions for deleted primitives, it expires them for all primitives. So, if the `RaftServiceManager` expires a session for a service, the service's `expire` method is never called and the still active service will hold on to a session that's been expired. When the service then attempts to send events to an expired session that it never removed, it will get an `IllegalStateException`.\r\n\r\nThis PR exposes the `deleted` state of the service associated with each session and avoids expiring sessions for services that haven't been deleted, thus leaving it up to each individual service to expire its sessions while active.","created_at":"2018-08-30T20:29:04Z","updated_at":"2018-08-30T20:29:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/atomix/atomix/pulls/828/commits","review_comments_url":"https://api.github.com/repos/atomix/atomix/pulls/828/comments","review_comment_url":"https://api.github.com/repos/atomix/atomix/pulls/comments{/number}","comments_url":"https://api.github.com/repos/atomix/atomix/issues/828/comments","statuses_url":"https://api.github.com/repos/atomix/atomix/statuses/7c3199a91c2c763b00483cb33b73f90a1d04ae8d","head":{"label":"atomix:raft-session-expire-orphan","ref":"raft-session-expire-orphan","sha":"7c3199a91c2c763b00483cb33b73f90a1d04ae8d","user":{"login":"atomix","id":14324067,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MzI0MDY3","avatar_url":"https://avatars3.githubusercontent.com/u/14324067?v=4","gravatar_id":"","url":"https://api.github.com/users/atomix","html_url":"https://github.com/atomix","followers_url":"https://api.github.com/users/atomix/followers","following_url":"https://api.github.com/users/atomix/following{/other_user}","gists_url":"https://api.github.com/users/atomix/gists{/gist_id}","starred_url":"https://api.github.com/users/atomix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atomix/subscriptions","organizations_url":"https://api.github.com/users/atomix/orgs","repos_url":"https://api.github.com/users/atomix/repos","events_url":"https://api.github.com/users/atomix/events{/privacy}","received_events_url":"https://api.github.com/users/atomix/received_events","type":"Organization","site_admin":false},"repo":{"id":16294920,"node_id":"MDEwOlJlcG9zaXRvcnkxNjI5NDkyMA==","name":"atomix","full_name":"atomix/atomix","owner":{"login":"atomix","id":14324067,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MzI0MDY3","avatar_url":"https://avatars3.githubusercontent.com/u/14324067?v=4","gravatar_id":"","url":"https://api.github.com/users/atomix","html_url":"https://github.com/atomix","followers_url":"https://api.github.com/users/atomix/followers","following_url":"https://api.github.com/users/atomix/following{/other_user}","gists_url":"https://api.github.com/users/atomix/gists{/gist_id}","starred_url":"https://api.github.com/users/atomix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atomix/subscriptions","organizations_url":"https://api.github.com/users/atomix/orgs","repos_url":"https://api.github.com/users/atomix/repos","events_url":"https://api.github.com/users/atomix/events{/privacy}","received_events_url":"https://api.github.com/users/atomix/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/atomix/atomix","description":"A reactive Java framework for building fault-tolerant distributed systems","fork":false,"url":"https://api.github.com/repos/atomix/atomix","forks_url":"https://api.github.com/repos/atomix/atomix/forks","keys_url":"https://api.github.com/repos/atomix/atomix/keys{/key_id}","collaborators_url":"https://api.github.com/repos/atomix/atomix/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/atomix/atomix/teams","hooks_url":"https://api.github.com/repos/atomix/atomix/hooks","issue_events_url":"https://api.github.com/repos/atomix/atomix/issues/events{/number}","events_url":"https://api.github.com/repos/atomix/atomix/events","assignees_url":"https://api.github.com/repos/atomix/atomix/assignees{/user}","branches_url":"https://api.github.com/repos/atomix/atomix/branches{/branch}","tags_url":"https://api.github.com/repos/atomix/atomix/tags","blobs_url":"https://api.github.com/repos/atomix/atomix/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/atomix/atomix/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/atomix/atomix/git/refs{/sha}","trees_url":"https://api.github.com/repos/atomix/atomix/git/trees{/sha}","statuses_url":"https://api.github.com/repos/atomix/atomix/statuses/{sha}","languages_url":"https://api.github.com/repos/atomix/atomix/languages","stargazers_url":"https://api.github.com/repos/atomix/atomix/stargazers","contributors_url":"https://api.github.com/repos/atomix/atomix/contributors","subscribers_url":"https://api.github.com/repos/atomix/atomix/subscribers","subscription_url":"https://api.github.com/repos/atomix/atomix/subscription","commits_url":"https://api.github.com/repos/atomix/atomix/commits{/sha}","git_commits_url":"https://api.github.com/repos/atomix/atomix/git/commits{/sha}","comments_url":"https://api.github.com/repos/atomix/atomix/comments{/number}","issue_comment_url":"https://api.github.com/repos/atomix/atomix/issues/comments{/number}","contents_url":"https://api.github.com/repos/atomix/atomix/contents/{+path}","compare_url":"https://api.github.com/repos/atomix/atomix/compare/{base}...{head}","merges_url":"https://api.github.com/repos/atomix/atomix/merges","archive_url":"https://api.github.com/repos/atomix/atomix/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/atomix/atomix/downloads","issues_url":"https://api.github.com/repos/atomix/atomix/issues{/number}","pulls_url":"https://api.github.com/repos/atomix/atomix/pulls{/number}","milestones_url":"https://api.github.com/repos/atomix/atomix/milestones{/number}","notifications_url":"https://api.github.com/repos/atomix/atomix/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/atomix/atomix/labels{/name}","releases_url":"https://api.github.com/repos/atomix/atomix/releases{/id}","deployments_url":"https://api.github.com/repos/atomix/atomix/deployments","created_at":"2014-01-27T22:20:47Z","updated_at":"2018-08-30T18:53:07Z","pushed_at":"2018-08-30T20:25:59Z","git_url":"git://github.com/atomix/atomix.git","ssh_url":"git@github.com:atomix/atomix.git","clone_url":"https://github.com/atomix/atomix.git","svn_url":"https://github.com/atomix/atomix","homepage":"https://atomix.io","size":17102,"stargazers_count":1357,"watchers_count":1357,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":230,"mirror_url":null,"archived":false,"open_issues_count":13,"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":230,"open_issues":13,"watchers":1357,"default_branch":"master"}},"base":{"label":"atomix:master","ref":"master","sha":"b5a4358b68732fc26782c0a0c85177bce0bc79e6","user":{"login":"atomix","id":14324067,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MzI0MDY3","avatar_url":"https://avatars3.githubusercontent.com/u/14324067?v=4","gravatar_id":"","url":"https://api.github.com/users/atomix","html_url":"https://github.com/atomix","followers_url":"https://api.github.com/users/atomix/followers","following_url":"https://api.github.com/users/atomix/following{/other_user}","gists_url":"https://api.github.com/users/atomix/gists{/gist_id}","starred_url":"https://api.github.com/users/atomix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atomix/subscriptions","organizations_url":"https://api.github.com/users/atomix/orgs","repos_url":"https://api.github.com/users/atomix/repos","events_url":"https://api.github.com/users/atomix/events{/privacy}","received_events_url":"https://api.github.com/users/atomix/received_events","type":"Organization","site_admin":false},"repo":{"id":16294920,"node_id":"MDEwOlJlcG9zaXRvcnkxNjI5NDkyMA==","name":"atomix","full_name":"atomix/atomix","owner":{"login":"atomix","id":14324067,"node_id":"MDEyOk9yZ2FuaXphdGlvbjE0MzI0MDY3","avatar_url":"https://avatars3.githubusercontent.com/u/14324067?v=4","gravatar_id":"","url":"https://api.github.com/users/atomix","html_url":"https://github.com/atomix","followers_url":"https://api.github.com/users/atomix/followers","following_url":"https://api.github.com/users/atomix/following{/other_user}","gists_url":"https://api.github.com/users/atomix/gists{/gist_id}","starred_url":"https://api.github.com/users/atomix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/atomix/subscriptions","organizations_url":"https://api.github.com/users/atomix/orgs","repos_url":"https://api.github.com/users/atomix/repos","events_url":"https://api.github.com/users/atomix/events{/privacy}","received_events_url":"https://api.github.com/users/atomix/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/atomix/atomix","description":"A reactive Java framework for building fault-tolerant distributed systems","fork":false,"url":"https://api.github.com/repos/atomix/atomix","forks_url":"https://api.github.com/repos/atomix/atomix/forks","keys_url":"https://api.github.com/repos/atomix/atomix/keys{/key_id}","collaborators_url":"https://api.github.com/repos/atomix/atomix/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/atomix/atomix/teams","hooks_url":"https://api.github.com/repos/atomix/atomix/hooks","issue_events_url":"https://api.github.com/repos/atomix/atomix/issues/events{/number}","events_url":"https://api.github.com/repos/atomix/atomix/events","assignees_url":"https://api.github.com/repos/atomix/atomix/assignees{/user}","branches_url":"https://api.github.com/repos/atomix/atomix/branches{/branch}","tags_url":"https://api.github.com/repos/atomix/atomix/tags","blobs_url":"https://api.github.com/repos/atomix/atomix/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/atomix/atomix/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/atomix/atomix/git/refs{/sha}","trees_url":"https://api.github.com/repos/atomix/atomix/git/trees{/sha}","statuses_url":"https://api.github.com/repos/atomix/atomix/statuses/{sha}","languages_url":"https://api.github.com/repos/atomix/atomix/languages","stargazers_url":"https://api.github.com/repos/atomix/atomix/stargazers","contributors_url":"https://api.github.com/repos/atomix/atomix/contributors","subscribers_url":"https://api.github.com/repos/atomix/atomix/subscribers","subscription_url":"https://api.github.com/repos/atomix/atomix/subscription","commits_url":"https://api.github.com/repos/atomix/atomix/commits{/sha}","git_commits_url":"https://api.github.com/repos/atomix/atomix/git/commits{/sha}","comments_url":"https://api.github.com/repos/atomix/atomix/comments{/number}","issue_comment_url":"https://api.github.com/repos/atomix/atomix/issues/comments{/number}","contents_url":"https://api.github.com/repos/atomix/atomix/contents/{+path}","compare_url":"https://api.github.com/repos/atomix/atomix/compare/{base}...{head}","merges_url":"https://api.github.com/repos/atomix/atomix/merges","archive_url":"https://api.github.com/repos/atomix/atomix/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/atomix/atomix/downloads","issues_url":"https://api.github.com/repos/atomix/atomix/issues{/number}","pulls_url":"https://api.github.com/repos/atomix/atomix/pulls{/number}","milestones_url":"https://api.github.com/repos/atomix/atomix/milestones{/number}","notifications_url":"https://api.github.com/repos/atomix/atomix/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/atomix/atomix/labels{/name}","releases_url":"https://api.github.com/repos/atomix/atomix/releases{/id}","deployments_url":"https://api.github.com/repos/atomix/atomix/deployments","created_at":"2014-01-27T22:20:47Z","updated_at":"2018-08-30T18:53:07Z","pushed_at":"2018-08-30T20:25:59Z","git_url":"git://github.com/atomix/atomix.git","ssh_url":"git@github.com:atomix/atomix.git","clone_url":"https://github.com/atomix/atomix.git","svn_url":"https://github.com/atomix/atomix","homepage":"https://atomix.io","size":17102,"stargazers_count":1357,"watchers_count":1357,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":230,"mirror_url":null,"archived":false,"open_issues_count":13,"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":230,"open_issues":13,"watchers":1357,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/atomix/atomix/pulls/828"},"html":{"href":"https://github.com/atomix/atomix/pull/828"},"issue":{"href":"https://api.github.com/repos/atomix/atomix/issues/828"},"comments":{"href":"https://api.github.com/repos/atomix/atomix/issues/828/comments"},"review_comments":{"href":"https://api.github.com/repos/atomix/atomix/pulls/828/comments"},"review_comment":{"href":"https://api.github.com/repos/atomix/atomix/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/atomix/atomix/pulls/828/commits"},"statuses":{"href":"https://api.github.com/repos/atomix/atomix/statuses/7c3199a91c2c763b00483cb33b73f90a1d04ae8d"}},"author_association":"MEMBER","merged":false,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":17,"deletions":2,"changed_files":2}}
{"actor":{"display_login":"kuujo"}}