{"action":"closed","number":9518,"pull_request":{"url":"https://api.github.com/repos/juju/juju/pulls/9518","id":234452755,"node_id":"MDExOlB1bGxSZXF1ZXN0MjM0NDUyNzU1","html_url":"https://github.com/juju/juju/pull/9518","diff_url":"https://github.com/juju/juju/pull/9518.diff","patch_url":"https://github.com/juju/juju/pull/9518.patch","issue_url":"https://api.github.com/repos/juju/juju/issues/9518","number":9518,"state":"closed","locked":false,"title":"uniter: Smarter config-changed pt3 - address config","user":{"login":"babbageclunk","id":563399,"node_id":"MDQ6VXNlcjU2MzM5OQ==","avatar_url":"https://avatars2.githubusercontent.com/u/563399?v=4","gravatar_id":"","url":"https://api.github.com/users/babbageclunk","html_url":"https://github.com/babbageclunk","followers_url":"https://api.github.com/users/babbageclunk/followers","following_url":"https://api.github.com/users/babbageclunk/following{/other_user}","gists_url":"https://api.github.com/users/babbageclunk/gists{/gist_id}","starred_url":"https://api.github.com/users/babbageclunk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/babbageclunk/subscriptions","organizations_url":"https://api.github.com/users/babbageclunk/orgs","repos_url":"https://api.github.com/users/babbageclunk/repos","events_url":"https://api.github.com/users/babbageclunk/events{/privacy}","received_events_url":"https://api.github.com/users/babbageclunk/received_events","type":"User","site_admin":false},"body":"## Description of change\r\n\r\nThis is a follow-up to #9498 and #9501 to prevent config-changed from being run unless the config has actually, like, changed.\r\n\r\nAdd Machine.WatchAddressesHash and Unit.WatchContainerAddressesHash that emit the hash of the current addresses, and feed that down to the uniter (in the RemoteStateWatcher).\r\n\r\nThis is the last item that can trigger config-changed so I've removed the ConfigVersion field from local state and the remote state snapshot. That means that we only fire the hook when one or more of the config, trust and address hashes is different from the state on disk. There were a lot of uniter tests that assumed that config-changed would always run after the unit agent restarted, those have been fixed - in `UniterSuite.TestUniterRelations` there was one that was using the hook to extract relation data so I change configuration explicitly so that still works.\r\n\r\n`UniterSuite.TestRunCommand` has a workaround fix until I can come back to sort out what the underlying problem is.\r\n\r\n## QA steps\r\n\r\n* Deploy an application to a new model.\r\n* See that the config-changed hook for the new unit runs after install.\r\n* Look in the uniter state file to see the hashes for config, trust and addresses.\r\n* Change the config, see that the config-changed hook runs and the hash in the state file is updated.\r\n* Do the same for trust.\r\n* Not sure how to change addresses for the unit, but if you can, do that too.\r\n* Stop and start the unit agent.\r\n* Config-changed shouldn't fire.\r\n* Stop and start the controller.\r\n* When the unit agent reconnects it shouldn't run config-changed.\r\n\r\n## Documentation changes\r\n\r\nWe will need to clearly highlight this behaviour change in charming documentation - it's likely there are some charms that (incorrectly) rely on the config-changed hook running after agent start to start their workload, rather than setting up service files.\r\n","created_at":"2018-11-28T22:57:34Z","updated_at":"2018-11-29T09:08:26Z","closed_at":"2018-11-29T09:08:26Z","merged_at":"2018-11-29T09:08:26Z","merge_commit_sha":"19ed8d62b617fe4469d389e7ef174bb202f1ac87","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/juju/juju/pulls/9518/commits","review_comments_url":"https://api.github.com/repos/juju/juju/pulls/9518/comments","review_comment_url":"https://api.github.com/repos/juju/juju/pulls/comments{/number}","comments_url":"https://api.github.com/repos/juju/juju/issues/9518/comments","statuses_url":"https://api.github.com/repos/juju/juju/statuses/a7541e5e422abc31a617f35aa8ef79d5361f4d1a","head":{"label":"babbageclunk:smarter-config-changed-3","ref":"smarter-config-changed-3","sha":"a7541e5e422abc31a617f35aa8ef79d5361f4d1a","user":{"login":"babbageclunk","id":563399,"node_id":"MDQ6VXNlcjU2MzM5OQ==","avatar_url":"https://avatars2.githubusercontent.com/u/563399?v=4","gravatar_id":"","url":"https://api.github.com/users/babbageclunk","html_url":"https://github.com/babbageclunk","followers_url":"https://api.github.com/users/babbageclunk/followers","following_url":"https://api.github.com/users/babbageclunk/following{/other_user}","gists_url":"https://api.github.com/users/babbageclunk/gists{/gist_id}","starred_url":"https://api.github.com/users/babbageclunk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/babbageclunk/subscriptions","organizations_url":"https://api.github.com/users/babbageclunk/orgs","repos_url":"https://api.github.com/users/babbageclunk/repos","events_url":"https://api.github.com/users/babbageclunk/events{/privacy}","received_events_url":"https://api.github.com/users/babbageclunk/received_events","type":"User","site_admin":false},"repo":{"id":54490872,"node_id":"MDEwOlJlcG9zaXRvcnk1NDQ5MDg3Mg==","name":"juju","full_name":"babbageclunk/juju","private":false,"owner":{"login":"babbageclunk","id":563399,"node_id":"MDQ6VXNlcjU2MzM5OQ==","avatar_url":"https://avatars2.githubusercontent.com/u/563399?v=4","gravatar_id":"","url":"https://api.github.com/users/babbageclunk","html_url":"https://github.com/babbageclunk","followers_url":"https://api.github.com/users/babbageclunk/followers","following_url":"https://api.github.com/users/babbageclunk/following{/other_user}","gists_url":"https://api.github.com/users/babbageclunk/gists{/gist_id}","starred_url":"https://api.github.com/users/babbageclunk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/babbageclunk/subscriptions","organizations_url":"https://api.github.com/users/babbageclunk/orgs","repos_url":"https://api.github.com/users/babbageclunk/repos","events_url":"https://api.github.com/users/babbageclunk/events{/privacy}","received_events_url":"https://api.github.com/users/babbageclunk/received_events","type":"User","site_admin":false},"html_url":"https://github.com/babbageclunk/juju","description":"juju is devops distilled","fork":true,"url":"https://api.github.com/repos/babbageclunk/juju","forks_url":"https://api.github.com/repos/babbageclunk/juju/forks","keys_url":"https://api.github.com/repos/babbageclunk/juju/keys{/key_id}","collaborators_url":"https://api.github.com/repos/babbageclunk/juju/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/babbageclunk/juju/teams","hooks_url":"https://api.github.com/repos/babbageclunk/juju/hooks","issue_events_url":"https://api.github.com/repos/babbageclunk/juju/issues/events{/number}","events_url":"https://api.github.com/repos/babbageclunk/juju/events","assignees_url":"https://api.github.com/repos/babbageclunk/juju/assignees{/user}","branches_url":"https://api.github.com/repos/babbageclunk/juju/branches{/branch}","tags_url":"https://api.github.com/repos/babbageclunk/juju/tags","blobs_url":"https://api.github.com/repos/babbageclunk/juju/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/babbageclunk/juju/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/babbageclunk/juju/git/refs{/sha}","trees_url":"https://api.github.com/repos/babbageclunk/juju/git/trees{/sha}","statuses_url":"https://api.github.com/repos/babbageclunk/juju/statuses/{sha}","languages_url":"https://api.github.com/repos/babbageclunk/juju/languages","stargazers_url":"https://api.github.com/repos/babbageclunk/juju/stargazers","contributors_url":"https://api.github.com/repos/babbageclunk/juju/contributors","subscribers_url":"https://api.github.com/repos/babbageclunk/juju/subscribers","subscription_url":"https://api.github.com/repos/babbageclunk/juju/subscription","commits_url":"https://api.github.com/repos/babbageclunk/juju/commits{/sha}","git_commits_url":"https://api.github.com/repos/babbageclunk/juju/git/commits{/sha}","comments_url":"https://api.github.com/repos/babbageclunk/juju/comments{/number}","issue_comment_url":"https://api.github.com/repos/babbageclunk/juju/issues/comments{/number}","contents_url":"https://api.github.com/repos/babbageclunk/juju/contents/{+path}","compare_url":"https://api.github.com/repos/babbageclunk/juju/compare/{base}...{head}","merges_url":"https://api.github.com/repos/babbageclunk/juju/merges","archive_url":"https://api.github.com/repos/babbageclunk/juju/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/babbageclunk/juju/downloads","issues_url":"https://api.github.com/repos/babbageclunk/juju/issues{/number}","pulls_url":"https://api.github.com/repos/babbageclunk/juju/pulls{/number}","milestones_url":"https://api.github.com/repos/babbageclunk/juju/milestones{/number}","notifications_url":"https://api.github.com/repos/babbageclunk/juju/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/babbageclunk/juju/labels{/name}","releases_url":"https://api.github.com/repos/babbageclunk/juju/releases{/id}","deployments_url":"https://api.github.com/repos/babbageclunk/juju/deployments","created_at":"2016-03-22T16:26:25Z","updated_at":"2016-03-22T16:26:34Z","pushed_at":"2018-11-29T07:46:59Z","git_url":"git://github.com/babbageclunk/juju.git","ssh_url":"git@github.com:babbageclunk/juju.git","clone_url":"https://github.com/babbageclunk/juju.git","svn_url":"https://github.com/babbageclunk/juju","homepage":"juju.ubuntu.com","size":231549,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"juju:develop","ref":"develop","sha":"ca803736d55672620a0e931ffbabcdbd5c6cf598","user":{"login":"juju","id":4604548,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ2MDQ1NDg=","avatar_url":"https://avatars0.githubusercontent.com/u/4604548?v=4","gravatar_id":"","url":"https://api.github.com/users/juju","html_url":"https://github.com/juju","followers_url":"https://api.github.com/users/juju/followers","following_url":"https://api.github.com/users/juju/following{/other_user}","gists_url":"https://api.github.com/users/juju/gists{/gist_id}","starred_url":"https://api.github.com/users/juju/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juju/subscriptions","organizations_url":"https://api.github.com/users/juju/orgs","repos_url":"https://api.github.com/users/juju/repos","events_url":"https://api.github.com/users/juju/events{/privacy}","received_events_url":"https://api.github.com/users/juju/received_events","type":"Organization","site_admin":false},"repo":{"id":20445947,"node_id":"MDEwOlJlcG9zaXRvcnkyMDQ0NTk0Nw==","name":"juju","full_name":"juju/juju","private":false,"owner":{"login":"juju","id":4604548,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ2MDQ1NDg=","avatar_url":"https://avatars0.githubusercontent.com/u/4604548?v=4","gravatar_id":"","url":"https://api.github.com/users/juju","html_url":"https://github.com/juju","followers_url":"https://api.github.com/users/juju/followers","following_url":"https://api.github.com/users/juju/following{/other_user}","gists_url":"https://api.github.com/users/juju/gists{/gist_id}","starred_url":"https://api.github.com/users/juju/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juju/subscriptions","organizations_url":"https://api.github.com/users/juju/orgs","repos_url":"https://api.github.com/users/juju/repos","events_url":"https://api.github.com/users/juju/events{/privacy}","received_events_url":"https://api.github.com/users/juju/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/juju/juju","description":"juju is devops distilled","fork":false,"url":"https://api.github.com/repos/juju/juju","forks_url":"https://api.github.com/repos/juju/juju/forks","keys_url":"https://api.github.com/repos/juju/juju/keys{/key_id}","collaborators_url":"https://api.github.com/repos/juju/juju/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/juju/juju/teams","hooks_url":"https://api.github.com/repos/juju/juju/hooks","issue_events_url":"https://api.github.com/repos/juju/juju/issues/events{/number}","events_url":"https://api.github.com/repos/juju/juju/events","assignees_url":"https://api.github.com/repos/juju/juju/assignees{/user}","branches_url":"https://api.github.com/repos/juju/juju/branches{/branch}","tags_url":"https://api.github.com/repos/juju/juju/tags","blobs_url":"https://api.github.com/repos/juju/juju/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/juju/juju/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/juju/juju/git/refs{/sha}","trees_url":"https://api.github.com/repos/juju/juju/git/trees{/sha}","statuses_url":"https://api.github.com/repos/juju/juju/statuses/{sha}","languages_url":"https://api.github.com/repos/juju/juju/languages","stargazers_url":"https://api.github.com/repos/juju/juju/stargazers","contributors_url":"https://api.github.com/repos/juju/juju/contributors","subscribers_url":"https://api.github.com/repos/juju/juju/subscribers","subscription_url":"https://api.github.com/repos/juju/juju/subscription","commits_url":"https://api.github.com/repos/juju/juju/commits{/sha}","git_commits_url":"https://api.github.com/repos/juju/juju/git/commits{/sha}","comments_url":"https://api.github.com/repos/juju/juju/comments{/number}","issue_comment_url":"https://api.github.com/repos/juju/juju/issues/comments{/number}","contents_url":"https://api.github.com/repos/juju/juju/contents/{+path}","compare_url":"https://api.github.com/repos/juju/juju/compare/{base}...{head}","merges_url":"https://api.github.com/repos/juju/juju/merges","archive_url":"https://api.github.com/repos/juju/juju/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/juju/juju/downloads","issues_url":"https://api.github.com/repos/juju/juju/issues{/number}","pulls_url":"https://api.github.com/repos/juju/juju/pulls{/number}","milestones_url":"https://api.github.com/repos/juju/juju/milestones{/number}","notifications_url":"https://api.github.com/repos/juju/juju/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/juju/juju/labels{/name}","releases_url":"https://api.github.com/repos/juju/juju/releases{/id}","deployments_url":"https://api.github.com/repos/juju/juju/deployments","created_at":"2014-06-03T14:28:10Z","updated_at":"2018-11-29T02:40:12Z","pushed_at":"2018-11-29T09:08:26Z","git_url":"git://github.com/juju/juju.git","ssh_url":"git@github.com:juju/juju.git","clone_url":"https://github.com/juju/juju.git","svn_url":"https://github.com/juju/juju","homepage":"juju.ubuntu.com","size":232036,"stargazers_count":1279,"watchers_count":1279,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":296,"mirror_url":null,"archived":false,"open_issues_count":15,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":296,"open_issues":15,"watchers":1279,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/juju/juju/pulls/9518"},"html":{"href":"https://github.com/juju/juju/pull/9518"},"issue":{"href":"https://api.github.com/repos/juju/juju/issues/9518"},"comments":{"href":"https://api.github.com/repos/juju/juju/issues/9518/comments"},"review_comments":{"href":"https://api.github.com/repos/juju/juju/pulls/9518/comments"},"review_comment":{"href":"https://api.github.com/repos/juju/juju/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/juju/juju/pulls/9518/commits"},"statuses":{"href":"https://api.github.com/repos/juju/juju/statuses/a7541e5e422abc31a617f35aa8ef79d5361f4d1a"}},"author_association":"MEMBER","merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"jujubot","id":7779494,"node_id":"MDQ6VXNlcjc3Nzk0OTQ=","avatar_url":"https://avatars0.githubusercontent.com/u/7779494?v=4","gravatar_id":"","url":"https://api.github.com/users/jujubot","html_url":"https://github.com/jujubot","followers_url":"https://api.github.com/users/jujubot/followers","following_url":"https://api.github.com/users/jujubot/following{/other_user}","gists_url":"https://api.github.com/users/jujubot/gists{/gist_id}","starred_url":"https://api.github.com/users/jujubot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jujubot/subscriptions","organizations_url":"https://api.github.com/users/jujubot/orgs","repos_url":"https://api.github.com/users/jujubot/repos","events_url":"https://api.github.com/users/jujubot/events{/privacy}","received_events_url":"https://api.github.com/users/jujubot/received_events","type":"User","site_admin":false},"comments":2,"review_comments":12,"maintainer_can_modify":false,"commits":8,"additions":634,"deletions":377,"changed_files":21}}
{"actor":{"display_login":"jujubot"}}