{"action":"closed","number":5830,"pull_request":{"url":"https://api.github.com/repos/influxdata/influxdb/pulls/5830","id":60662878,"html_url":"https://github.com/influxdata/influxdb/pull/5830","diff_url":"https://github.com/influxdata/influxdb/pull/5830.diff","patch_url":"https://github.com/influxdata/influxdb/pull/5830.patch","issue_url":"https://api.github.com/repos/influxdata/influxdb/issues/5830","number":5830,"state":"closed","locked":false,"title":"stats: allow statistics maps to quietly fade away when the object they refer to is closed","user":{"login":"jonseymour","id":207131,"avatar_url":"https://avatars.githubusercontent.com/u/207131?v=3","gravatar_id":"","url":"https://api.github.com/users/jonseymour","html_url":"https://github.com/jonseymour","followers_url":"https://api.github.com/users/jonseymour/followers","following_url":"https://api.github.com/users/jonseymour/following{/other_user}","gists_url":"https://api.github.com/users/jonseymour/gists{/gist_id}","starred_url":"https://api.github.com/users/jonseymour/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonseymour/subscriptions","organizations_url":"https://api.github.com/users/jonseymour/orgs","repos_url":"https://api.github.com/users/jonseymour/repos","events_url":"https://api.github.com/users/jonseymour/events{/privacy}","received_events_url":"https://api.github.com/users/jonseymour/received_events","type":"User","site_admin":false},"body":"As per #5784, there is a risk that a long running influxd process will accumulate a lot of statistics\r\nthat describe objects that have already been closed.\r\n\r\nThis is a concern primarily because of the amount of IO and CPU involved with continuing to publish the last will and testament of an object long since departed.\r\n\r\nThis series address the issue by pinching some code from Kapacitor - thanks @nathanielc - and using\r\nit as a top level name space for influx statistics objects. The maps are reference counted. One reference is allocated to the described object, another to the monitor.\r\n\r\nWhen the described object is closed, it yells DeleteStatistics! at the influxdb package which takes note of the request, but otherwise ignores it. When the monitor is doing its thing, it quietly peeks at the statistics map's reference count and if it detects that its number is up (well, down really), it yells DeleteStatistics! at the influxdb package who takes notice of it this time. This deferral of the grim reaper is required so that the monitor has time to tidy up the paper work and confirm that the undertaker's cheque has not bounced.\r\n\r\nFor review by @mark-rushakoff and @nathanielc \r\n\r\n**Things left to do**\r\n\r\n- [x] update wal.go and file_store.go to use the new 'stats' API\r\n- [x] check for and eliminate race conditions during system initialization (e.g. make sure stats are not closed early because the monitor missed an early open notification)\r\n- [x] check for and eliminate potential deadlocks that might arise from use of an observer pattern (make sure that the Open call done by the monitor's listener can't cause a deadlock of some kind)\r\n- [x] refactor Builder concerns into builder.go\r\n- [x] refactor reference counting concerns into lifecycle.go\r\n- [x] write tests for deadlocks\r\n- [x] write tests for OnOpen/NotifyOpen ordering cases\r\n- [ ] add some tests to the 'stats' package\r\n- [ ] cleanup the commentary\r\n\r\n\r\n","created_at":"2016-02-25T11:19:38Z","updated_at":"2016-02-28T08:02:43Z","closed_at":"2016-02-28T08:02:43Z","merged_at":null,"merge_commit_sha":"6639362cd90ae740fb2a0e91c897ed748d73641a","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/influxdata/influxdb/pulls/5830/commits","review_comments_url":"https://api.github.com/repos/influxdata/influxdb/pulls/5830/comments","review_comment_url":"https://api.github.com/repos/influxdata/influxdb/pulls/comments{/number}","comments_url":"https://api.github.com/repos/influxdata/influxdb/issues/5830/comments","statuses_url":"https://api.github.com/repos/influxdata/influxdb/statuses/f18d7e759625b829a8ad82e1b7631e5e9412b7d0","head":{"label":"jonseymour:jss-5784-expvar-leak","ref":"jss-5784-expvar-leak","sha":"f18d7e759625b829a8ad82e1b7631e5e9412b7d0","user":{"login":"jonseymour","id":207131,"avatar_url":"https://avatars.githubusercontent.com/u/207131?v=3","gravatar_id":"","url":"https://api.github.com/users/jonseymour","html_url":"https://github.com/jonseymour","followers_url":"https://api.github.com/users/jonseymour/followers","following_url":"https://api.github.com/users/jonseymour/following{/other_user}","gists_url":"https://api.github.com/users/jonseymour/gists{/gist_id}","starred_url":"https://api.github.com/users/jonseymour/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonseymour/subscriptions","organizations_url":"https://api.github.com/users/jonseymour/orgs","repos_url":"https://api.github.com/users/jonseymour/repos","events_url":"https://api.github.com/users/jonseymour/events{/privacy}","received_events_url":"https://api.github.com/users/jonseymour/received_events","type":"User","site_admin":false},"repo":{"id":40862560,"name":"influxdb","full_name":"jonseymour/influxdb","owner":{"login":"jonseymour","id":207131,"avatar_url":"https://avatars.githubusercontent.com/u/207131?v=3","gravatar_id":"","url":"https://api.github.com/users/jonseymour","html_url":"https://github.com/jonseymour","followers_url":"https://api.github.com/users/jonseymour/followers","following_url":"https://api.github.com/users/jonseymour/following{/other_user}","gists_url":"https://api.github.com/users/jonseymour/gists{/gist_id}","starred_url":"https://api.github.com/users/jonseymour/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonseymour/subscriptions","organizations_url":"https://api.github.com/users/jonseymour/orgs","repos_url":"https://api.github.com/users/jonseymour/repos","events_url":"https://api.github.com/users/jonseymour/events{/privacy}","received_events_url":"https://api.github.com/users/jonseymour/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jonseymour/influxdb","description":"Scalable datastore for metrics, events, and real-time analytics","fork":true,"url":"https://api.github.com/repos/jonseymour/influxdb","forks_url":"https://api.github.com/repos/jonseymour/influxdb/forks","keys_url":"https://api.github.com/repos/jonseymour/influxdb/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jonseymour/influxdb/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jonseymour/influxdb/teams","hooks_url":"https://api.github.com/repos/jonseymour/influxdb/hooks","issue_events_url":"https://api.github.com/repos/jonseymour/influxdb/issues/events{/number}","events_url":"https://api.github.com/repos/jonseymour/influxdb/events","assignees_url":"https://api.github.com/repos/jonseymour/influxdb/assignees{/user}","branches_url":"https://api.github.com/repos/jonseymour/influxdb/branches{/branch}","tags_url":"https://api.github.com/repos/jonseymour/influxdb/tags","blobs_url":"https://api.github.com/repos/jonseymour/influxdb/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jonseymour/influxdb/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jonseymour/influxdb/git/refs{/sha}","trees_url":"https://api.github.com/repos/jonseymour/influxdb/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jonseymour/influxdb/statuses/{sha}","languages_url":"https://api.github.com/repos/jonseymour/influxdb/languages","stargazers_url":"https://api.github.com/repos/jonseymour/influxdb/stargazers","contributors_url":"https://api.github.com/repos/jonseymour/influxdb/contributors","subscribers_url":"https://api.github.com/repos/jonseymour/influxdb/subscribers","subscription_url":"https://api.github.com/repos/jonseymour/influxdb/subscription","commits_url":"https://api.github.com/repos/jonseymour/influxdb/commits{/sha}","git_commits_url":"https://api.github.com/repos/jonseymour/influxdb/git/commits{/sha}","comments_url":"https://api.github.com/repos/jonseymour/influxdb/comments{/number}","issue_comment_url":"https://api.github.com/repos/jonseymour/influxdb/issues/comments{/number}","contents_url":"https://api.github.com/repos/jonseymour/influxdb/contents/{+path}","compare_url":"https://api.github.com/repos/jonseymour/influxdb/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jonseymour/influxdb/merges","archive_url":"https://api.github.com/repos/jonseymour/influxdb/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jonseymour/influxdb/downloads","issues_url":"https://api.github.com/repos/jonseymour/influxdb/issues{/number}","pulls_url":"https://api.github.com/repos/jonseymour/influxdb/pulls{/number}","milestones_url":"https://api.github.com/repos/jonseymour/influxdb/milestones{/number}","notifications_url":"https://api.github.com/repos/jonseymour/influxdb/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jonseymour/influxdb/labels{/name}","releases_url":"https://api.github.com/repos/jonseymour/influxdb/releases{/id}","deployments_url":"https://api.github.com/repos/jonseymour/influxdb/deployments","created_at":"2015-08-17T04:08:54Z","updated_at":"2016-02-19T13:19:44Z","pushed_at":"2016-02-28T08:02:43Z","git_url":"git://github.com/jonseymour/influxdb.git","ssh_url":"git@github.com:jonseymour/influxdb.git","clone_url":"https://github.com/jonseymour/influxdb.git","svn_url":"https://github.com/jonseymour/influxdb","homepage":"http://influxdb.com","size":37841,"stargazers_count":1,"watchers_count":1,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":1,"default_branch":"master"}},"base":{"label":"influxdata:master","ref":"master","sha":"f18d7e759625b829a8ad82e1b7631e5e9412b7d0","user":{"login":"influxdata","id":5713248,"avatar_url":"https://avatars.githubusercontent.com/u/5713248?v=3","gravatar_id":"","url":"https://api.github.com/users/influxdata","html_url":"https://github.com/influxdata","followers_url":"https://api.github.com/users/influxdata/followers","following_url":"https://api.github.com/users/influxdata/following{/other_user}","gists_url":"https://api.github.com/users/influxdata/gists{/gist_id}","starred_url":"https://api.github.com/users/influxdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/influxdata/subscriptions","organizations_url":"https://api.github.com/users/influxdata/orgs","repos_url":"https://api.github.com/users/influxdata/repos","events_url":"https://api.github.com/users/influxdata/events{/privacy}","received_events_url":"https://api.github.com/users/influxdata/received_events","type":"Organization","site_admin":false},"repo":{"id":13124802,"name":"influxdb","full_name":"influxdata/influxdb","owner":{"login":"influxdata","id":5713248,"avatar_url":"https://avatars.githubusercontent.com/u/5713248?v=3","gravatar_id":"","url":"https://api.github.com/users/influxdata","html_url":"https://github.com/influxdata","followers_url":"https://api.github.com/users/influxdata/followers","following_url":"https://api.github.com/users/influxdata/following{/other_user}","gists_url":"https://api.github.com/users/influxdata/gists{/gist_id}","starred_url":"https://api.github.com/users/influxdata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/influxdata/subscriptions","organizations_url":"https://api.github.com/users/influxdata/orgs","repos_url":"https://api.github.com/users/influxdata/repos","events_url":"https://api.github.com/users/influxdata/events{/privacy}","received_events_url":"https://api.github.com/users/influxdata/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/influxdata/influxdb","description":"Scalable datastore for metrics, events, and real-time analytics","fork":false,"url":"https://api.github.com/repos/influxdata/influxdb","forks_url":"https://api.github.com/repos/influxdata/influxdb/forks","keys_url":"https://api.github.com/repos/influxdata/influxdb/keys{/key_id}","collaborators_url":"https://api.github.com/repos/influxdata/influxdb/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/influxdata/influxdb/teams","hooks_url":"https://api.github.com/repos/influxdata/influxdb/hooks","issue_events_url":"https://api.github.com/repos/influxdata/influxdb/issues/events{/number}","events_url":"https://api.github.com/repos/influxdata/influxdb/events","assignees_url":"https://api.github.com/repos/influxdata/influxdb/assignees{/user}","branches_url":"https://api.github.com/repos/influxdata/influxdb/branches{/branch}","tags_url":"https://api.github.com/repos/influxdata/influxdb/tags","blobs_url":"https://api.github.com/repos/influxdata/influxdb/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/influxdata/influxdb/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/influxdata/influxdb/git/refs{/sha}","trees_url":"https://api.github.com/repos/influxdata/influxdb/git/trees{/sha}","statuses_url":"https://api.github.com/repos/influxdata/influxdb/statuses/{sha}","languages_url":"https://api.github.com/repos/influxdata/influxdb/languages","stargazers_url":"https://api.github.com/repos/influxdata/influxdb/stargazers","contributors_url":"https://api.github.com/repos/influxdata/influxdb/contributors","subscribers_url":"https://api.github.com/repos/influxdata/influxdb/subscribers","subscription_url":"https://api.github.com/repos/influxdata/influxdb/subscription","commits_url":"https://api.github.com/repos/influxdata/influxdb/commits{/sha}","git_commits_url":"https://api.github.com/repos/influxdata/influxdb/git/commits{/sha}","comments_url":"https://api.github.com/repos/influxdata/influxdb/comments{/number}","issue_comment_url":"https://api.github.com/repos/influxdata/influxdb/issues/comments{/number}","contents_url":"https://api.github.com/repos/influxdata/influxdb/contents/{+path}","compare_url":"https://api.github.com/repos/influxdata/influxdb/compare/{base}...{head}","merges_url":"https://api.github.com/repos/influxdata/influxdb/merges","archive_url":"https://api.github.com/repos/influxdata/influxdb/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/influxdata/influxdb/downloads","issues_url":"https://api.github.com/repos/influxdata/influxdb/issues{/number}","pulls_url":"https://api.github.com/repos/influxdata/influxdb/pulls{/number}","milestones_url":"https://api.github.com/repos/influxdata/influxdb/milestones{/number}","notifications_url":"https://api.github.com/repos/influxdata/influxdb/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/influxdata/influxdb/labels{/name}","releases_url":"https://api.github.com/repos/influxdata/influxdb/releases{/id}","deployments_url":"https://api.github.com/repos/influxdata/influxdb/deployments","created_at":"2013-09-26T14:31:10Z","updated_at":"2016-02-28T06:54:14Z","pushed_at":"2016-02-28T08:02:43Z","git_url":"git://github.com/influxdata/influxdb.git","ssh_url":"git@github.com:influxdata/influxdb.git","clone_url":"https://github.com/influxdata/influxdb.git","svn_url":"https://github.com/influxdata/influxdb","homepage":"https://influxdata.com","size":42148,"stargazers_count":7477,"watchers_count":7477,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":958,"mirror_url":null,"open_issues_count":611,"forks":958,"open_issues":611,"watchers":7477,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/influxdata/influxdb/pulls/5830"},"html":{"href":"https://github.com/influxdata/influxdb/pull/5830"},"issue":{"href":"https://api.github.com/repos/influxdata/influxdb/issues/5830"},"comments":{"href":"https://api.github.com/repos/influxdata/influxdb/issues/5830/comments"},"review_comments":{"href":"https://api.github.com/repos/influxdata/influxdb/pulls/5830/comments"},"review_comment":{"href":"https://api.github.com/repos/influxdata/influxdb/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/influxdata/influxdb/pulls/5830/commits"},"statuses":{"href":"https://api.github.com/repos/influxdata/influxdb/statuses/f18d7e759625b829a8ad82e1b7631e5e9412b7d0"}},"merged":false,"mergeable":null,"mergeable_state":"unknown","merged_by":null,"comments":30,"review_comments":20,"commits":0,"additions":0,"deletions":0,"changed_files":0}}