{"action":"created","issue":{"url":"https://api.github.com/repos/rackerlabs/otter/issues/1297","labels_url":"https://api.github.com/repos/rackerlabs/otter/issues/1297/labels{/name}","comments_url":"https://api.github.com/repos/rackerlabs/otter/issues/1297/comments","events_url":"https://api.github.com/repos/rackerlabs/otter/issues/1297/events","html_url":"https://github.com/rackerlabs/otter/pull/1297","id":66073218,"number":1297,"title":"only `stat` dirty nodes that we really need to ","user":{"login":"radix","id":227068,"avatar_url":"https://avatars.githubusercontent.com/u/227068?v=3","gravatar_id":"","url":"https://api.github.com/users/radix","html_url":"https://github.com/radix","followers_url":"https://api.github.com/users/radix/followers","following_url":"https://api.github.com/users/radix/following{/other_user}","gists_url":"https://api.github.com/users/radix/gists{/gist_id}","starred_url":"https://api.github.com/users/radix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/radix/subscriptions","organizations_url":"https://api.github.com/users/radix/orgs","repos_url":"https://api.github.com/users/radix/repos","events_url":"https://api.github.com/users/radix/events{/privacy}","received_events_url":"https://api.github.com/users/radix/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-04-03T04:34:51Z","updated_at":"2015-04-03T04:55:49Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/rackerlabs/otter/pulls/1297","html_url":"https://github.com/rackerlabs/otter/pull/1297","diff_url":"https://github.com/rackerlabs/otter/pull/1297.diff","patch_url":"https://github.com/rackerlabs/otter/pull/1297.patch"},"body":"Fixes #1288\r\nFixes: #1216 \r\n\r\n`master` currently uses `GetChildrenWithStats` to list the dirty group, which causes a bunch of `stat` calls that we don't need. These fall into two categories:\r\n\r\n1. stats on dirty nodes that aren't allocated to us according to the bucket set partitioner\r\n2. stats on dirty nodes that ARE allocated to us, but which we're already converging on.\r\n\r\nSo now we just `GetChildren` instead of `GetChildrenWithStats`, and only `Stat` it after filtering out groups that aren't ours and aren't already converging.\r\n\r\nTo do the second part, I needed to de-encapsulate the \"currently converging\" set from the group_locks object. Now the Converger service has an attribute `self.currently_converging = Reference(pset())` instead of a `self.group_locks = make_lock_set()`. This *also* allows us to log the currently converging set easily, so I went ahead and did that, fixing #1216.\r\n\r\nThere's one more useful optimization to make that I haven't done yet: #1296."},"comment":{"url":"https://api.github.com/repos/rackerlabs/otter/issues/comments/89162569","html_url":"https://github.com/rackerlabs/otter/pull/1297#issuecomment-89162569","issue_url":"https://api.github.com/repos/rackerlabs/otter/issues/1297","id":89162569,"user":{"login":"radix","id":227068,"avatar_url":"https://avatars.githubusercontent.com/u/227068?v=3","gravatar_id":"","url":"https://api.github.com/users/radix","html_url":"https://github.com/radix","followers_url":"https://api.github.com/users/radix/followers","following_url":"https://api.github.com/users/radix/following{/other_user}","gists_url":"https://api.github.com/users/radix/gists{/gist_id}","starred_url":"https://api.github.com/users/radix/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/radix/subscriptions","organizations_url":"https://api.github.com/users/radix/orgs","repos_url":"https://api.github.com/users/radix/repos","events_url":"https://api.github.com/users/radix/events{/privacy}","received_events_url":"https://api.github.com/users/radix/received_events","type":"User","site_admin":false},"created_at":"2015-04-03T04:55:49Z","updated_at":"2015-04-03T04:55:49Z","body":"jenkins please run integration tests"}}