{"action":"created","issue":{"url":"https://api.github.com/repos/juju/juju/issues/3770","labels_url":"https://api.github.com/repos/juju/juju/issues/3770/labels{/name}","comments_url":"https://api.github.com/repos/juju/juju/issues/3770/comments","events_url":"https://api.github.com/repos/juju/juju/issues/3770/events","html_url":"https://github.com/juju/juju/pull/3770","id":117543233,"number":3770,"title":"Use gates for upgrade related machine agent synchronisation","user":{"login":"mjs","id":14993,"avatar_url":"https://avatars.githubusercontent.com/u/14993?v=3","gravatar_id":"","url":"https://api.github.com/users/mjs","html_url":"https://github.com/mjs","followers_url":"https://api.github.com/users/mjs/followers","following_url":"https://api.github.com/users/mjs/following{/other_user}","gists_url":"https://api.github.com/users/mjs/gists{/gist_id}","starred_url":"https://api.github.com/users/mjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjs/subscriptions","organizations_url":"https://api.github.com/users/mjs/orgs","repos_url":"https://api.github.com/users/mjs/repos","events_url":"https://api.github.com/users/mjs/events{/privacy}","received_events_url":"https://api.github.com/users/mjs/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":4,"created_at":"2015-11-18T09:08:52Z","updated_at":"2015-11-18T23:09:37Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/juju/juju/pulls/3770","html_url":"https://github.com/juju/juju/pull/3770","diff_url":"https://github.com/juju/juju/pull/3770.diff","patch_url":"https://github.com/juju/juju/pull/3770.patch"},"body":"This series of changes replaces the channels that were previously used to synchronise worker startup around the \"upgrade steps done\" and \"first upgrade check done\" events with gate \"locks\". These drive gate manifolds in the machine agent's dependency engine, allowing clean synchronisation of workers both inside and outside the dependency engine (a requirement during the conversion to the dependency engine).\r\n\r\nThere are also some changes around gate.ManifoldEx's semantics as it became obvious during actual use that the initial structure was not optimal. Also gate.WaiterUnlocker is now called the much more snappy gate.Lock.\r\n\r\n(Review request: http://reviews.vapour.ws/r/3178/)\r\n"},"comment":{"url":"https://api.github.com/repos/juju/juju/issues/comments/157894343","html_url":"https://github.com/juju/juju/pull/3770#issuecomment-157894343","issue_url":"https://api.github.com/repos/juju/juju/issues/3770","id":157894343,"user":{"login":"mjs","id":14993,"avatar_url":"https://avatars.githubusercontent.com/u/14993?v=3","gravatar_id":"","url":"https://api.github.com/users/mjs","html_url":"https://github.com/mjs","followers_url":"https://api.github.com/users/mjs/followers","following_url":"https://api.github.com/users/mjs/following{/other_user}","gists_url":"https://api.github.com/users/mjs/gists{/gist_id}","starred_url":"https://api.github.com/users/mjs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mjs/subscriptions","organizations_url":"https://api.github.com/users/mjs/orgs","repos_url":"https://api.github.com/users/mjs/repos","events_url":"https://api.github.com/users/mjs/events{/privacy}","received_events_url":"https://api.github.com/users/mjs/received_events","type":"User","site_admin":false},"created_at":"2015-11-18T23:09:37Z","updated_at":"2015-11-18T23:09:37Z","body":"$$address-already-in-use$$"}}