{"action":"created","issue":{"url":"https://api.github.com/repos/rackerlabs/otter/issues/1225","labels_url":"https://api.github.com/repos/rackerlabs/otter/issues/1225/labels{/name}","comments_url":"https://api.github.com/repos/rackerlabs/otter/issues/1225/comments","events_url":"https://api.github.com/repos/rackerlabs/otter/issues/1225/events","html_url":"https://github.com/rackerlabs/otter/issues/1225","id":63793874,"number":1225,"title":"Efficiently throttle server creation in convergence","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":{"url":"https://api.github.com/repos/rackerlabs/otter/milestones/4","html_url":"https://github.com/rackerlabs/otter/milestones/Convergence:%20Servers","labels_url":"https://api.github.com/repos/rackerlabs/otter/milestones/4/labels","id":972857,"number":4,"title":"Convergence: Servers","description":"Get to the point that we can enable convergence on servers for some tenants in production.\r\n\r\nNo CLB support is necessary. No RCv3 support is necessary. However, any core reliability/operational features (such as support for restarting in the middle of a convergence cycle or having useful logging) should be part of this milestone.","creator":{"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},"open_issues":9,"closed_issues":14,"state":"open","created_at":"2015-02-10T00:36:04Z","updated_at":"2015-04-23T22:08:21Z","due_on":null,"closed_at":null},"comments":3,"created_at":"2015-03-23T18:14:43Z","updated_at":"2015-04-26T03:08:01Z","closed_at":null,"body":"We need to maintain parity with the existing worker code and make sure to not run multiple CreateServer requests at the same time.\r\n\r\nHowever, the basic convergence throttling isn't really great at this, because if we throttle it to one CreateServer at a time, it'll cause N convergence iterations where N is the number of servers to create, and that's super inefficient.\r\n\r\nSo we should have an optimizer for CreateServer steps that aggregate them into a CreateServers step, which does its own throttling."},"comment":{"url":"https://api.github.com/repos/rackerlabs/otter/issues/comments/96315106","html_url":"https://github.com/rackerlabs/otter/issues/1225#issuecomment-96315106","issue_url":"https://api.github.com/repos/rackerlabs/otter/issues/1225","id":96315106,"user":{"login":"manishtomar","id":758529,"avatar_url":"https://avatars.githubusercontent.com/u/758529?v=3","gravatar_id":"","url":"https://api.github.com/users/manishtomar","html_url":"https://github.com/manishtomar","followers_url":"https://api.github.com/users/manishtomar/followers","following_url":"https://api.github.com/users/manishtomar/following{/other_user}","gists_url":"https://api.github.com/users/manishtomar/gists{/gist_id}","starred_url":"https://api.github.com/users/manishtomar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/manishtomar/subscriptions","organizations_url":"https://api.github.com/users/manishtomar/orgs","repos_url":"https://api.github.com/users/manishtomar/repos","events_url":"https://api.github.com/users/manishtomar/events{/privacy}","received_events_url":"https://api.github.com/users/manishtomar/received_events","type":"User","site_admin":false},"created_at":"2015-04-26T03:08:01Z","updated_at":"2015-04-26T03:08:01Z","body":"I've never been comfortable with planner doing throttling. Throttling is pure execution strategy and should exist in executor which in our case is `execute_convergence` function. There can be `execute_steps` instead of `steps_to_effect` that takes the steps and executes them using some throttling policy. This method can return `worst_status` depending on how much it managed to execute. "}}