)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"aa918ff4a87cad7aa665ec153a4e0405ddf2906f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"which have hosts alreay, in order to keep consistency"},{"line_number":11,"context_line":"with fixing in code review:"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/36651"},{"line_number":13,"context_line":"in order to avoid confusion and availability mess"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Fixes: but #1200479"},{"line_number":16,"context_line":"Change-Id: I18ad1ac22c6aee298ccc75c978b85241ae1ac616"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAP3%2F%2Fh88%3D","line":13,"updated":"2013-07-16 22:06:03.000000000","message":"Can you clarify this","commit_id":"25f1f69b4c4b9b9c9406cc72ba4f7f97dabf8c8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"47f41b5bdfecb42685d8dfc5514c3f72c88f668b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"which have hosts alreay, in order to keep consistency"},{"line_number":11,"context_line":"with fixing in code review:"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/36651"},{"line_number":13,"context_line":"in order to avoid confusion and availability mess"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Fixes: but #1200479"},{"line_number":16,"context_line":"Change-Id: I18ad1ac22c6aee298ccc75c978b85241ae1ac616"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAP3%2F%2FhGk%3D","line":13,"in_reply_to":"AAAAP3%2F%2Fh88%3D","updated":"2013-07-17 03:27:22.000000000","message":"sorry, it\u0027s a wrong typing, I mean \"availability zone mess\", I\u0027ll update commit message\nin new patch","commit_id":"25f1f69b4c4b9b9c9406cc72ba4f7f97dabf8c8f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"aa918ff4a87cad7aa665ec153a4e0405ddf2906f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"https://review.openstack.org/#/c/36651"},{"line_number":13,"context_line":"in order to avoid confusion and availability mess"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Fixes: but #1200479"},{"line_number":16,"context_line":"Change-Id: I18ad1ac22c6aee298ccc75c978b85241ae1ac616"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAP3%2F%2Fh9I%3D","line":15,"updated":"2013-07-16 22:06:03.000000000","message":"but \u003d\u003e bug","commit_id":"25f1f69b4c4b9b9c9406cc72ba4f7f97dabf8c8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"47f41b5bdfecb42685d8dfc5514c3f72c88f668b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"https://review.openstack.org/#/c/36651"},{"line_number":13,"context_line":"in order to avoid confusion and availability mess"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Fixes: but #1200479"},{"line_number":16,"context_line":"Change-Id: I18ad1ac22c6aee298ccc75c978b85241ae1ac616"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAP3%2F%2FhGU%3D","line":15,"in_reply_to":"AAAAP3%2F%2Fh9I%3D","updated":"2013-07-17 03:27:22.000000000","message":"I\u0027ll correct it in new patch","commit_id":"25f1f69b4c4b9b9c9406cc72ba4f7f97dabf8c8f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ec51249b4edf0bdb7a6193dfb73eba8bb9bbe6b3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix aggregate api bug against availability zone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Limit users to change availability zone of aggregates"},{"line_number":10,"context_line":"which have hosts alreay, in order to keep consistency"},{"line_number":11,"context_line":"with fixing in code review:"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/36651"},{"line_number":13,"context_line":"in order to avoid confusion and availability zone mess"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAQn%2F%2F%2Bsc%3D","line":10,"updated":"2013-07-18 03:59:02.000000000","message":"alreay \u003d\u003e already","commit_id":"d50d993207b10eaa9cb526bf2cd0bf21020d1564"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"f7748e808a4d3c9d59299c61792e9c2492388a86","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix aggregate api bug against availability zone"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Limit users to change availability zone of aggregates"},{"line_number":10,"context_line":"which have hosts alreay, in order to keep consistency"},{"line_number":11,"context_line":"with fixing in code review:"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/36651"},{"line_number":13,"context_line":"in order to avoid confusion and availability zone mess"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAQn%2F%2F%2Bhg%3D","line":10,"in_reply_to":"AAAAQn%2F%2F%2Bsc%3D","updated":"2013-07-18 05:32:29.000000000","message":"sorry for careless typing, thanks for your comment, I\u0027ll correct it in my new patch","commit_id":"d50d993207b10eaa9cb526bf2cd0bf21020d1564"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"679fcdf310126a5a6a4dea57cda03c9135bb41f9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Limit users to add multi AZs to aggregates which"},{"line_number":10,"context_line":"have hosts already, in order to keep consistency"},{"line_number":11,"context_line":"with fixing in code review:"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/36651"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fixes: bug #1200479"},{"line_number":15,"context_line":"Change-Id: I18ad1ac22c6aee298ccc75c978b85241ae1ac616"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAQn%2F%2FhRw%3D","line":12,"updated":"2013-07-29 22:03:42.000000000","message":"nit can you use the Change-ID here \n\nI788782a9f21ec2672551f75123753175bb268586","commit_id":"5565c670347b4ea42c7344cfcd1143a1468f9069"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"52a4d43086eaec3d3480968fb271bd9a54f64387","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Limit users to add multi AZs to aggregates which"},{"line_number":10,"context_line":"have hosts already, in order to keep consistency"},{"line_number":11,"context_line":"with fixing in code review:"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/36651"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Fixes: bug #1200479"},{"line_number":15,"context_line":"Change-Id: I18ad1ac22c6aee298ccc75c978b85241ae1ac616"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAQn%2F%2FboQ%3D","line":12,"in_reply_to":"AAAAQn%2F%2FhRw%3D","updated":"2013-07-31 09:52:57.000000000","message":"Thanks for your comments, I\u0027ll use Change-ID to replace the link. I\u0027ll submit a new patch later, since I\u0027ll add a new function to only return availability zone from aggregate metadata","commit_id":"5565c670347b4ea42c7344cfcd1143a1468f9069"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"b99fd0fee5239f96eac06978ba97c2655aa916e9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix multi availability zone issue part 2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Limit users to add multi AZs to aggregates which"},{"line_number":10,"context_line":"have hosts already, in order to keep consistency"},{"line_number":11,"context_line":"with fixing in code review:"},{"line_number":12,"context_line":"I788782a9f21ec2672551f75123753175bb268586"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"AAAASn%2F%2Fi%2BI%3D","line":9,"updated":"2013-09-03 16:50:12.000000000","message":"huh? can you clarify the commit message.","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"c67d71ae5ea00ce0c21f0a5643ae48cb5dee9084","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix multi availability zone issue part 2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Limit users to add multi AZs to aggregates which"},{"line_number":10,"context_line":"have hosts already, in order to keep consistency"},{"line_number":11,"context_line":"with fixing in code review:"},{"line_number":12,"context_line":"I788782a9f21ec2672551f75123753175bb268586"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"AAAASn%2F%2Ffk0%3D","line":9,"in_reply_to":"AAAASn%2F%2Fi%2BI%3D","updated":"2013-09-04 05:27:51.000000000","message":"Sure, I\u0027ll rewrite commit message to clarify what actually be implemented","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"}],"nova/api/openstack/compute/contrib/aggregates.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"88e3f886f1ff8a19d8a3138b1870ca84ba7d4f54","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKsE%3D","line":124,"updated":"2013-08-06 03:44:33.000000000","message":"Could you sync same change to V3 api?","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"30e09119f25c5159a0e5f2dd0813c69a2cbffea4","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FBrI%3D","line":124,"in_reply_to":"AAAAQn%2F%2FKOY%3D","updated":"2013-08-08 08:47:54.000000000","message":"I have created a Blueprint to do the sync, I\u0027d like to correctly finish the fixing at first, then sync the fixing into V3, thank you!","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a35b1c2f53d804ded173a1573cc8b6b237078767","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKOY%3D","line":124,"in_reply_to":"AAAAQn%2F%2FKiQ%3D","updated":"2013-08-06 09:23:04.000000000","message":"thanks! we can just use this bug for v3 api work.","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"add675f2ad293dabab619dd9cf6a4ee8d70e709e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKiQ%3D","line":124,"in_reply_to":"AAAAQn%2F%2FKsE%3D","updated":"2013-08-06 05:12:20.000000000","message":"Yes, I can, I\u0027ll submit a code review to sync changes I have made to V3 api after my patch are all merged.\nI have question, for V3 api work, should I open a bug or create a blueprint for it?","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d6ba47f3a44b3888447807cbae3a6f8c3b6e0901","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2Bj4%3D","line":124,"updated":"2013-08-14 09:52:12.000000000","message":"test for api?","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"43623942fb8ad5a0f2e21ccfacca736face0d9ee","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F7F8%3D","line":124,"in_reply_to":"AAAARH%2F%2F%2Bj4%3D","updated":"2013-08-15 05:32:59.000000000","message":"yes, I have tested APIs, the message can be returned correctly.","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"df2e4b0db6b09f358f679f5f37c1034b908e5ebe","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F69E%3D","line":124,"in_reply_to":"AAAARH%2F%2F7EI%3D","updated":"2013-08-15 06:10:03.000000000","message":"I had checked nova/tests/api/openstack/compute/test_api.py, there are overall common and basic function test cases in it, no test case for specific function API, that\u0027s why I didn\u0027t write API test cases, I don\u0027t think we need write API test cases, since we have test case in test_compute to guarantee the codes can work well.","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"b76d42334954df8de1ed8255ceea7fb1ad6972a8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F7EI%3D","line":124,"in_reply_to":"AAAARH%2F%2F7F8%3D","updated":"2013-08-15 05:47:08.000000000","message":"sorry, I mean add unittest for api","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d6ba47f3a44b3888447807cbae3a6f8c3b6e0901","unresolved":false,"context_lines":[{"line_number":205,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":206,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":207,"context_line":"            LOG.info(e.format_message())"},{"line_number":208,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        return self._marshall_aggregate(aggregate)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2Bj0%3D","line":208,"updated":"2013-08-14 09:52:12.000000000","message":"ditto","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"992efd49bee3f23beba57298104d45ce672eb37b","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            LOG.info(_(\u0027Cannot update aggregate: %s\u0027), id)"},{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F1cY%3D","line":123,"updated":"2013-08-29 00:23:30.000000000","message":"this is needless","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"f5c5496b6ad6b695a1d5e96c5aa1885e6f55431c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            LOG.info(_(\u0027Cannot update aggregate: %s\u0027), id)"},{"line_number":121,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":122,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":123,"context_line":"            LOG.info(e.format_message())"},{"line_number":124,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return self._marshall_aggregate(aggregate)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F0bI%3D","line":123,"in_reply_to":"AAAASn%2F%2F1cY%3D","updated":"2013-08-29 06:29:24.000000000","message":"ok, log info is duplicate with API return messages, I\u0027ll remove them, thank you!","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"992efd49bee3f23beba57298104d45ce672eb37b","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                     {\u0027metadata\u0027: metadata, \u0027id\u0027: id})"},{"line_number":205,"context_line":"            raise exc.HTTPNotFound()"},{"line_number":206,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":207,"context_line":"            LOG.info(e.format_message())"},{"line_number":208,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        return self._marshall_aggregate(aggregate)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F1cU%3D","line":207,"updated":"2013-08-29 00:23:30.000000000","message":"ditto","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"b99fd0fee5239f96eac06978ba97c2655aa916e9","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"# a copy of the License at"},{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"# http://www.apache.org/licenses/LICENSE-2.0"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Fi9c%3D","line":5,"updated":"2013-09-03 16:50:12.000000000","message":"Why touch this?","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"c67d71ae5ea00ce0c21f0a5643ae48cb5dee9084","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"# a copy of the License at"},{"line_number":7,"context_line":"#"},{"line_number":8,"context_line":"# http://www.apache.org/licenses/LICENSE-2.0"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Ffj4%3D","line":5,"in_reply_to":"AAAASn%2F%2Fi9c%3D","updated":"2013-09-04 05:27:51.000000000","message":"it was made during rebase, I didn\u0027t mean to change them, I\u0027ll try to recover them","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"51662ec4b48edf20d5ffedae55baf19a57949061","unresolved":false,"context_lines":[{"line_number":8,"context_line":"#    http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":9,"context_line":"#"},{"line_number":10,"context_line":"# Unless required by applicable law or agreed to in writing, software"},{"line_number":11,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":12,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"# under the License."}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FTYU%3D","line":11,"updated":"2013-09-06 18:01:51.000000000","message":"This is a bit of a nit, but I don\u0027t see why this patch should touch this","commit_id":"cffec1a46b99b8c8a946ce4239a5cab5b56c88f2"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"1422fb5382b9d62dcbb6e3b9746761fcdd5f2822","unresolved":false,"context_lines":[{"line_number":8,"context_line":"#    http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":9,"context_line":"#"},{"line_number":10,"context_line":"# Unless required by applicable law or agreed to in writing, software"},{"line_number":11,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":12,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"# under the License."}],"source_content_type":"text/x-python","patch_set":24,"id":"AAAASn%2F%2FQdc%3D","line":11,"in_reply_to":"AAAASn%2F%2FTYU%3D","updated":"2013-09-09 06:38:35.000000000","message":"ok, I\u0027ll recover them to the original format, thanks for reminding","commit_id":"cffec1a46b99b8c8a946ce4239a5cab5b56c88f2"}],"nova/compute/api.py":[{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"25da461b6fefa58131bd011963d029a1b49bc551","unresolved":false,"context_lines":[{"line_number":2795,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2796,"context_line":"            msg \u003d _(\"Aggregate in availiblitiy zone: %s \""},{"line_number":2797,"context_line":"                    \"already. Please don\u0027t change its \""},{"line_number":2798,"context_line":"                    \"availability zone\") % aggregate_meta[\"availability_zone\"]"},{"line_number":2799,"context_line":"            raise exception.AggregateError(message\u003dmsg)"},{"line_number":2800,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2801,"context_line":"                                                    \"updateprop.start\","}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FtrY%3D","line":2798,"updated":"2013-07-12 15:23:48.000000000","message":"Message should be a better match of the actual error:\n\n\"Can\u0027t change the availability zone of an aggregate which already has hosts in it\"","commit_id":"35136c2d0f7038022dda4f20eb6dc90ccbaab414"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"e6b826ce4a8fc84cec26c6e977ca6e47ef03f593","unresolved":false,"context_lines":[{"line_number":2795,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2796,"context_line":"            msg \u003d _(\"Aggregate in availiblitiy zone: %s \""},{"line_number":2797,"context_line":"                    \"already. Please don\u0027t change its \""},{"line_number":2798,"context_line":"                    \"availability zone\") % aggregate_meta[\"availability_zone\"]"},{"line_number":2799,"context_line":"            raise exception.AggregateError(message\u003dmsg)"},{"line_number":2800,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2801,"context_line":"                                                    \"updateprop.start\","}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FqRs%3D","line":2798,"in_reply_to":"AAAAP3%2F%2FtrY%3D","updated":"2013-07-15 03:28:52.000000000","message":"Thanks for your comments.\nYour message is better than mine, I\u0027ll use it in my new patch","commit_id":"35136c2d0f7038022dda4f20eb6dc90ccbaab414"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"25da461b6fefa58131bd011963d029a1b49bc551","unresolved":false,"context_lines":[{"line_number":2818,"context_line":"                         metadata[\"availability_zone\"]) !\u003d 0:"},{"line_number":2819,"context_line":"            msg \u003d _(\"Aggregate in availiblitiy zone: %s \""},{"line_number":2820,"context_line":"                    \"already. Please don\u0027t change its \""},{"line_number":2821,"context_line":"                    \"availability zone\") % aggregate_meta[\"availability_zone\"]"},{"line_number":2822,"context_line":"            raise exception.AggregateError(message\u003dmsg)"},{"line_number":2823,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2824,"context_line":"                                                    \"updatemetadata.start\","}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2FtrM%3D","line":2821,"updated":"2013-07-12 15:23:48.000000000","message":"As above","commit_id":"35136c2d0f7038022dda4f20eb6dc90ccbaab414"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"aa918ff4a87cad7aa665ec153a4e0405ddf2906f","unresolved":false,"context_lines":[{"line_number":2794,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"},{"line_number":2795,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2796,"context_line":"            msg \u003d _(\"Can\u0027t change the availability zone\""},{"line_number":2797,"context_line":"                    \" of an aggregate which already has\""},{"line_number":2798,"context_line":"                    \" hosts in it \")"},{"line_number":2799,"context_line":"            raise exception.AggregateError(message\u003dmsg)"},{"line_number":2800,"context_line":"        compute_utils.notify_about_aggregate_update(context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fh8Y%3D","line":2797,"updated":"2013-07-16 22:06:03.000000000","message":"Why can\u0027t I?","commit_id":"25f1f69b4c4b9b9c9406cc72ba4f7f97dabf8c8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"47f41b5bdfecb42685d8dfc5514c3f72c88f668b","unresolved":false,"context_lines":[{"line_number":2794,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"},{"line_number":2795,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2796,"context_line":"            msg \u003d _(\"Can\u0027t change the availability zone\""},{"line_number":2797,"context_line":"                    \" of an aggregate which already has\""},{"line_number":2798,"context_line":"                    \" hosts in it \")"},{"line_number":2799,"context_line":"            raise exception.AggregateError(message\u003dmsg)"},{"line_number":2800,"context_line":"        compute_utils.notify_about_aggregate_update(context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FhFs%3D","line":2797,"in_reply_to":"AAAAP3%2F%2Fh8Y%3D","updated":"2013-07-17 03:27:22.000000000","message":"I\u0027ll add more detail explanation information","commit_id":"25f1f69b4c4b9b9c9406cc72ba4f7f97dabf8c8f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"aa918ff4a87cad7aa665ec153a4e0405ddf2906f","unresolved":false,"context_lines":[{"line_number":2796,"context_line":"            msg \u003d _(\"Can\u0027t change the availability zone\""},{"line_number":2797,"context_line":"                    \" of an aggregate which already has\""},{"line_number":2798,"context_line":"                    \" hosts in it \")"},{"line_number":2799,"context_line":"            raise exception.AggregateError(message\u003dmsg)"},{"line_number":2800,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2801,"context_line":"                                                    \"updateprop.start\","},{"line_number":2802,"context_line":"                                                    aggregate_payload)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Fh8g%3D","line":2799,"updated":"2013-07-16 22:06:03.000000000","message":"raise a more specific error here","commit_id":"25f1f69b4c4b9b9c9406cc72ba4f7f97dabf8c8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"47f41b5bdfecb42685d8dfc5514c3f72c88f668b","unresolved":false,"context_lines":[{"line_number":2796,"context_line":"            msg \u003d _(\"Can\u0027t change the availability zone\""},{"line_number":2797,"context_line":"                    \" of an aggregate which already has\""},{"line_number":2798,"context_line":"                    \" hosts in it \")"},{"line_number":2799,"context_line":"            raise exception.AggregateError(message\u003dmsg)"},{"line_number":2800,"context_line":"        compute_utils.notify_about_aggregate_update(context,"},{"line_number":2801,"context_line":"                                                    \"updateprop.start\","},{"line_number":2802,"context_line":"                                                    aggregate_payload)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FhD0%3D","line":2799,"in_reply_to":"AAAAP3%2F%2Fh8g%3D","updated":"2013-07-17 03:27:22.000000000","message":"I think exception.InvalidAggregateAction is a better choice, I\u0027ll use it in my new patch","commit_id":"25f1f69b4c4b9b9c9406cc72ba4f7f97dabf8c8f"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ec51249b4edf0bdb7a6193dfb73eba8bb9bbe6b3","unresolved":false,"context_lines":[{"line_number":2915,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2916,"context_line":"            msg \u003d _(\"You shouldn\u0027t change the availability\""},{"line_number":2917,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2918,"context_line":"                    \" hosts in it, we should only assing aggregate\""},{"line_number":2919,"context_line":"                    \" to one availability zone\")"},{"line_number":2920,"context_line":"            action_name \u003d \"update aggregate\""},{"line_number":2921,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F%2BsU%3D","line":2918,"updated":"2013-07-18 03:59:02.000000000","message":"assing \u003d\u003e passing [hope that is what you meant :]","commit_id":"d50d993207b10eaa9cb526bf2cd0bf21020d1564"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"f7748e808a4d3c9d59299c61792e9c2492388a86","unresolved":false,"context_lines":[{"line_number":2915,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2916,"context_line":"            msg \u003d _(\"You shouldn\u0027t change the availability\""},{"line_number":2917,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2918,"context_line":"                    \" hosts in it, we should only assing aggregate\""},{"line_number":2919,"context_line":"                    \" to one availability zone\")"},{"line_number":2920,"context_line":"            action_name \u003d \"update aggregate\""},{"line_number":2921,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F%2BhY%3D","line":2918,"in_reply_to":"AAAAQn%2F%2F%2BsU%3D","updated":"2013-07-18 05:32:29.000000000","message":"yes, it\u0027s wrong typing, I\u0027ll correct it, it should be \"assign\"","commit_id":"d50d993207b10eaa9cb526bf2cd0bf21020d1564"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"ec51249b4edf0bdb7a6193dfb73eba8bb9bbe6b3","unresolved":false,"context_lines":[{"line_number":2943,"context_line":"                         metadata[\"availability_zone\"]) !\u003d 0:"},{"line_number":2944,"context_line":"            msg \u003d _(\"You shouldn\u0027t change the availability\""},{"line_number":2945,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2946,"context_line":"                    \" hosts in it, we should only assing aggregate\""},{"line_number":2947,"context_line":"                    \" to one availability zone\")"},{"line_number":2948,"context_line":"            action_name \u003d \"update aggregate metadata\""},{"line_number":2949,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F%2BsQ%3D","line":2946,"updated":"2013-07-18 03:59:02.000000000","message":"ditto","commit_id":"d50d993207b10eaa9cb526bf2cd0bf21020d1564"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"a6171d582a75ba172605044f66e21cd5c9e2a54e","unresolved":false,"context_lines":[{"line_number":2955,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":2956,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"},{"line_number":2957,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2958,"context_line":"            msg \u003d _(\"You shouldn\u0027t change the availability\""},{"line_number":2959,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2960,"context_line":"                    \" hosts in it, we should only assign aggregate\""},{"line_number":2961,"context_line":"                    \" to one availability zone\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F96g%3D","line":2958,"updated":"2013-07-18 10:18:30.000000000","message":"shouldn\u0027t \u003d\u003e can\u0027t   (shouldn\u0027t implies advice, whereas the code is actually enforcing a restirction)","commit_id":"fcca45c23dfd751fab14cf343b9e03e8517c81f6"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"294c86bd9f5e33955052c360e4cb06e8bbc0b0d4","unresolved":false,"context_lines":[{"line_number":2955,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":2956,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"},{"line_number":2957,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2958,"context_line":"            msg \u003d _(\"You shouldn\u0027t change the availability\""},{"line_number":2959,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2960,"context_line":"                    \" hosts in it, we should only assign aggregate\""},{"line_number":2961,"context_line":"                    \" to one availability zone\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F92o%3D","line":2958,"in_reply_to":"AAAAQn%2F%2F96g%3D","updated":"2013-07-18 10:40:33.000000000","message":"I agree that the alert information must be more exact and clear, I\u0027ll modify it","commit_id":"fcca45c23dfd751fab14cf343b9e03e8517c81f6"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"a6171d582a75ba172605044f66e21cd5c9e2a54e","unresolved":false,"context_lines":[{"line_number":2957,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2958,"context_line":"            msg \u003d _(\"You shouldn\u0027t change the availability\""},{"line_number":2959,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2960,"context_line":"                    \" hosts in it, we should only assign aggregate\""},{"line_number":2961,"context_line":"                    \" to one availability zone\")"},{"line_number":2962,"context_line":"            action_name \u003d \"update aggregate\""},{"line_number":2963,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F96E%3D","line":2960,"updated":"2013-07-18 10:18:30.000000000","message":"Drop form \",we should ...\" onwards.\n\nTo enforce only one AZ per aggregate (which seems like a good additional check) this needs to be separate check not conditional on whether the aggregate has hosts or not.","commit_id":"fcca45c23dfd751fab14cf343b9e03e8517c81f6"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"294c86bd9f5e33955052c360e4cb06e8bbc0b0d4","unresolved":false,"context_lines":[{"line_number":2957,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2958,"context_line":"            msg \u003d _(\"You shouldn\u0027t change the availability\""},{"line_number":2959,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2960,"context_line":"                    \" hosts in it, we should only assign aggregate\""},{"line_number":2961,"context_line":"                    \" to one availability zone\")"},{"line_number":2962,"context_line":"            action_name \u003d \"update aggregate\""},{"line_number":2963,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F92k%3D","line":2960,"in_reply_to":"AAAAQn%2F%2F96E%3D","updated":"2013-07-18 10:40:33.000000000","message":"I agree that the alert information must be more exact and clear, I\u0027ll modify it","commit_id":"fcca45c23dfd751fab14cf343b9e03e8517c81f6"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"a6171d582a75ba172605044f66e21cd5c9e2a54e","unresolved":false,"context_lines":[{"line_number":2986,"context_line":"            msg \u003d _(\"You shouldn\u0027t change the availability\""},{"line_number":2987,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2988,"context_line":"                    \" hosts in it, we should only assign aggregate\""},{"line_number":2989,"context_line":"                    \" to one availability zone\")"},{"line_number":2990,"context_line":"            action_name \u003d \"update aggregate metadata\""},{"line_number":2991,"context_line":"            id \u003d aggregate_id"},{"line_number":2992,"context_line":"            raise exception.InvalidAggregateAction(action\u003daction_name,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F958%3D","line":2989,"updated":"2013-07-18 10:18:30.000000000","message":"Same comments as above","commit_id":"fcca45c23dfd751fab14cf343b9e03e8517c81f6"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"b66fe17c6cd434b3a0e54798a3e07a5a67e2c957","unresolved":false,"context_lines":[{"line_number":2986,"context_line":"            msg \u003d _(\"You can\u0027t change the availability\""},{"line_number":2987,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2988,"context_line":"                    \" hosts in it, please don\u0027t assign aggregate\""},{"line_number":2989,"context_line":"                    \" to multi availability zone\")"},{"line_number":2990,"context_line":"            action_name \u003d \"update aggregate metadata\""},{"line_number":2991,"context_line":"            id \u003d aggregate_id"},{"line_number":2992,"context_line":"            raise exception.InvalidAggregateAction(action\u003daction_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2F7a4%3D","line":2989,"updated":"2013-07-18 23:15:42.000000000","message":"This code can be made DRYer","commit_id":"6adfbb78b79f233931d65c8b1c686b5c335398b1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"c820c4e44a5236d48fb0d325049387ef053b3372","unresolved":false,"context_lines":[{"line_number":2986,"context_line":"            msg \u003d _(\"You can\u0027t change the availability\""},{"line_number":2987,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2988,"context_line":"                    \" hosts in it, please don\u0027t assign aggregate\""},{"line_number":2989,"context_line":"                    \" to multi availability zone\")"},{"line_number":2990,"context_line":"            action_name \u003d \"update aggregate metadata\""},{"line_number":2991,"context_line":"            id \u003d aggregate_id"},{"line_number":2992,"context_line":"            raise exception.InvalidAggregateAction(action\u003daction_name,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2F67s%3D","line":2989,"in_reply_to":"AAAAQn%2F%2F7a4%3D","updated":"2013-07-19 05:19:10.000000000","message":"Hi Joe,\n\nDo you mean that I should simplify the msg content?","commit_id":"6adfbb78b79f233931d65c8b1c686b5c335398b1"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"de8a51a26986cffe702ef97d8288fb7e9a98466e","unresolved":false,"context_lines":[{"line_number":2948,"context_line":"        \"\"\"Update the properties of an aggregate.\"\"\""},{"line_number":2949,"context_line":"        aggregate_payload \u003d {\u0027aggregate_id\u0027: aggregate_id}"},{"line_number":2950,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2951,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get(context,"},{"line_number":2952,"context_line":"                                                        aggregate_id)"},{"line_number":2953,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":2954,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FynU%3D","line":2951,"updated":"2013-07-23 07:03:46.000000000","message":"I would prefer to have an optional filter in the DB api to only return metadata for a specific key","commit_id":"84316d40191afd193640af2dd22f4fff38ebb74a"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"df0640ed15264a514420d08a368aa824fd5680a9","unresolved":false,"context_lines":[{"line_number":2948,"context_line":"        \"\"\"Update the properties of an aggregate.\"\"\""},{"line_number":2949,"context_line":"        aggregate_payload \u003d {\u0027aggregate_id\u0027: aggregate_id}"},{"line_number":2950,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2951,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get(context,"},{"line_number":2952,"context_line":"                                                        aggregate_id)"},{"line_number":2953,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":2954,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FybE%3D","line":2951,"in_reply_to":"AAAAQn%2F%2FynU%3D","updated":"2013-07-23 08:38:20.000000000","message":"Joe,\nThanks for your comments, but as I replied in part 1,\nI don\u0027t think that we should modify db api for this specific issue fixing, db api change will leads to additional code change which may impact other function, except that, returning entire aggregate metadata list doesn\u0027t cause performance problem, since aggregate metadata aren\u0027t a big data. So I think fixing the issue using current openstack APIs is reasonable, there isn\u0027t a strong reason for db api changing. I\u0027d like to ask other reviewers to validate my statements","commit_id":"84316d40191afd193640af2dd22f4fff38ebb74a"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"de8a51a26986cffe702ef97d8288fb7e9a98466e","unresolved":false,"context_lines":[{"line_number":2954,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"},{"line_number":2955,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2956,"context_line":"            msg \u003d _(\"You can\u0027t change the availability\""},{"line_number":2957,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2958,"context_line":"                    \" hosts in it, please don\u0027t assign aggregate\""},{"line_number":2959,"context_line":"                    \" to multi availability zone\")"},{"line_number":2960,"context_line":"            action_name \u003d \"update aggregate\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FynQ%3D","line":2957,"updated":"2013-07-23 07:03:46.000000000","message":"Why can\u0027t we change it?  What about checking to see if that name is already taken instead?","commit_id":"84316d40191afd193640af2dd22f4fff38ebb74a"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"df0640ed15264a514420d08a368aa824fd5680a9","unresolved":false,"context_lines":[{"line_number":2954,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"},{"line_number":2955,"context_line":"                         values[\"availability_zone\"]) !\u003d 0:"},{"line_number":2956,"context_line":"            msg \u003d _(\"You can\u0027t change the availability\""},{"line_number":2957,"context_line":"                    \" zone of an aggregate which already has\""},{"line_number":2958,"context_line":"                    \" hosts in it, please don\u0027t assign aggregate\""},{"line_number":2959,"context_line":"                    \" to multi availability zone\")"},{"line_number":2960,"context_line":"            action_name \u003d \"update aggregate\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FyXQ%3D","line":2957,"in_reply_to":"AAAAQn%2F%2FynQ%3D","updated":"2013-07-23 08:38:20.000000000","message":"Joe, message in your review comments is good than mine, I\u0027d like to use it. Thanks!","commit_id":"84316d40191afd193640af2dd22f4fff38ebb74a"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"de8a51a26986cffe702ef97d8288fb7e9a98466e","unresolved":false,"context_lines":[{"line_number":2978,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: metadata})"},{"line_number":2979,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get(context,"},{"line_number":2980,"context_line":"                                                        aggregate_id)"},{"line_number":2981,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":2982,"context_line":"        if hosts and cmp(aggregate_meta[\"availability_zone\"],"},{"line_number":2983,"context_line":"                         metadata[\"availability_zone\"]) !\u003d 0:"},{"line_number":2984,"context_line":"            msg \u003d _(\"You can\u0027t change the availability\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FynM%3D","line":2981,"updated":"2013-07-23 07:03:46.000000000","message":"this can be DRYer","commit_id":"84316d40191afd193640af2dd22f4fff38ebb74a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"88e3f886f1ff8a19d8a3138b1870ca84ba7d4f54","unresolved":false,"context_lines":[{"line_number":2995,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2996,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKsQ%3D","line":2998,"updated":"2013-08-06 03:44:33.000000000","message":"You will get KeyError when you update an aggregate without metadata \u0027availability_zone\u0027","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ef70c43e2f916acc53d1575992f16ac6727b797a","unresolved":false,"context_lines":[{"line_number":2995,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2996,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FFXY%3D","line":2998,"in_reply_to":"AAAAQn%2F%2FGSs%3D","updated":"2013-08-07 13:30:37.000000000","message":"haha, you need proxy to access his article. I send you a copy by mail :)","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"c78f03e87f3e1816e3e27ec3cfc3c9178635ac2a","unresolved":false,"context_lines":[{"line_number":2995,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2996,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FIWs%3D","line":2998,"in_reply_to":"AAAAQn%2F%2FJ6M%3D","updated":"2013-08-06 18:49:04.000000000","message":"Alex is correct, aggregates DO NOT need to have an associated AZ.","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"141923398fd68f380198cfd3ef67ad09afac0536","unresolved":false,"context_lines":[{"line_number":2995,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2996,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FGSs%3D","line":2998,"in_reply_to":"AAAAQn%2F%2FJ6M%3D","updated":"2013-08-07 08:14:49.000000000","message":"Alex,\nThanks for sharing, I\u0027ll read the article when I will solve access problem.\nThanks for your clarification, I didn\u0027t realize that Aggregate needn\u0027t to be an AZ\u0027s further partition, fortunately, I can add Set Null checking logic into my patch to solve the mistake, then my patch will not import my unreasonable assumption on host aggregate.","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a35b1c2f53d804ded173a1573cc8b6b237078767","unresolved":false,"context_lines":[{"line_number":2995,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2996,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FJ6M%3D","line":2998,"in_reply_to":"AAAAQn%2F%2FKjQ%3D","updated":"2013-08-06 09:23:04.000000000","message":"Aggregate without AZ is not meaningless. Russell have a very good artical for aggregate and Az, http://russellbryantnet.wordpress.com/. You will find there are two use-cases for aggregate.","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"add675f2ad293dabab619dd9cf6a4ee8d70e709e","unresolved":false,"context_lines":[{"line_number":2995,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":2996,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKjQ%3D","line":2998,"in_reply_to":"AAAAQn%2F%2FKsQ%3D","updated":"2013-08-06 05:12:20.000000000","message":"Host aggregates are a mechanism to further partition an availability zone, so I think create aggregate without availability zone is meaningless, but I agree that there is a chance to encounter KeyError when user create a aggregate at first, then assign the aggregate to an availability zone. I\u0027ll add Set Null checking logic to avoid it. Thanks for your comments","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"88e3f886f1ff8a19d8a3138b1870ca84ba7d4f54","unresolved":false,"context_lines":[{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""},{"line_number":3002,"context_line":"                    \"availability zone each already. \""},{"line_number":3003,"context_line":"                    \"You cannot have duplicate keys \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKs8%3D","line":3000,"updated":"2013-08-06 03:44:33.000000000","message":"You should check if one of host\u0027s az different with request az. This just stop user to modify az.","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"a35b1c2f53d804ded173a1573cc8b6b237078767","unresolved":false,"context_lines":[{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""},{"line_number":3002,"context_line":"                    \"availability zone each already. \""},{"line_number":3003,"context_line":"                    \"You cannot have duplicate keys \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FJ5w%3D","line":3000,"in_reply_to":"AAAAQn%2F%2FKjI%3D","updated":"2013-08-06 09:23:04.000000000","message":"Please see comment above","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"add675f2ad293dabab619dd9cf6a4ee8d70e709e","unresolved":false,"context_lines":[{"line_number":2997,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":2998,"context_line":"        aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":2999,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""},{"line_number":3002,"context_line":"                    \"availability zone each already. \""},{"line_number":3003,"context_line":"                    \"You cannot have duplicate keys \""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKjI%3D","line":3000,"in_reply_to":"AAAAQn%2F%2FKs8%3D","updated":"2013-08-06 05:12:20.000000000","message":"I think my logic is fine, since aggregate belongs to one az, when there are host in the aggregate, user shouldn\u0027t change aggregate\u0027s AZ, otherwise, hosts in the aggregate can be in different AZs, that\u0027s one issue, which is useless and leads to confusion, is fixed by my patch","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"bb040231d55a089b29d4de42814f58ef37d1eed7","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""},{"line_number":3002,"context_line":"                    \"availability zone each already. \""},{"line_number":3003,"context_line":"                    \"You cannot have duplicate keys \""},{"line_number":3004,"context_line":"                    \"in the metadata.\")"},{"line_number":3005,"context_line":"            action_name \u003d \"update aggregate\""},{"line_number":3006,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FL28%3D","line":3003,"updated":"2013-08-05 19:27:33.000000000","message":"This is a valid command, changing the AZ that an aggregate is associated with","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"141923398fd68f380198cfd3ef67ad09afac0536","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""},{"line_number":3002,"context_line":"                    \"availability zone each already. \""},{"line_number":3003,"context_line":"                    \"You cannot have duplicate keys \""},{"line_number":3004,"context_line":"                    \"in the metadata.\")"},{"line_number":3005,"context_line":"            action_name \u003d \"update aggregate\""},{"line_number":3006,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FGSU%3D","line":3003,"in_reply_to":"AAAAQn%2F%2FIX8%3D","updated":"2013-08-07 08:14:49.000000000","message":"Joe,\nThanks for your comments, I think your concern are same as Alex\u0027s, please check my reply to Alex. I\u0027d like to discuss with Alex and you before I submit a new patch.","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"c78f03e87f3e1816e3e27ec3cfc3c9178635ac2a","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""},{"line_number":3002,"context_line":"                    \"availability zone each already. \""},{"line_number":3003,"context_line":"                    \"You cannot have duplicate keys \""},{"line_number":3004,"context_line":"                    \"in the metadata.\")"},{"line_number":3005,"context_line":"            action_name \u003d \"update aggregate\""},{"line_number":3006,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FIX8%3D","line":3003,"in_reply_to":"AAAAQn%2F%2FKjA%3D","updated":"2013-08-06 18:49:04.000000000","message":"Why is that a better approach, this just trades one non-optimal user experience with another.","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"add675f2ad293dabab619dd9cf6a4ee8d70e709e","unresolved":false,"context_lines":[{"line_number":3000,"context_line":"        if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3001,"context_line":"            msg \u003d _(\"Aggregates can only have one \""},{"line_number":3002,"context_line":"                    \"availability zone each already. \""},{"line_number":3003,"context_line":"                    \"You cannot have duplicate keys \""},{"line_number":3004,"context_line":"                    \"in the metadata.\")"},{"line_number":3005,"context_line":"            action_name \u003d \"update aggregate\""},{"line_number":3006,"context_line":"            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAQn%2F%2FKjA%3D","line":3003,"in_reply_to":"AAAAQn%2F%2FL28%3D","updated":"2013-08-06 05:12:20.000000000","message":"Joe,\n\nThanks for your comments.\nThe messages doesn\u0027t mean the command is invalid. Do you think that I should modify the message?\nPlease check my reply to Alex above, the command shouldn\u0027t allow user to change aggregate\u0027s vailability zone when it has hosts already, after user remove all hosts, they can change az again, this is the reasonable logic","commit_id":"3f3d52033132f2e4b8a87ba2a40617176ccee8f1"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"155a0690beda4636f33d46eb21f11225d20238d8","unresolved":false,"context_lines":[{"line_number":3007,"context_line":"        if \"availability_zone\" in aggregate_meta:"},{"line_number":3008,"context_line":"            aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":3009,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3010,"context_line":"            if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3011,"context_line":"                msg \u003d _(\"Aggregates can only have one \""},{"line_number":3012,"context_line":"                        \"availability zone each already. \""},{"line_number":3013,"context_line":"                        \"You cannot have duplicate keys \""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAQn%2F%2B9Fk%3D","line":3010,"updated":"2013-08-09 12:11:37.000000000","message":"I don;t get it - this isn\u0027t an attempt to create a second AZ by the user, its an attempt to change the AZ name.  Why is that not allowed","commit_id":"f88536291c2e32895bbec9c9d754c82de208b51e"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"74e8b0af34aa9a837e6d884443ac6ced748d7431","unresolved":false,"context_lines":[{"line_number":3007,"context_line":"        if \"availability_zone\" in aggregate_meta:"},{"line_number":3008,"context_line":"            aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":3009,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3010,"context_line":"            if hosts and (aggregate_az !\u003d values[\"availability_zone\"]):"},{"line_number":3011,"context_line":"                msg \u003d _(\"Aggregates can only have one \""},{"line_number":3012,"context_line":"                        \"availability zone each already. \""},{"line_number":3013,"context_line":"                        \"You cannot have duplicate keys \""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAQ3%2F%2F%2BvQ%3D","line":3010,"in_reply_to":"AAAAQn%2F%2B9Fk%3D","updated":"2013-08-12 05:48:22.000000000","message":"yes, you are right, since we should allow host in different aggregates no matter whether aggregates are associated with AZs, we don\u0027t need to limit use to change availability zone\u0027s name, I\u0027ll remove these unnecessary checking. Thanks for your comments","commit_id":"f88536291c2e32895bbec9c9d754c82de208b51e"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"155a0690beda4636f33d46eb21f11225d20238d8","unresolved":false,"context_lines":[{"line_number":3037,"context_line":"            aggregate_az \u003d aggregate_meta[\"availability_zone\"].pop()"},{"line_number":3038,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3039,"context_line":"            if hosts and (aggregate_az !\u003d metadata[\"availability_zone\"]):"},{"line_number":3040,"context_line":"                msg \u003d _(\"Aggregates can only have one \""},{"line_number":3041,"context_line":"                        \"availability zone each already. \""},{"line_number":3042,"context_line":"                        \"You cannot have duplicate keys \""},{"line_number":3043,"context_line":"                        \"in the metadata.\")"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAQn%2F%2B9Fg%3D","line":3040,"updated":"2013-08-09 12:11:37.000000000","message":"As above","commit_id":"f88536291c2e32895bbec9c9d754c82de208b51e"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"e2f0fec86f048c1dd11cd6961eb1a9aa9b0d977a","unresolved":false,"context_lines":[{"line_number":3026,"context_line":"                    if host_az and host_az !\u003d CONF.default_availability_zone:"},{"line_number":3027,"context_line":"                        if host_az:"},{"line_number":3028,"context_line":"                            msg \u003d _(\"Aggregate contains a host in availability\""},{"line_number":3029,"context_line":"                                    \" zone %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3030,"context_line":"                                    \" availability zone name\" % host_az)"},{"line_number":3031,"context_line":"                            action_name \u003d \"update aggregate\""},{"line_number":3032,"context_line":"                            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAQ3%2F%2F4ys%3D","line":3029,"updated":"2013-08-13 13:52:05.000000000","message":"\"can\u0027t set\" rather than \"can\u0027t change\"","commit_id":"d7a24167e952740a1bd1b660607a68f5ea0d0ada"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"2d42014cfe733cf1219f6b34f656c475ef59e24b","unresolved":false,"context_lines":[{"line_number":3026,"context_line":"                    if host_az and host_az !\u003d CONF.default_availability_zone:"},{"line_number":3027,"context_line":"                        if host_az:"},{"line_number":3028,"context_line":"                            msg \u003d _(\"Aggregate contains a host in availability\""},{"line_number":3029,"context_line":"                                    \" zone %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3030,"context_line":"                                    \" availability zone name\" % host_az)"},{"line_number":3031,"context_line":"                            action_name \u003d \"update aggregate\""},{"line_number":3032,"context_line":"                            id \u003d aggregate_id"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAARH%2F%2F%2Fk0%3D","line":3029,"in_reply_to":"AAAAQ3%2F%2F4ys%3D","updated":"2013-08-14 02:34:20.000000000","message":"ok","commit_id":"d7a24167e952740a1bd1b660607a68f5ea0d0ada"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"afb6562cfeee7e53db25fa9b0003c25442c32b2a","unresolved":false,"context_lines":[{"line_number":3016,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":3017,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":3018,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":3019,"context_line":"        if not aggregate_meta:"},{"line_number":3020,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3021,"context_line":"            if hosts:"},{"line_number":3022,"context_line":"                for host in hosts:"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2BfI%3D","line":3019,"updated":"2013-08-14 10:12:28.000000000","message":"As per my earlier comments there is still no check that the values being updated actually include an AZ value.","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"43623942fb8ad5a0f2e21ccfacca736face0d9ee","unresolved":false,"context_lines":[{"line_number":3016,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":3017,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":3018,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":3019,"context_line":"        if not aggregate_meta:"},{"line_number":3020,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3021,"context_line":"            if hosts:"},{"line_number":3022,"context_line":"                for host in hosts:"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F7Fg%3D","line":3019,"in_reply_to":"AAAARH%2F%2F%2BfI%3D","updated":"2013-08-15 05:32:59.000000000","message":"yes, you are right, the values may contain an AZ value, the more reasonable logic is checking whether values contain an AZ value at first, then checking whether target aggregate is associated with an AZ already.","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d6ba47f3a44b3888447807cbae3a6f8c3b6e0901","unresolved":false,"context_lines":[{"line_number":3018,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":3019,"context_line":"        if not aggregate_meta:"},{"line_number":3020,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3021,"context_line":"            if hosts:"},{"line_number":3022,"context_line":"                for host in hosts:"},{"line_number":3023,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3024,"context_line":"                        context, host)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2BqY%3D","line":3021,"updated":"2013-08-14 09:52:12.000000000","message":"This is needless","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"43623942fb8ad5a0f2e21ccfacca736face0d9ee","unresolved":false,"context_lines":[{"line_number":3018,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":3019,"context_line":"        if not aggregate_meta:"},{"line_number":3020,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3021,"context_line":"            if hosts:"},{"line_number":3022,"context_line":"                for host in hosts:"},{"line_number":3023,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3024,"context_line":"                        context, host)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F7Fc%3D","line":3021,"in_reply_to":"AAAARH%2F%2F%2BqY%3D","updated":"2013-08-15 05:32:59.000000000","message":"I\u0027ll remove these needless code lines.","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d6ba47f3a44b3888447807cbae3a6f8c3b6e0901","unresolved":false,"context_lines":[{"line_number":3028,"context_line":"                                    \" zone %s. You can\u0027t set aggregate\u0027s\""},{"line_number":3029,"context_line":"                                    \" availability zone name\") % host_az"},{"line_number":3030,"context_line":"                            action_name \u003d \"update aggregate\""},{"line_number":3031,"context_line":"                            id \u003d aggregate_id"},{"line_number":3032,"context_line":"                            raise exception.InvalidAggregateAction("},{"line_number":3033,"context_line":"                                                            action\u003daction_name,"},{"line_number":3034,"context_line":"                                                            aggregate_id\u003did,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2BoQ%3D","line":3031,"updated":"2013-08-14 09:52:12.000000000","message":"super nit, assign at line 3034 directly","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"afb6562cfeee7e53db25fa9b0003c25442c32b2a","unresolved":false,"context_lines":[{"line_number":3049,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: metadata})"},{"line_number":3050,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":3051,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":3052,"context_line":"        if not aggregate_meta:"},{"line_number":3053,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3054,"context_line":"            if hosts:"},{"line_number":3055,"context_line":"                for host in hosts:"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2BfE%3D","line":3052,"updated":"2013-08-14 10:12:28.000000000","message":"As per my earlier comments there is still no check that the values being updated actually include an AZ value.","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d6ba47f3a44b3888447807cbae3a6f8c3b6e0901","unresolved":false,"context_lines":[{"line_number":3051,"context_line":"            context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":3052,"context_line":"        if not aggregate_meta:"},{"line_number":3053,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3054,"context_line":"            if hosts:"},{"line_number":3055,"context_line":"                for host in hosts:"},{"line_number":3056,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3057,"context_line":"                        context, host)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2Bp4%3D","line":3054,"updated":"2013-08-14 09:52:12.000000000","message":"this is needless","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d6ba47f3a44b3888447807cbae3a6f8c3b6e0901","unresolved":false,"context_lines":[{"line_number":3056,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3057,"context_line":"                        context, host)"},{"line_number":3058,"context_line":"                    if host_az:"},{"line_number":3059,"context_line":"                        if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3060,"context_line":"                            if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3061,"context_line":"                                msg \u003d _(\"Aggregate contains a host in\""},{"line_number":3062,"context_line":"                                        \" availability zone %s. You can\u0027t\""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2Bpw%3D","line":3059,"updated":"2013-08-14 09:52:12.000000000","message":"why we haven\u0027t the same checking for update? And need testcase for host in two aggregate that have same az.","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"43623942fb8ad5a0f2e21ccfacca736face0d9ee","unresolved":false,"context_lines":[{"line_number":3056,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3057,"context_line":"                        context, host)"},{"line_number":3058,"context_line":"                    if host_az:"},{"line_number":3059,"context_line":"                        if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3060,"context_line":"                            if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3061,"context_line":"                                msg \u003d _(\"Aggregate contains a host in\""},{"line_number":3062,"context_line":"                                        \" availability zone %s. You can\u0027t\""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F7FY%3D","line":3059,"in_reply_to":"AAAARH%2F%2F%2Bpw%3D","updated":"2013-08-15 05:32:59.000000000","message":"Please check my above reply to Phil, I\u0027ll improve my code logic in both function, I\u0027ll add same checking into update function","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d6ba47f3a44b3888447807cbae3a6f8c3b6e0901","unresolved":false,"context_lines":[{"line_number":3063,"context_line":"                                        \" set aggregate\u0027s availability\""},{"line_number":3064,"context_line":"                                        \" zone name\") % host_az"},{"line_number":3065,"context_line":"                                action_name \u003d \"update aggregate metadata\""},{"line_number":3066,"context_line":"                                id \u003d aggregate_id"},{"line_number":3067,"context_line":"                                raise exception.InvalidAggregateAction("},{"line_number":3068,"context_line":"                                                            action\u003daction_name,"},{"line_number":3069,"context_line":"                                                            aggregate_id\u003did,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2BoM%3D","line":3066,"updated":"2013-08-14 09:52:12.000000000","message":"ditto","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"992efd49bee3f23beba57298104d45ce672eb37b","unresolved":false,"context_lines":[{"line_number":3044,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":3045,"context_line":"        if \"availability_zone\" in values:"},{"line_number":3046,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3047,"context_line":"            if hosts:"},{"line_number":3048,"context_line":"                for host in hosts:"},{"line_number":3049,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3050,"context_line":"                        context, host)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F1dc%3D","line":3047,"updated":"2013-08-29 00:23:30.000000000","message":"needless","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"f5c5496b6ad6b695a1d5e96c5aa1885e6f55431c","unresolved":false,"context_lines":[{"line_number":3044,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: values})"},{"line_number":3045,"context_line":"        if \"availability_zone\" in values:"},{"line_number":3046,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3047,"context_line":"            if hosts:"},{"line_number":3048,"context_line":"                for host in hosts:"},{"line_number":3049,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3050,"context_line":"                        context, host)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F0bM%3D","line":3047,"in_reply_to":"AAAASn%2F%2F1dc%3D","updated":"2013-08-29 06:29:24.000000000","message":"I\u0027ll remove these needless code lines, thank you!","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"992efd49bee3f23beba57298104d45ce672eb37b","unresolved":false,"context_lines":[{"line_number":3049,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3050,"context_line":"                        context, host)"},{"line_number":3051,"context_line":"                    if host_az:"},{"line_number":3052,"context_line":"                        if host_az !\u003d values[\"availability_zone\"]:"},{"line_number":3053,"context_line":"                            if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3054,"context_line":"                                msg \u003d _(\"Aggregate contains a host in\""},{"line_number":3055,"context_line":"                                        \" availability zone %s. You can\u0027t\""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F1d0%3D","line":3052,"updated":"2013-08-29 00:23:30.000000000","message":"one case is missing. I can\u0027t update the az of aggregate.\n\nfor example:\nnova aggregate-create ag1\n\nnova aggregate-update 5 ag1 az1\n\nnova aggregate-add-host 5 soulxu1304-ThinkPad-T410\n\nnova aggregate-update 5 ag1 az2\n\nERROR: Cannot perform action \u0027update aggregate\u0027 on aggregate 5. Reason: Aggregate contains a host in availability zone az1. You can\u0027t change aggregate\u0027s availability zone name. (HTTP 400) (Request-ID: req-0dd5db8b-7248-4eb7-aeea-ebda9bb70985)\n\nAnd need unittest for this case","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"f5c5496b6ad6b695a1d5e96c5aa1885e6f55431c","unresolved":false,"context_lines":[{"line_number":3049,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3050,"context_line":"                        context, host)"},{"line_number":3051,"context_line":"                    if host_az:"},{"line_number":3052,"context_line":"                        if host_az !\u003d values[\"availability_zone\"]:"},{"line_number":3053,"context_line":"                            if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3054,"context_line":"                                msg \u003d _(\"Aggregate contains a host in\""},{"line_number":3055,"context_line":"                                        \" availability zone %s. You can\u0027t\""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F0bY%3D","line":3052,"in_reply_to":"AAAASn%2F%2F1d0%3D","updated":"2013-08-29 06:29:24.000000000","message":"yes, you are right, I have wrote two test cases to verify your user case, they failed, I\u0027ll fix this leak in my new patch, thank you!","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"992efd49bee3f23beba57298104d45ce672eb37b","unresolved":false,"context_lines":[{"line_number":3056,"context_line":"                                        \" change aggregate\u0027s availability\""},{"line_number":3057,"context_line":"                                        \" zone name\") % host_az"},{"line_number":3058,"context_line":"                                action_name \u003d \"update aggregate\""},{"line_number":3059,"context_line":"                                id \u003d aggregate_id"},{"line_number":3060,"context_line":"                                raise exception.InvalidAggregateAction("},{"line_number":3061,"context_line":"                                                        action\u003daction_name,"},{"line_number":3062,"context_line":"                                                        aggregate_id\u003did,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F1dg%3D","line":3059,"updated":"2013-08-29 00:23:30.000000000","message":"needless","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"992efd49bee3f23beba57298104d45ce672eb37b","unresolved":false,"context_lines":[{"line_number":3077,"context_line":"        aggregate_payload.update({\u0027meta_data\u0027: metadata})"},{"line_number":3078,"context_line":"        if \"availability_zone\" in metadata:"},{"line_number":3079,"context_line":"            hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3080,"context_line":"            if hosts:"},{"line_number":3081,"context_line":"                for host in hosts:"},{"line_number":3082,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3083,"context_line":"                        context, host)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F1dY%3D","line":3080,"updated":"2013-08-29 00:23:30.000000000","message":"ditto","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"992efd49bee3f23beba57298104d45ce672eb37b","unresolved":false,"context_lines":[{"line_number":3082,"context_line":"                    host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3083,"context_line":"                        context, host)"},{"line_number":3084,"context_line":"                    if host_az:"},{"line_number":3085,"context_line":"                        if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3086,"context_line":"                            if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3087,"context_line":"                                msg \u003d _(\"Aggregate contains a host in\""},{"line_number":3088,"context_line":"                                        \" availability zone %s. You can\u0027t\""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F1c0%3D","line":3085,"updated":"2013-08-29 00:23:30.000000000","message":"ditto","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"992efd49bee3f23beba57298104d45ce672eb37b","unresolved":false,"context_lines":[{"line_number":3089,"context_line":"                                        \" change aggregate\u0027s availability\""},{"line_number":3090,"context_line":"                                        \" zone name\") % host_az"},{"line_number":3091,"context_line":"                                action_name \u003d \"update aggregate metadata\""},{"line_number":3092,"context_line":"                                id \u003d aggregate_id"},{"line_number":3093,"context_line":"                                raise exception.InvalidAggregateAction("},{"line_number":3094,"context_line":"                                                            action\u003daction_name,"},{"line_number":3095,"context_line":"                                                            aggregate_id\u003did,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAASn%2F%2F1dU%3D","line":3092,"updated":"2013-08-29 00:23:30.000000000","message":"ditto","commit_id":"9f8564df95f36fae1e162f4304934c73e9a44505"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"b99fd0fee5239f96eac06978ba97c2655aa916e9","unresolved":false,"context_lines":[{"line_number":3093,"context_line":"        if aggregate_meta.get(\"availability_zone\"):"},{"line_number":3094,"context_line":"            is_az \u003d True"},{"line_number":3095,"context_line":"            aggregate_az \u003d aggregate_meta[\u0027availability_zone\u0027].pop()"},{"line_number":3096,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3097,"context_line":"        for host in hosts:"},{"line_number":3098,"context_line":"            host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3099,"context_line":"                                                    context, host)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Fi8A%3D","line":3096,"updated":"2013-09-03 16:50:12.000000000","message":"in order to reduce the number of db calls, is it possible to only do this call if the az is being updated.","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"c67d71ae5ea00ce0c21f0a5643ae48cb5dee9084","unresolved":false,"context_lines":[{"line_number":3093,"context_line":"        if aggregate_meta.get(\"availability_zone\"):"},{"line_number":3094,"context_line":"            is_az \u003d True"},{"line_number":3095,"context_line":"            aggregate_az \u003d aggregate_meta[\u0027availability_zone\u0027].pop()"},{"line_number":3096,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3097,"context_line":"        for host in hosts:"},{"line_number":3098,"context_line":"            host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3099,"context_line":"                                                    context, host)"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Ffjs%3D","line":3096,"in_reply_to":"AAAASn%2F%2Fi8A%3D","updated":"2013-09-04 05:27:51.000000000","message":"we need access db to get hosts, because an aggregate which isn\u0027t an az may contains a host belongs to another az","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"893200b1f8c1f17a9ce92a7a072231539ff588bb","unresolved":false,"context_lines":[{"line_number":3105,"context_line":"                        if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3106,"context_line":"                            if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3107,"context_line":"                                update_flag \u003d False"},{"line_number":3108,"context_line":"                                break"},{"line_number":3109,"context_line":"                else:"},{"line_number":3110,"context_line":"                    if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3111,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2FdNU%3D","line":3108,"updated":"2013-09-04 15:22:33.000000000","message":"By doing a break on the first failing host you\u0027re going to only report the error one host at at time - which would be pretty frustrating to the admin.\n\nIsn\u0027t it possible to build a list of all failing hosts and return that in the error message ?","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"67a3cacf8cd60d0859d8f3988add45f28a19ebd2","unresolved":false,"context_lines":[{"line_number":3105,"context_line":"                        if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3106,"context_line":"                            if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3107,"context_line":"                                update_flag \u003d False"},{"line_number":3108,"context_line":"                                break"},{"line_number":3109,"context_line":"                else:"},{"line_number":3110,"context_line":"                    if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3111,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2FaJg%3D","line":3108,"in_reply_to":"AAAASn%2F%2Fc6g%3D","updated":"2013-09-05 03:10:25.000000000","message":"Phil and Joe,\n\n     Thanks for your comments, I\u0027ll build a list of all failing hosts and return them","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"5d2f48bff8288fcb05fcb7ef7952711ffefde6c4","unresolved":false,"context_lines":[{"line_number":3105,"context_line":"                        if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3106,"context_line":"                            if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3107,"context_line":"                                update_flag \u003d False"},{"line_number":3108,"context_line":"                                break"},{"line_number":3109,"context_line":"                else:"},{"line_number":3110,"context_line":"                    if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3111,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Fc6g%3D","line":3108,"in_reply_to":"AAAASn%2F%2FdNU%3D","updated":"2013-09-04 16:07:21.000000000","message":"I agree","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"b99fd0fee5239f96eac06978ba97c2655aa916e9","unresolved":false,"context_lines":[{"line_number":3114,"context_line":"        if not update_flag:"},{"line_number":3115,"context_line":"                msg \u003d _(\"Aggregate contains a host in\""},{"line_number":3116,"context_line":"                        \" availability zone %s. You can\u0027t\""},{"line_number":3117,"context_line":"                        \" change aggregate\u0027s availability\""},{"line_number":3118,"context_line":"                        \" zone name\") % host_az"},{"line_number":3119,"context_line":"                raise exception.InvalidAggregateAction("},{"line_number":3120,"context_line":"                                                action\u003daction_name,"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Fi8Y%3D","line":3117,"updated":"2013-09-03 16:50:12.000000000","message":"to make this more useful can you include which host is already in an AZ?","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"c67d71ae5ea00ce0c21f0a5643ae48cb5dee9084","unresolved":false,"context_lines":[{"line_number":3114,"context_line":"        if not update_flag:"},{"line_number":3115,"context_line":"                msg \u003d _(\"Aggregate contains a host in\""},{"line_number":3116,"context_line":"                        \" availability zone %s. You can\u0027t\""},{"line_number":3117,"context_line":"                        \" change aggregate\u0027s availability\""},{"line_number":3118,"context_line":"                        \" zone name\") % host_az"},{"line_number":3119,"context_line":"                raise exception.InvalidAggregateAction("},{"line_number":3120,"context_line":"                                                action\u003daction_name,"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Ffjk%3D","line":3117,"in_reply_to":"AAAASn%2F%2Fi8Y%3D","updated":"2013-09-04 05:27:51.000000000","message":"yes, we should include host information in this msg, then user can know which host is in other az, I\u0027ll add it in my new patch","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"220a9c923d7ff22fe0acc961d0ce04f4edd040b8","unresolved":false,"context_lines":[{"line_number":3083,"context_line":""},{"line_number":3084,"context_line":"    def _check_az_for_aggregate(self, context, aggregate_id, metadata,"},{"line_number":3085,"context_line":"                                action_name):"},{"line_number":3086,"context_line":"        \"\"\"Check whether update operation should update"},{"line_number":3087,"context_line":"        aggregate\u0027s availability zone."},{"line_number":3088,"context_line":"        \"\"\""},{"line_number":3089,"context_line":"        is_az \u003d False"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAS3%2F%2F0kA%3D","line":3086,"updated":"2013-09-18 17:25:28.000000000","message":"nit: the docstring format is wrong. see https://github.com/openstack-dev/hacking/blob/master/HACKING.rst#docstrings\n\nthis is just an FYI, and is not worth a full respin,","commit_id":"d877fd553909905a98779e670153c3f987c919a6"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"fbb8fc6da223135488e4f0bb11579271ccc74b5c","unresolved":false,"context_lines":[{"line_number":3083,"context_line":""},{"line_number":3084,"context_line":"    def _check_az_for_aggregate(self, context, aggregate_id, metadata,"},{"line_number":3085,"context_line":"                                action_name):"},{"line_number":3086,"context_line":"        \"\"\"Check whether update operation should update"},{"line_number":3087,"context_line":"        aggregate\u0027s availability zone."},{"line_number":3088,"context_line":"        \"\"\""},{"line_number":3089,"context_line":"        is_az \u003d False"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAS3%2F%2Fr18%3D","line":3086,"in_reply_to":"AAAAS3%2F%2F0kA%3D","updated":"2013-09-22 03:21:46.000000000","message":"Thank you!","commit_id":"d877fd553909905a98779e670153c3f987c919a6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"5169526c29f2e26acbb1f718b5dae1d6403699d0","unresolved":false,"context_lines":[{"line_number":3114,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3115,"context_line":"                            update_flag \u003d False"},{"line_number":3116,"context_line":"                            info \u003d host + \" in \" + host_az + \",\""},{"line_number":3117,"context_line":"                            host_az_info \u003d host_az_info.join(info)"},{"line_number":3118,"context_line":"        if not update_flag:"},{"line_number":3119,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3120,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAS3%2F%2F9qQ%3D","line":3117,"updated":"2013-09-19 13:30:48.000000000","message":"3107-3111 is same with 3113-3117\n\nhow about:\n\nif is_ax and aggregate_az \u003d\u003d host_az:\n\n     update_flag \u003d True\n\nelse:\n\n    if host_az !\u003d metadata[\"availability_zone\"]:\n\n           if host_az !\u003d CONF.default_availability_zone:\n\n              .........\n\nThen you needn\u0027t two copy for the same code","commit_id":"d877fd553909905a98779e670153c3f987c919a6"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"0123fd3a244a42ac4448e12b9e527a8fbb54f2c7","unresolved":false,"context_lines":[{"line_number":3114,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3115,"context_line":"                            update_flag \u003d False"},{"line_number":3116,"context_line":"                            info \u003d host + \" in \" + host_az + \",\""},{"line_number":3117,"context_line":"                            host_az_info \u003d host_az_info.join(info)"},{"line_number":3118,"context_line":"        if not update_flag:"},{"line_number":3119,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3120,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAS3%2F%2Fp9M%3D","line":3117,"in_reply_to":"AAAAS3%2F%2F9qQ%3D","updated":"2013-09-23 10:13:22.000000000","message":"I rechecked the code logic, you are right, I\u0027ll submit a new patch","commit_id":"d877fd553909905a98779e670153c3f987c919a6"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"fbb8fc6da223135488e4f0bb11579271ccc74b5c","unresolved":false,"context_lines":[{"line_number":3114,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3115,"context_line":"                            update_flag \u003d False"},{"line_number":3116,"context_line":"                            info \u003d host + \" in \" + host_az + \",\""},{"line_number":3117,"context_line":"                            host_az_info \u003d host_az_info.join(info)"},{"line_number":3118,"context_line":"        if not update_flag:"},{"line_number":3119,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3120,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAS3%2F%2Fr2Q%3D","line":3117,"in_reply_to":"AAAAS3%2F%2F9qQ%3D","updated":"2013-09-22 03:21:46.000000000","message":"aggregate_az \u003d\u003d host_az is one sub case for aggregate with az, we shouldn\u0027t merge it with parent user scenario, please recheck the user cases and code logic","commit_id":"d877fd553909905a98779e670153c3f987c919a6"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e65fdea6cfd7cccffd13991ff8133b5d5b1c212f","unresolved":false,"context_lines":[{"line_number":3143,"context_line":"                                                    context, host)"},{"line_number":3144,"context_line":"            if host_az:"},{"line_number":3145,"context_line":"                if is_az and aggregate_az \u003d\u003d host_az:"},{"line_number":3146,"context_line":"                        update_flag \u003d True"},{"line_number":3147,"context_line":"                else:"},{"line_number":3148,"context_line":"                    if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3149,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAATH%2F%2FIIA%3D","line":3146,"updated":"2013-10-22 19:43:28.000000000","message":"This is rather deeply indented…","commit_id":"fb42163694c92334ec281a8a7db4a2edc1eae544"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"0173b52985bd59853d91cb3adff751ea8401f53d","unresolved":false,"context_lines":[{"line_number":3143,"context_line":"                                                    context, host)"},{"line_number":3144,"context_line":"            if host_az:"},{"line_number":3145,"context_line":"                if is_az and aggregate_az \u003d\u003d host_az:"},{"line_number":3146,"context_line":"                        update_flag \u003d True"},{"line_number":3147,"context_line":"                else:"},{"line_number":3148,"context_line":"                    if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3149,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAATX%2F%2F%2F%2Bg%3D","line":3146,"in_reply_to":"AAAATH%2F%2FIIA%3D","updated":"2013-10-23 03:33:26.000000000","message":"Done","commit_id":"fb42163694c92334ec281a8a7db4a2edc1eae544"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e65fdea6cfd7cccffd13991ff8133b5d5b1c212f","unresolved":false,"context_lines":[{"line_number":3146,"context_line":"                        update_flag \u003d True"},{"line_number":3147,"context_line":"                else:"},{"line_number":3148,"context_line":"                    if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3149,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3150,"context_line":"                            update_flag \u003d False"},{"line_number":3151,"context_line":"                            info \u003d host + \" in \" + host_az + \",\""},{"line_number":3152,"context_line":"                            host_az_info \u003d host_az_info.join(info)"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAATH%2F%2FIHI%3D","line":3149,"updated":"2013-10-22 19:43:28.000000000","message":"Can you not combine these two if\u0027s into the else?  i.e.:\n\n    elif (host_az !\u003d metadata[\u0027availability_zone\u0027] and\n          host_az !\u003d CONF.default_availability_zone):\n        …\n\nOr even:\n\n    elif host_az not in (metadata[\u0027availability_zone\u0027],\n                         CONF.default_availability_zone):","commit_id":"fb42163694c92334ec281a8a7db4a2edc1eae544"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"0173b52985bd59853d91cb3adff751ea8401f53d","unresolved":false,"context_lines":[{"line_number":3146,"context_line":"                        update_flag \u003d True"},{"line_number":3147,"context_line":"                else:"},{"line_number":3148,"context_line":"                    if host_az !\u003d metadata[\"availability_zone\"]:"},{"line_number":3149,"context_line":"                        if host_az !\u003d CONF.default_availability_zone:"},{"line_number":3150,"context_line":"                            update_flag \u003d False"},{"line_number":3151,"context_line":"                            info \u003d host + \" in \" + host_az + \",\""},{"line_number":3152,"context_line":"                            host_az_info \u003d host_az_info.join(info)"}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAATX%2F%2F%2F%2Bc%3D","line":3149,"in_reply_to":"AAAATH%2F%2FIHI%3D","updated":"2013-10-23 03:33:26.000000000","message":"Done","commit_id":"fb42163694c92334ec281a8a7db4a2edc1eae544"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e65fdea6cfd7cccffd13991ff8133b5d5b1c212f","unresolved":false,"context_lines":[{"line_number":3151,"context_line":"                            info \u003d host + \" in \" + host_az + \",\""},{"line_number":3152,"context_line":"                            host_az_info \u003d host_az_info.join(info)"},{"line_number":3153,"context_line":"        if not update_flag:"},{"line_number":3154,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3155,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3156,"context_line":"                        \" availability zone name. If you want,\""},{"line_number":3157,"context_line":"                        \" please remove conflict hosts from other\""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAATH%2F%2FIHE%3D","line":3154,"updated":"2013-10-22 19:43:28.000000000","message":"Again, this is rather deeply indented…","commit_id":"fb42163694c92334ec281a8a7db4a2edc1eae544"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"0173b52985bd59853d91cb3adff751ea8401f53d","unresolved":false,"context_lines":[{"line_number":3151,"context_line":"                            info \u003d host + \" in \" + host_az + \",\""},{"line_number":3152,"context_line":"                            host_az_info \u003d host_az_info.join(info)"},{"line_number":3153,"context_line":"        if not update_flag:"},{"line_number":3154,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3155,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3156,"context_line":"                        \" availability zone name. If you want,\""},{"line_number":3157,"context_line":"                        \" please remove conflict hosts from other\""}],"source_content_type":"text/x-python","patch_set":29,"id":"AAAATX%2F%2F%2F%2BY%3D","line":3154,"in_reply_to":"AAAATH%2F%2FIHE%3D","updated":"2013-10-23 03:33:26.000000000","message":"Done","commit_id":"fb42163694c92334ec281a8a7db4a2edc1eae544"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"692086821971757adac96e0d289d6c33cccababb","unresolved":false,"context_lines":[{"line_number":3144,"context_line":"        aggregate_az \u003d None"},{"line_number":3145,"context_line":"        update_flag \u003d True"},{"line_number":3146,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":3147,"context_line":"                                 context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":3148,"context_line":"        if aggregate_meta.get(\"availability_zone\"):"},{"line_number":3149,"context_line":"            is_az \u003d True"},{"line_number":3150,"context_line":"            aggregate_az \u003d aggregate_meta[\u0027availability_zone\u0027].pop()"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATX%2F%2F%2BgU%3D","line":3147,"updated":"2013-10-23 12:27:57.000000000","message":"Sorry, but I think you now need to switch to using the Aggregate Objects instead of db calls - as the rest of this class has switched.","commit_id":"0f57c6ab9a984d1bde06b3fbfc7d53156909a4e8"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"3612b6adae579e32b6df3fa5fdee0e53ba95e0cb","unresolved":false,"context_lines":[{"line_number":3144,"context_line":"        aggregate_az \u003d None"},{"line_number":3145,"context_line":"        update_flag \u003d True"},{"line_number":3146,"context_line":"        aggregate_meta \u003d self.db.aggregate_metadata_get_by_metadata_key("},{"line_number":3147,"context_line":"                                 context, aggregate_id, \u0027availability_zone\u0027)"},{"line_number":3148,"context_line":"        if aggregate_meta.get(\"availability_zone\"):"},{"line_number":3149,"context_line":"            is_az \u003d True"},{"line_number":3150,"context_line":"            aggregate_az \u003d aggregate_meta[\u0027availability_zone\u0027].pop()"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATn%2F%2F%2By0%3D","line":3147,"in_reply_to":"AAAATX%2F%2F%2BgU%3D","updated":"2013-10-24 10:04:15.000000000","message":"Done","commit_id":"0f57c6ab9a984d1bde06b3fbfc7d53156909a4e8"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"692086821971757adac96e0d289d6c33cccababb","unresolved":false,"context_lines":[{"line_number":3148,"context_line":"        if aggregate_meta.get(\"availability_zone\"):"},{"line_number":3149,"context_line":"            is_az \u003d True"},{"line_number":3150,"context_line":"            aggregate_az \u003d aggregate_meta[\u0027availability_zone\u0027].pop()"},{"line_number":3151,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3152,"context_line":"        host_az_info \u003d \u0027\u0027"},{"line_number":3153,"context_line":"        for host in hosts:"},{"line_number":3154,"context_line":"            host_az \u003d availability_zones.get_host_availability_zone("}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATX%2F%2F%2BgQ%3D","line":3151,"updated":"2013-10-23 12:27:57.000000000","message":"ditto","commit_id":"0f57c6ab9a984d1bde06b3fbfc7d53156909a4e8"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"3612b6adae579e32b6df3fa5fdee0e53ba95e0cb","unresolved":false,"context_lines":[{"line_number":3148,"context_line":"        if aggregate_meta.get(\"availability_zone\"):"},{"line_number":3149,"context_line":"            is_az \u003d True"},{"line_number":3150,"context_line":"            aggregate_az \u003d aggregate_meta[\u0027availability_zone\u0027].pop()"},{"line_number":3151,"context_line":"        hosts \u003d self.db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":3152,"context_line":"        host_az_info \u003d \u0027\u0027"},{"line_number":3153,"context_line":"        for host in hosts:"},{"line_number":3154,"context_line":"            host_az \u003d availability_zones.get_host_availability_zone("}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATn%2F%2F%2Byw%3D","line":3151,"in_reply_to":"AAAATX%2F%2F%2BgQ%3D","updated":"2013-10-24 10:04:15.000000000","message":"Done","commit_id":"0f57c6ab9a984d1bde06b3fbfc7d53156909a4e8"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"692086821971757adac96e0d289d6c33cccababb","unresolved":false,"context_lines":[{"line_number":3161,"context_line":"                    update_flag \u003d False"},{"line_number":3162,"context_line":"                    info \u003d host + \" in \" + host_az + \",\""},{"line_number":3163,"context_line":"                    host_az_info \u003d host_az_info.join(info)"},{"line_number":3164,"context_line":"        if not update_flag:"},{"line_number":3165,"context_line":"            msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3166,"context_line":"                    \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3167,"context_line":"                    \" availability zone name. If you want,\""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATX%2F%2F%2Bfk%3D","line":3164,"updated":"2013-10-23 12:27:57.000000000","message":"Not sure if its a construct used elsewhere in Nova, but you could use the \"for - else\" here instead of having to set updat_flag","commit_id":"0f57c6ab9a984d1bde06b3fbfc7d53156909a4e8"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"3612b6adae579e32b6df3fa5fdee0e53ba95e0cb","unresolved":false,"context_lines":[{"line_number":3161,"context_line":"                    update_flag \u003d False"},{"line_number":3162,"context_line":"                    info \u003d host + \" in \" + host_az + \",\""},{"line_number":3163,"context_line":"                    host_az_info \u003d host_az_info.join(info)"},{"line_number":3164,"context_line":"        if not update_flag:"},{"line_number":3165,"context_line":"            msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3166,"context_line":"                    \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3167,"context_line":"                    \" availability zone name. If you want,\""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATn%2F%2F%2ByY%3D","line":3164,"in_reply_to":"AAAATX%2F%2F%2Bfk%3D","updated":"2013-10-24 10:04:15.000000000","message":"Phil, \nThanks for your comments, I can understand your concern, since we want to detect and show all conflict, I\u0027m afraid that we can\u0027t combine this into elif, we need this flag variable. Please let me know your opinion.","commit_id":"0f57c6ab9a984d1bde06b3fbfc7d53156909a4e8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"fe281c49b399364274a476c47c9b6692fef3cc28","unresolved":false,"context_lines":[{"line_number":3161,"context_line":"                    update_flag \u003d False"},{"line_number":3162,"context_line":"                    info \u003d host + \" in \" + host_az + \",\""},{"line_number":3163,"context_line":"                    host_az_info \u003d host_az_info.join(info)"},{"line_number":3164,"context_line":"        if not update_flag:"},{"line_number":3165,"context_line":"            msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3166,"context_line":"                    \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3167,"context_line":"                    \" availability zone name. If you want,\""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATn%2F%2F8dk%3D","line":3164,"in_reply_to":"AAAATn%2F%2F%2ByY%3D","updated":"2013-10-24 19:50:03.000000000","message":"He\u0027s not talking about an \"else\" attached to the if/elif tree, he\u0027s talking about an \"else\" attached to the \"for\" loop.  It\u0027s a nice little Python feature.  I\u0027ll illustrate it with a manual search through a list:\n\n    items \u003d [\u0027a\u0027, \u0027b\u0027, \u0027c\u0027, \u0027d\u0027, \u0027e\u0027]\n\n    def idx_of(item):\n        for i, elem in enumerate(items):\n            if elem \u003d\u003d item:\n                break\n        else:\n            return None\n\n        return i\n\nSay you call \"idx_of(\u0027c\u0027)\"; the \"for\" loop hits \u0027break\u0027 for i \u003d\u003d 2, and control moves to the \"return i\" statement.  However, if you were to call \"idx_of(\u0027f\u0027)\", the \"for\" loop exhausts all the elements on \"items\", and because it doesn\u0027t hit \"break\", control moves into the \"else\" clause, which executes a \"return None\".\n\nPython recognizes \"else\" in some other constructs as well; it works as described for \"while\" loops, and \"try/except/finally\" also understands \"else\".","commit_id":"0f57c6ab9a984d1bde06b3fbfc7d53156909a4e8"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"846d1bf08b97a5883422a2bf9fd92d9ab329a6ec","unresolved":false,"context_lines":[{"line_number":3161,"context_line":"                    update_flag \u003d False"},{"line_number":3162,"context_line":"                    info \u003d host + \" in \" + host_az + \",\""},{"line_number":3163,"context_line":"                    host_az_info \u003d host_az_info.join(info)"},{"line_number":3164,"context_line":"        if not update_flag:"},{"line_number":3165,"context_line":"            msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3166,"context_line":"                    \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3167,"context_line":"                    \" availability zone name. If you want,\""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAATn%2F%2F1M0%3D","line":3164,"in_reply_to":"AAAATn%2F%2F8dk%3D","updated":"2013-10-28 10:07:28.000000000","message":"Done","commit_id":"0f57c6ab9a984d1bde06b3fbfc7d53156909a4e8"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"5bebc30f003f242e17b458a72643592635f3677a","unresolved":false,"context_lines":[{"line_number":3162,"context_line":"                    update_flag \u003d False"},{"line_number":3163,"context_line":"                    info \u003d host + \" in \" + host_az + \",\""},{"line_number":3164,"context_line":"                    host_az_info \u003d host_az_info.join(info)"},{"line_number":3165,"context_line":"        if not update_flag:"},{"line_number":3166,"context_line":"            msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3167,"context_line":"                    \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3168,"context_line":"                    \" availability zone name. If you want,\""}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAATn%2F%2F8dY%3D","line":3165,"updated":"2013-10-24 19:51:06.000000000","message":"I have to echo Phil\u0027s request for using \u0027else\u0027 here.  Hopefully my previous comment helps you understand what we\u0027re asking for, but please feel free to ask questions :)","commit_id":"c4db46ae7973f487792c9dcc8bf9894d9b915f17"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"1aaf7756a4e498389c20356fcd5b2e14b92764b4","unresolved":false,"context_lines":[{"line_number":3139,"context_line":"                                action_name):"},{"line_number":3140,"context_line":"        \"\"\"Check whether update operation should update"},{"line_number":3141,"context_line":"        aggregate\u0027s availability zone."},{"line_number":3142,"context_line":"        \"\"\""},{"line_number":3143,"context_line":"        aggregate_az \u003d None"},{"line_number":3144,"context_line":"        update_flag \u003d True"},{"line_number":3145,"context_line":"        aggregate \u003d aggregate_obj.Aggregate.get_by_id(context, aggregate_id)"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATn%2F%2FRF4%3D","line":3142,"updated":"2013-11-12 01:30:59.000000000","message":"PEP257 - the first line of a docstring should be a stand alone paragraph. e.g.\n\n\"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\"","commit_id":"a313228c571e208107b0ea7e4dc2859f12695cc1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"1f750ddf8ce411559c024de7340271154a8ff54a","unresolved":false,"context_lines":[{"line_number":3139,"context_line":"                                action_name):"},{"line_number":3140,"context_line":"        \"\"\"Check whether update operation should update"},{"line_number":3141,"context_line":"        aggregate\u0027s availability zone."},{"line_number":3142,"context_line":"        \"\"\""},{"line_number":3143,"context_line":"        aggregate_az \u003d None"},{"line_number":3144,"context_line":"        update_flag \u003d True"},{"line_number":3145,"context_line":"        aggregate \u003d aggregate_obj.Aggregate.get_by_id(context, aggregate_id)"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATn%2F%2FQ4M%3D","line":3142,"in_reply_to":"AAAATn%2F%2FRF4%3D","updated":"2013-11-12 03:02:39.000000000","message":"Done","commit_id":"a313228c571e208107b0ea7e4dc2859f12695cc1"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"1aaf7756a4e498389c20356fcd5b2e14b92764b4","unresolved":false,"context_lines":[{"line_number":3168,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3169,"context_line":"                        \" availability zone name. If you want,\""},{"line_number":3170,"context_line":"                        \" please remove conflict hosts from other\""},{"line_number":3171,"context_line":"                        \" availability zones at first\") % host_az_info"},{"line_number":3172,"context_line":"                raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3173,"context_line":"                                                aggregate_id\u003daggregate_id,"},{"line_number":3174,"context_line":"                                                reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATn%2F%2FRFs%3D","line":3171,"updated":"2013-11-12 01:30:59.000000000","message":"This message is unclear. I think the constraint you are trying to communicate is:\n\n - all hosts in one aggregate must be in the same az\n - this update would violate that constraint\n?","commit_id":"a313228c571e208107b0ea7e4dc2859f12695cc1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"1f750ddf8ce411559c024de7340271154a8ff54a","unresolved":false,"context_lines":[{"line_number":3168,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3169,"context_line":"                        \" availability zone name. If you want,\""},{"line_number":3170,"context_line":"                        \" please remove conflict hosts from other\""},{"line_number":3171,"context_line":"                        \" availability zones at first\") % host_az_info"},{"line_number":3172,"context_line":"                raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3173,"context_line":"                                                aggregate_id\u003daggregate_id,"},{"line_number":3174,"context_line":"                                                reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":34,"id":"AAAATn%2F%2FQ4A%3D","line":3171,"in_reply_to":"AAAATn%2F%2FRFs%3D","updated":"2013-11-12 03:02:39.000000000","message":"your understanding is right. Thanks for your comments.\nBut I\u0027d like to keep current message, for it\u0027s result from other reviewers\u0027 previous comments.","commit_id":"a313228c571e208107b0ea7e4dc2859f12695cc1"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"c7d0e5c8af7fb3b39e28f1eedab28bfd26b559e1","unresolved":false,"context_lines":[{"line_number":3156,"context_line":"                                action_name):"},{"line_number":3157,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3158,"context_line":"        aggregate_az \u003d None"},{"line_number":3159,"context_line":"        update_flag \u003d True"},{"line_number":3160,"context_line":"        aggregate \u003d aggregate_obj.Aggregate.get_by_id(context, aggregate_id)"},{"line_number":3161,"context_line":"        aggregate_meta \u003d aggregate.metadata_get_by_key(context, aggregate_id,"},{"line_number":3162,"context_line":"                                                       \u0027availability_zone\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2FB%2Fk%3D","line":3159,"updated":"2013-11-15 12:37:38.000000000","message":"Looks like update_flag is unused now","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"46a284e98700a2b44acbe03f879295cd907931d3","unresolved":false,"context_lines":[{"line_number":3156,"context_line":"                                action_name):"},{"line_number":3157,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3158,"context_line":"        aggregate_az \u003d None"},{"line_number":3159,"context_line":"        update_flag \u003d True"},{"line_number":3160,"context_line":"        aggregate \u003d aggregate_obj.Aggregate.get_by_id(context, aggregate_id)"},{"line_number":3161,"context_line":"        aggregate_meta \u003d aggregate.metadata_get_by_key(context, aggregate_id,"},{"line_number":3162,"context_line":"                                                       \u0027availability_zone\u0027)"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2B8rM%3D","line":3159,"in_reply_to":"AAAATn%2F%2FB%2Fk%3D","updated":"2013-11-18 10:09:57.000000000","message":"Done","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"c7d0e5c8af7fb3b39e28f1eedab28bfd26b559e1","unresolved":false,"context_lines":[{"line_number":3161,"context_line":"        aggregate_meta \u003d aggregate.metadata_get_by_key(context, aggregate_id,"},{"line_number":3162,"context_line":"                                                       \u0027availability_zone\u0027)"},{"line_number":3163,"context_line":"        if aggregate_meta.get(\"availability_zone\"):"},{"line_number":3164,"context_line":"            aggregate_az \u003d aggregate_meta[\u0027availability_zone\u0027].pop()"},{"line_number":3165,"context_line":"        hosts \u003d aggregate.host_get_all(context, aggregate_id)"},{"line_number":3166,"context_line":"        index \u003d len(hosts)"},{"line_number":3167,"context_line":"        host_az_info \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2FB%2FI%3D","line":3164,"updated":"2013-11-15 12:37:38.000000000","message":"Don\u0027t underdstand why you need to pop this ?","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"46a284e98700a2b44acbe03f879295cd907931d3","unresolved":false,"context_lines":[{"line_number":3161,"context_line":"        aggregate_meta \u003d aggregate.metadata_get_by_key(context, aggregate_id,"},{"line_number":3162,"context_line":"                                                       \u0027availability_zone\u0027)"},{"line_number":3163,"context_line":"        if aggregate_meta.get(\"availability_zone\"):"},{"line_number":3164,"context_line":"            aggregate_az \u003d aggregate_meta[\u0027availability_zone\u0027].pop()"},{"line_number":3165,"context_line":"        hosts \u003d aggregate.host_get_all(context, aggregate_id)"},{"line_number":3166,"context_line":"        index \u003d len(hosts)"},{"line_number":3167,"context_line":"        host_az_info \u003d \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2B8rY%3D","line":3164,"in_reply_to":"AAAATn%2F%2FB%2FI%3D","updated":"2013-11-18 10:09:57.000000000","message":"please check Alex\u0027s and Joe\u0027s comments in patch 13: \nhttps://review.openstack.org/#/c/36786/13","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"c7d0e5c8af7fb3b39e28f1eedab28bfd26b559e1","unresolved":false,"context_lines":[{"line_number":3170,"context_line":"            host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3171,"context_line":"                                                    context, host)"},{"line_number":3172,"context_line":"            if host_az:"},{"line_number":3173,"context_line":"                if (host_az !\u003d metadata[\"availability_zone\"] and"},{"line_number":3174,"context_line":"                       host_az !\u003d CONF.default_availability_zone"},{"line_number":3175,"context_line":"                       and host_az !\u003d aggregate_az):"},{"line_number":3176,"context_line":"                    info \u003d host + \" in \" + host_az + \",\""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2FB9k%3D","line":3173,"updated":"2013-11-15 12:37:38.000000000","message":"I guess this is safe at the moment as the check that this present is made in the function that calls this one, but it feels kind of fragile (and the kind of thing that leads to KeyError when someone reuses this function later).  I\u0027d prefer to see this function start with:\n\n if not \"availability_zone\" in  metadata:\n    return\n\nand then this can be called unconditionally from update_aggregate","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"46a284e98700a2b44acbe03f879295cd907931d3","unresolved":false,"context_lines":[{"line_number":3170,"context_line":"            host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3171,"context_line":"                                                    context, host)"},{"line_number":3172,"context_line":"            if host_az:"},{"line_number":3173,"context_line":"                if (host_az !\u003d metadata[\"availability_zone\"] and"},{"line_number":3174,"context_line":"                       host_az !\u003d CONF.default_availability_zone"},{"line_number":3175,"context_line":"                       and host_az !\u003d aggregate_az):"},{"line_number":3176,"context_line":"                    info \u003d host + \" in \" + host_az + \",\""}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2B8q0%3D","line":3173,"in_reply_to":"AAAATn%2F%2FB9k%3D","updated":"2013-11-18 10:09:57.000000000","message":"although I have checked the key in update_aggregate and update_aggregate_metadata, I agree with your comments, I can move the checking into this function","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":4190,"name":"lifeless","email":"robertc@robertcollins.net","username":"lifeless"},"change_message_id":"4d926eac0c3f8cc535adcfad2223c36994ce2387","unresolved":false,"context_lines":[{"line_number":3182,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3183,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3184,"context_line":"                        \" availability zone name. If you want,\""},{"line_number":3185,"context_line":"                        \" please remove conflict hosts from other\""},{"line_number":3186,"context_line":"                        \" availability zones at first\") % host_az_info"},{"line_number":3187,"context_line":"                raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3188,"context_line":"                                                aggregate_id\u003daggregate_id,"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2FInI%3D","line":3185,"updated":"2013-11-14 00:24:50.000000000","message":"So the problem is that the message is unclear. We need to find a clear way to state the problem. What can I do to help you meet both my concern and those of other reviewers.","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"46a284e98700a2b44acbe03f879295cd907931d3","unresolved":false,"context_lines":[{"line_number":3182,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3183,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3184,"context_line":"                        \" availability zone name. If you want,\""},{"line_number":3185,"context_line":"                        \" please remove conflict hosts from other\""},{"line_number":3186,"context_line":"                        \" availability zones at first\") % host_az_info"},{"line_number":3187,"context_line":"                raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3188,"context_line":"                                                aggregate_id\u003daggregate_id,"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2B8qs%3D","line":3185,"in_reply_to":"AAAATn%2F%2FB9M%3D","updated":"2013-11-18 10:09:57.000000000","message":"Done, thanks for your suggestion","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"c7d0e5c8af7fb3b39e28f1eedab28bfd26b559e1","unresolved":false,"context_lines":[{"line_number":3182,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3183,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3184,"context_line":"                        \" availability zone name. If you want,\""},{"line_number":3185,"context_line":"                        \" please remove conflict hosts from other\""},{"line_number":3186,"context_line":"                        \" availability zones at first\") % host_az_info"},{"line_number":3187,"context_line":"                raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3188,"context_line":"                                                aggregate_id\u003daggregate_id,"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2FB9M%3D","line":3185,"in_reply_to":"AAAATn%2F%2FIUA%3D","updated":"2013-11-15 12:37:38.000000000","message":"How about:\n\n\"You can not make this aggregate an availability zone as it contains the following hosts which are already part of an existing availability zone: %s\"","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"e0ad6f361f50cce1f05a6eebcebe07ad9efb2a62","unresolved":false,"context_lines":[{"line_number":3182,"context_line":"                msg \u003d _(\"Aggregate contains conflict hosts, they\""},{"line_number":3183,"context_line":"                        \" are %s. You can\u0027t change aggregate\u0027s\""},{"line_number":3184,"context_line":"                        \" availability zone name. If you want,\""},{"line_number":3185,"context_line":"                        \" please remove conflict hosts from other\""},{"line_number":3186,"context_line":"                        \" availability zones at first\") % host_az_info"},{"line_number":3187,"context_line":"                raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3188,"context_line":"                                                aggregate_id\u003daggregate_id,"}],"source_content_type":"text/x-python","patch_set":35,"id":"AAAATn%2F%2FIUA%3D","line":3185,"in_reply_to":"AAAATn%2F%2FInI%3D","updated":"2013-11-14 02:53:54.000000000","message":"I can understand, but if you go through previous comments, you could find that I have modified this message according to other reviewers\u0027 comments times. Honestly, it\u0027s a little hard for me to satisfy everyone about english expression,  in order to reach a final agreement about how to organize the message, could you suggest a final version? Thank you!","commit_id":"3e36978f9a39cefdebb1c9b7436481c64878dedc"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"eba276b3237b921d42227db6be785457062775aa","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3172,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3173,"context_line":"                        info \u003d host + \" in \" + host_az + \",\""},{"line_number":3174,"context_line":"                        host_az_info \u003d host_az_info.join(info)"},{"line_number":3175,"context_line":"                if host_az_info \u003d\u003d \u0027\u0027 and index \u003d\u003d 0:"},{"line_number":3176,"context_line":"                    break"},{"line_number":3177,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAATn%2F%2Bla4%3D","line":3174,"updated":"2013-11-22 19:48:15.000000000","message":"I don\u0027t understand this.  host_az_info is a string, right?  And so is info.  If I run the following algorithm:\n\n    \u003e\u003e\u003e host_az \u003d {\u0027one\u0027: \u0027one_az\u0027, \u0027two\u0027: \u0027two_az\u0027, \u0027three\u0027: \u0027three_az\u0027}\n    \u003e\u003e\u003e host_az_info \u003d \u0027\u0027\n    \u003e\u003e\u003e for host in (\u0027one\u0027, \u0027two\u0027, \u0027three\u0027):\n    ...     info \u003d host + \" in \" + host_az[host] + \u0027,\u0027\n    ...     host_az_info \u003d host_az_info.join(info)\n    ...\n    \u003e\u003e\u003e host_az_info\n    \u0027ttone in one_az,wone in one_az,oone in one_az, one in one_az,…\u0027\n\nWhat is it you\u0027re trying to accomplish with this code?  What are you expecting host_az_info to contain at the end of the algorithm?","commit_id":"142957a3534b8cb3c7d65bc16586ff0085e97f40"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"e3d04d97fad4dc2cf0c8e696c860aa8b28a54fed","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3172,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3173,"context_line":"                        info \u003d host + \" in \" + host_az + \",\""},{"line_number":3174,"context_line":"                        host_az_info \u003d host_az_info.join(info)"},{"line_number":3175,"context_line":"                if host_az_info \u003d\u003d \u0027\u0027 and index \u003d\u003d 0:"},{"line_number":3176,"context_line":"                    break"},{"line_number":3177,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAATn%2F%2BVnU%3D","line":3174,"in_reply_to":"AAAATn%2F%2BYjM%3D","updated":"2013-11-27 08:12:07.000000000","message":"Kevin,\n\nThanks for your detail clarification.\n\nI think these two patch can guarantee one host will not be added into different AZs(https://review.openstack.org/#/c/36651/ and https://review.openstack.org/#/c/40424/), that\u0027s why I didn\u0027t generate one host in multi AZs information in the string. We can discuss whether I should adjust the code to support it later.\n\nBecause your comments remind me that there may be an extreme bad case, it\u0027s one aggregate contains a lot of hosts in different AZs, then, the return message may be very long, it\u0027s not friendly and not easy to read. So detail information may can\u0027t achieve our desired effect. This is another bug for current string generating effort.\n\nSo, whether I should add \"host in multi AZs\" information into the string or back to my original prompt message? I\u0027m look forward to know your opinion about it. Personally, I think prompting a brief and meaningful prompt message may be better choice.","commit_id":"142957a3534b8cb3c7d65bc16586ff0085e97f40"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"1d1daeeccd136066e4f80e9589dc9d715b2c5ae3","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3172,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3173,"context_line":"                        info \u003d host + \" in \" + host_az + \",\""},{"line_number":3174,"context_line":"                        host_az_info \u003d host_az_info.join(info)"},{"line_number":3175,"context_line":"                if host_az_info \u003d\u003d \u0027\u0027 and index \u003d\u003d 0:"},{"line_number":3176,"context_line":"                    break"},{"line_number":3177,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAATn%2F%2BYjM%3D","line":3174,"in_reply_to":"AAAATn%2F%2BcDM%3D","updated":"2013-11-26 17:00:36.000000000","message":"Actually, I don\u0027t care what the output string looks like, as long as it makes sense.  Right now, it doesn\u0027t; it is completely and utterly garbled.  Do you want me to paste the entire 3350 characters that my simple example above generated?  I only pasted the first few characters because it was so long and incomprehensible, because the code for generating it is incorrect.\n\nFTR, what I have been pointing out this whole time is that the code above is buggy, not that I don\u0027t like the string it\u0027s generating; I\u0027m sorry if I\u0027ve not communicated that properly…","commit_id":"142957a3534b8cb3c7d65bc16586ff0085e97f40"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"2381aaaac29d185a7323bd24690e5d0b00ea69d4","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3172,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3173,"context_line":"                        info \u003d host + \" in \" + host_az + \",\""},{"line_number":3174,"context_line":"                        host_az_info \u003d host_az_info.join(info)"},{"line_number":3175,"context_line":"                if host_az_info \u003d\u003d \u0027\u0027 and index \u003d\u003d 0:"},{"line_number":3176,"context_line":"                    break"},{"line_number":3177,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAATn%2F%2BcDM%3D","line":3174,"in_reply_to":"AAAATn%2F%2BdXA%3D","updated":"2013-11-26 03:05:49.000000000","message":"Ok, I know your opinion now, you want to display hosts in one\nAZ in group, like:\n\n(host1, host2, host4) are in AZ1, host3 in AZ2,......\n\nam I right?\n\nI can modify the code to implement this message format, but\nit means a more complicated code logic","commit_id":"142957a3534b8cb3c7d65bc16586ff0085e97f40"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"90b6407f78e94e18b9a996b9daa9d2987f5663c4","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3172,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3173,"context_line":"                        info \u003d host + \" in \" + host_az + \",\""},{"line_number":3174,"context_line":"                        host_az_info \u003d host_az_info.join(info)"},{"line_number":3175,"context_line":"                if host_az_info \u003d\u003d \u0027\u0027 and index \u003d\u003d 0:"},{"line_number":3176,"context_line":"                    break"},{"line_number":3177,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAATn%2F%2BdXA%3D","line":3174,"in_reply_to":"AAAATn%2F%2BhXM%3D","updated":"2013-11-25 20:32:29.000000000","message":"So, those comments are good, and I agree with them.  However, my comment above still isn\u0027t addressed: The code as written results in a highly garbled, unintelligible string, as far as I can see…","commit_id":"142957a3534b8cb3c7d65bc16586ff0085e97f40"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"d985c8d552a87825c3e6dfdb43be7df3d124bf57","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3172,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3173,"context_line":"                        info \u003d host + \" in \" + host_az + \",\""},{"line_number":3174,"context_line":"                        host_az_info \u003d host_az_info.join(info)"},{"line_number":3175,"context_line":"                if host_az_info \u003d\u003d \u0027\u0027 and index \u003d\u003d 0:"},{"line_number":3176,"context_line":"                    break"},{"line_number":3177,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":37,"id":"AAAATn%2F%2BhXM%3D","line":3174,"in_reply_to":"AAAATn%2F%2Bla4%3D","updated":"2013-11-25 07:00:52.000000000","message":"Hi Kevin,\n\n   As sample host_az_info string you mentioned, the string will\ndisplay all hosts which belong to other availability zones when \nusers try to set current aggregate as a new availability zone, \nthen, users can consider to adjust hosts availability zone \nallocation(eg: remove some hosts from other AZs, or remove \nsome hosts from current aggregate, and so on) to avoid multi-AZ \nand enable aggregate update.\n   There are some other reviewers posted comments to suggest \nto display enough information to assist users to manage AZs and \naggreages. Please check comments for this patch:\n\nhttps://review.openstack.org/#/c/36786/23","commit_id":"142957a3534b8cb3c7d65bc16586ff0085e97f40"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6f98fddaa3c248e20691150a7c24a996f4f3430","unresolved":false,"context_lines":[{"line_number":3160,"context_line":"        aggregates \u003d aggregate_obj.AggregateList.get_all(context)"},{"line_number":3161,"context_line":"        return [self._reformat_aggregate_info(agg) for agg in aggregates]"},{"line_number":3162,"context_line":""},{"line_number":3163,"context_line":"    def _check_az_for_aggregate(self, context, aggregate_id, metadata,"},{"line_number":3164,"context_line":"                                action_name):"},{"line_number":3165,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3166,"context_line":"        if \u0027availability_zone\u0027 in metadata:"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BHrk%3D","line":3163,"updated":"2013-12-02 11:41:41.000000000","message":"Can you please make use of objects here?","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"377daac166e3a7788854c447e3991f761f25ad40","unresolved":false,"context_lines":[{"line_number":3160,"context_line":"        aggregates \u003d aggregate_obj.AggregateList.get_all(context)"},{"line_number":3161,"context_line":"        return [self._reformat_aggregate_info(agg) for agg in aggregates]"},{"line_number":3162,"context_line":""},{"line_number":3163,"context_line":"    def _check_az_for_aggregate(self, context, aggregate_id, metadata,"},{"line_number":3164,"context_line":"                                action_name):"},{"line_number":3165,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3166,"context_line":"        if \u0027availability_zone\u0027 in metadata:"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BCOc%3D","line":3163,"in_reply_to":"AAAATn%2F%2BHrk%3D","updated":"2013-12-03 07:59:57.000000000","message":"yes, you are right, I have checked objects/aggregate.py, aggregate\u0027s metadata and hosts can be get by get_by_id function, so aggregate\u0027s metadata and hosts are available in aggregate object already, I don\u0027t need to re-do db query in this function, I\u0027ll remove all duplicate db querying. Thank you!","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6f98fddaa3c248e20691150a7c24a996f4f3430","unresolved":false,"context_lines":[{"line_number":3163,"context_line":"    def _check_az_for_aggregate(self, context, aggregate_id, metadata,"},{"line_number":3164,"context_line":"                                action_name):"},{"line_number":3165,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3166,"context_line":"        if \u0027availability_zone\u0027 in metadata:"},{"line_number":3167,"context_line":"            aggregate_az \u003d None"},{"line_number":3168,"context_line":"            aggregate \u003d aggregate_obj.Aggregate.get_by_id(context,"},{"line_number":3169,"context_line":"                                                         aggregate_id)"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BHuI%3D","line":3166,"updated":"2013-12-02 11:41:41.000000000","message":"why not:\nmetadata.get(\u0027availability_zone\u0027) - then check if it is not None","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"377daac166e3a7788854c447e3991f761f25ad40","unresolved":false,"context_lines":[{"line_number":3163,"context_line":"    def _check_az_for_aggregate(self, context, aggregate_id, metadata,"},{"line_number":3164,"context_line":"                                action_name):"},{"line_number":3165,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3166,"context_line":"        if \u0027availability_zone\u0027 in metadata:"},{"line_number":3167,"context_line":"            aggregate_az \u003d None"},{"line_number":3168,"context_line":"            aggregate \u003d aggregate_obj.Aggregate.get_by_id(context,"},{"line_number":3169,"context_line":"                                                         aggregate_id)"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BCOY%3D","line":3166,"in_reply_to":"AAAATn%2F%2BHuI%3D","updated":"2013-12-03 07:59:57.000000000","message":"\u0027availability_zone\u0027 in metadata can avoid Null key error","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6f98fddaa3c248e20691150a7c24a996f4f3430","unresolved":false,"context_lines":[{"line_number":3164,"context_line":"                                action_name):"},{"line_number":3165,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3166,"context_line":"        if \u0027availability_zone\u0027 in metadata:"},{"line_number":3167,"context_line":"            aggregate_az \u003d None"},{"line_number":3168,"context_line":"            aggregate \u003d aggregate_obj.Aggregate.get_by_id(context,"},{"line_number":3169,"context_line":"                                                         aggregate_id)"},{"line_number":3170,"context_line":"            aggregate_meta \u003d aggregate.metadata_get_by_key(context,"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BHts%3D","line":3167,"updated":"2013-12-02 11:41:41.000000000","message":"i do not understand why we need to set this as None - in the if above you check that it exists.","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"377daac166e3a7788854c447e3991f761f25ad40","unresolved":false,"context_lines":[{"line_number":3164,"context_line":"                                action_name):"},{"line_number":3165,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3166,"context_line":"        if \u0027availability_zone\u0027 in metadata:"},{"line_number":3167,"context_line":"            aggregate_az \u003d None"},{"line_number":3168,"context_line":"            aggregate \u003d aggregate_obj.Aggregate.get_by_id(context,"},{"line_number":3169,"context_line":"                                                         aggregate_id)"},{"line_number":3170,"context_line":"            aggregate_meta \u003d aggregate.metadata_get_by_key(context,"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BCOM%3D","line":3167,"in_reply_to":"AAAATn%2F%2BHts%3D","updated":"2013-12-03 07:59:57.000000000","message":"I\u0027ll remove this unnecessary code line","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"e5ab4c031caeeef71f94a19b0d8ee01c954ef56a","unresolved":false,"context_lines":[{"line_number":3175,"context_line":"            hosts \u003d aggregate.host_get_all(context, aggregate_id)"},{"line_number":3176,"context_line":"            index \u003d len(hosts)"},{"line_number":3177,"context_line":"            hostNum \u003d 0"},{"line_number":3178,"context_line":"            for host in hosts:"},{"line_number":3179,"context_line":"                index \u003d index - 1"},{"line_number":3180,"context_line":"                host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3181,"context_line":"                                                    context, host)"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BH8M%3D","line":3178,"updated":"2013-12-02 10:47:10.000000000","message":"Feels like\n\n    for index,host in enumerate(hosts):\n\nwould be more elegant","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"e5ab4c031caeeef71f94a19b0d8ee01c954ef56a","unresolved":false,"context_lines":[{"line_number":3176,"context_line":"            index \u003d len(hosts)"},{"line_number":3177,"context_line":"            hostNum \u003d 0"},{"line_number":3178,"context_line":"            for host in hosts:"},{"line_number":3179,"context_line":"                index \u003d index - 1"},{"line_number":3180,"context_line":"                host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3181,"context_line":"                                                    context, host)"},{"line_number":3182,"context_line":"                if host_az:"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BH9U%3D","line":3179,"updated":"2013-12-02 10:47:10.000000000","message":"You could use \"index -\u003d 1\"  instead here","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"377daac166e3a7788854c447e3991f761f25ad40","unresolved":false,"context_lines":[{"line_number":3176,"context_line":"            index \u003d len(hosts)"},{"line_number":3177,"context_line":"            hostNum \u003d 0"},{"line_number":3178,"context_line":"            for host in hosts:"},{"line_number":3179,"context_line":"                index \u003d index - 1"},{"line_number":3180,"context_line":"                host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3181,"context_line":"                                                    context, host)"},{"line_number":3182,"context_line":"                if host_az:"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BCOE%3D","line":3179,"in_reply_to":"AAAATn%2F%2BH9U%3D","updated":"2013-12-03 07:59:57.000000000","message":"Done","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"e5ab4c031caeeef71f94a19b0d8ee01c954ef56a","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                    if (host_az !\u003d metadata[\"availability_zone\"] and"},{"line_number":3184,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3185,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3186,"context_line":"                        hostNum \u003d hostNum + 1"},{"line_number":3187,"context_line":"                if hostNum \u003d\u003d 0 and index \u003d\u003d 0:"},{"line_number":3188,"context_line":"                    break"},{"line_number":3189,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BH9Q%3D","line":3186,"updated":"2013-12-02 10:47:10.000000000","message":"You could use \"hostNum +\u003d 1\" instead here","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"377daac166e3a7788854c447e3991f761f25ad40","unresolved":false,"context_lines":[{"line_number":3183,"context_line":"                    if (host_az !\u003d metadata[\"availability_zone\"] and"},{"line_number":3184,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3185,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3186,"context_line":"                        hostNum \u003d hostNum + 1"},{"line_number":3187,"context_line":"                if hostNum \u003d\u003d 0 and index \u003d\u003d 0:"},{"line_number":3188,"context_line":"                    break"},{"line_number":3189,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BCN8%3D","line":3186,"in_reply_to":"AAAATn%2F%2BH9Q%3D","updated":"2013-12-03 07:59:57.000000000","message":"Done","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"50b3114c47d5625e183a85900fd6459ade327846","unresolved":false,"context_lines":[{"line_number":3168,"context_line":"            aggregate_az \u003d aggregate_meta.get(\"availability_zone\")"},{"line_number":3169,"context_line":"            hosts \u003d aggregate.hosts"},{"line_number":3170,"context_line":"            index \u003d len(hosts)"},{"line_number":3171,"context_line":"            hostNum \u003d 0"},{"line_number":3172,"context_line":"            for host in hosts:"},{"line_number":3173,"context_line":"                index -\u003d 1"},{"line_number":3174,"context_line":"                host_az \u003d availability_zones.get_host_availability_zone("}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATn%2F9%2Fqc%3D","line":3171,"updated":"2013-12-03 17:22:54.000000000","message":"femtonit: I prefer snake_case to camelCase; I would prefer this variable be named \"host_num\".  That would also be consistent with the other variables here.","commit_id":"22e48e57a13a6e3dfaaf0282c99d2bf763010895"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"50b3114c47d5625e183a85900fd6459ade327846","unresolved":false,"context_lines":[{"line_number":3178,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3179,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3180,"context_line":"                        hostNum +\u003d 1"},{"line_number":3181,"context_line":"                if hostNum \u003d\u003d 0 and index \u003d\u003d 0:"},{"line_number":3182,"context_line":"                    break"},{"line_number":3183,"context_line":"            else:"},{"line_number":3184,"context_line":"                if len(hosts) !\u003d 0:"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATn%2F9%2Fp4%3D","line":3181,"updated":"2013-12-03 17:22:54.000000000","message":"Why are you checking that hostNum \u003d\u003d 0 here?  Wouldn\u0027t this cause a premature bail-out?  And what is the purpose of index?  It only hits zero when you\u0027ve exhausted the hosts list, making the information it keeps redundant.","commit_id":"22e48e57a13a6e3dfaaf0282c99d2bf763010895"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"50b3114c47d5625e183a85900fd6459ade327846","unresolved":false,"context_lines":[{"line_number":3184,"context_line":"                if len(hosts) !\u003d 0:"},{"line_number":3185,"context_line":"                    msg \u003d _(\"You can not make this aggregate an availability\""},{"line_number":3186,"context_line":"                            \" zone as it contains %d hosts which are already\""},{"line_number":3187,"context_line":"                            \" part of existing availability zone.\") % hostNum"},{"line_number":3188,"context_line":"                    raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3189,"context_line":"                                                aggregate_id\u003daggregate.id,"},{"line_number":3190,"context_line":"                                                reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATn%2F9%2Fpc%3D","line":3187,"updated":"2013-12-03 17:22:54.000000000","message":"s/of existing/of an existing/","commit_id":"22e48e57a13a6e3dfaaf0282c99d2bf763010895"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"50b3114c47d5625e183a85900fd6459ade327846","unresolved":false,"context_lines":[{"line_number":3187,"context_line":"                            \" part of existing availability zone.\") % hostNum"},{"line_number":3188,"context_line":"                    raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3189,"context_line":"                                                aggregate_id\u003daggregate.id,"},{"line_number":3190,"context_line":"                                                reason\u003dmsg)"},{"line_number":3191,"context_line":""},{"line_number":3192,"context_line":"    @wrap_exception()"},{"line_number":3193,"context_line":"    def update_aggregate(self, context, aggregate_id, values):"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATn%2F9%2Fko%3D","line":3190,"updated":"2013-12-03 17:22:54.000000000","message":"So, I\u0027m not all that familiar with aggregates and availability zones, but I think I get the logic here; you\u0027re trying to determine whether any host in a given aggregate is already in an incompatible availability zone, correct?  Is the number of incompatible hosts actually necessary?  As far as I can see, that just factors into the exception message, and I\u0027d be happy with a simpler message like \"This aggregate contains hosts in an existing availability zone\", and it would simplify your logic.  If we can do that, the for loop becomes:\n\n    for host in hosts:\n        host_az \u003d availability_zones.get_host_availability_zone(…)\n        if (host_az and host_az !\u003d metadata[\u0027availability_zone\u0027] and\n                host_az !\u003d CONF.default_availability_zone and\n                host_az !\u003d aggregate_az):\n            raise exception.InvalidAggregateAction(…)\n\nIf we really must report the number, then you keep \"host_num \u003d 0\" before the loop, have the \u0027if\u0027 clause do \"host_num +\u003d 0\" instead of raising, then at the end of the loop, use \"if host_num \u003e 0: raise …\"","commit_id":"22e48e57a13a6e3dfaaf0282c99d2bf763010895"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"a71da81da5a29fe3d96f62575968f697e9ffa029","unresolved":false,"context_lines":[{"line_number":3187,"context_line":"                            \" part of existing availability zone.\") % hostNum"},{"line_number":3188,"context_line":"                    raise exception.InvalidAggregateAction(action\u003daction_name,"},{"line_number":3189,"context_line":"                                                aggregate_id\u003daggregate.id,"},{"line_number":3190,"context_line":"                                                reason\u003dmsg)"},{"line_number":3191,"context_line":""},{"line_number":3192,"context_line":"    @wrap_exception()"},{"line_number":3193,"context_line":"    def update_aggregate(self, context, aggregate_id, values):"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAATn%2F98%2Bc%3D","line":3190,"in_reply_to":"AAAATn%2F9%2Fko%3D","updated":"2013-12-04 03:02:01.000000000","message":"Kevin,\n\n    Your suggestion about what message should be shown to \nusers is as same as simple message in my original version, I \nwrote codes to exhaust the hosts list according to other \nreviewers\u0027 comments, for providing detail conflict hosts \ninformation to users, then users can remove conflict hosts from \nthe aggregate before set the aggregate as a new AZ. That\u0027s why I \nchanged my original version.\n     As we discussed, detail information may be helpful but it\u0027s \nuseless in some extreme bad case(one aggregate contains a lot \nof hosts which are in other AZs, messages string will be very \nlong). I asked for your opinion about whether a simple message \nis good enough in patch #37. but I didn\u0027t receive your reply, so I \ndid a balance between detail message and right codes, I use \nhost number to replace long string.\n     I know your opinion now, I agree with you that simple \nmessage is good enough, because if there are a lot of hosts \nwhich are in other AZs already, I don\u0027t think set aggregate to a \nnew AZ is a reasonable and necessary operation, the users just \nneed to know that he/she shouldn\u0027t do the operation against the \ncurrent aggregate to avoid mess. And it\u0027s a more clean codes","commit_id":"22e48e57a13a6e3dfaaf0282c99d2bf763010895"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"7cf5f0898e8accfe3d98bc8f709959d4af8df820","unresolved":false,"context_lines":[{"line_number":3159,"context_line":"        aggregates \u003d aggregate_obj.AggregateList.get_all(context)"},{"line_number":3160,"context_line":"        return [self._reformat_aggregate_info(agg) for agg in aggregates]"},{"line_number":3161,"context_line":""},{"line_number":3162,"context_line":"    def _check_az_for_aggregate(self, context, aggregate, metadata,"},{"line_number":3163,"context_line":"                                action_name):"},{"line_number":3164,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3165,"context_line":"        if \u0027availability_zone\u0027 in metadata:"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9Ej8%3D","line":3162,"updated":"2013-12-17 03:12:43.000000000","message":"this name is really vague, and doesn\u0027t really make sense.  this should be something like:  is_safe_to_update_az()\n\nSo I think this logic can be simplified, if we assume no two aggregates should have the same availability_zone (something we want to assume).","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"e552e9a87d63524c3648fc8f3bfe6f35d02f691c","unresolved":false,"context_lines":[{"line_number":3159,"context_line":"        aggregates \u003d aggregate_obj.AggregateList.get_all(context)"},{"line_number":3160,"context_line":"        return [self._reformat_aggregate_info(agg) for agg in aggregates]"},{"line_number":3161,"context_line":""},{"line_number":3162,"context_line":"    def _check_az_for_aggregate(self, context, aggregate, metadata,"},{"line_number":3163,"context_line":"                                action_name):"},{"line_number":3164,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3165,"context_line":"        if \u0027availability_zone\u0027 in metadata:"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9DFU%3D","line":3162,"in_reply_to":"AAAATn%2F9Ej8%3D","updated":"2013-12-17 10:11:19.000000000","message":"Done","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"7cf5f0898e8accfe3d98bc8f709959d4af8df820","unresolved":false,"context_lines":[{"line_number":3164,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3165,"context_line":"        if \u0027availability_zone\u0027 in metadata:"},{"line_number":3166,"context_line":"            aggregate_meta \u003d aggregate.metadata"},{"line_number":3167,"context_line":"            aggregate_az \u003d aggregate_meta.get(\"availability_zone\")"},{"line_number":3168,"context_line":"            hosts \u003d aggregate.hosts"},{"line_number":3169,"context_line":"            for host in hosts:"},{"line_number":3170,"context_line":"                host_az \u003d availability_zones.get_host_availability_zone("}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9EmM%3D","line":3167,"updated":"2013-12-17 03:12:43.000000000","message":"these two lines can be joined, no need for aggregate_meta","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"e552e9a87d63524c3648fc8f3bfe6f35d02f691c","unresolved":false,"context_lines":[{"line_number":3164,"context_line":"        \"\"\"Determine if updates alter an aggregate\u0027s availability zone.\"\"\""},{"line_number":3165,"context_line":"        if \u0027availability_zone\u0027 in metadata:"},{"line_number":3166,"context_line":"            aggregate_meta \u003d aggregate.metadata"},{"line_number":3167,"context_line":"            aggregate_az \u003d aggregate_meta.get(\"availability_zone\")"},{"line_number":3168,"context_line":"            hosts \u003d aggregate.hosts"},{"line_number":3169,"context_line":"            for host in hosts:"},{"line_number":3170,"context_line":"                host_az \u003d availability_zones.get_host_availability_zone("}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9DFQ%3D","line":3167,"in_reply_to":"AAAATn%2F9EmM%3D","updated":"2013-12-17 10:11:19.000000000","message":"Done","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a39c9eca339b0bfbdc2dbeb920560856c739e700","unresolved":false,"context_lines":[{"line_number":3165,"context_line":"        if \u0027availability_zone\u0027 in metadata:"},{"line_number":3166,"context_line":"            aggregate_meta \u003d aggregate.metadata"},{"line_number":3167,"context_line":"            aggregate_az \u003d aggregate_meta.get(\"availability_zone\")"},{"line_number":3168,"context_line":"            hosts \u003d aggregate.hosts"},{"line_number":3169,"context_line":"            for host in hosts:"},{"line_number":3170,"context_line":"                host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3171,"context_line":"                                                    context, host)"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F958k%3D","line":3168,"updated":"2013-12-04 16:57:42.000000000","message":"femtonit: You only use \"hosts\" once, in the \u0027for\u0027 loop, where there\u0027s plenty of space to use the full \"aggregate.hosts\".  You could eliminate the variable without any loss in readability.","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"e552e9a87d63524c3648fc8f3bfe6f35d02f691c","unresolved":false,"context_lines":[{"line_number":3165,"context_line":"        if \u0027availability_zone\u0027 in metadata:"},{"line_number":3166,"context_line":"            aggregate_meta \u003d aggregate.metadata"},{"line_number":3167,"context_line":"            aggregate_az \u003d aggregate_meta.get(\"availability_zone\")"},{"line_number":3168,"context_line":"            hosts \u003d aggregate.hosts"},{"line_number":3169,"context_line":"            for host in hosts:"},{"line_number":3170,"context_line":"                host_az \u003d availability_zones.get_host_availability_zone("},{"line_number":3171,"context_line":"                                                    context, host)"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9DFM%3D","line":3168,"in_reply_to":"AAAATn%2F958k%3D","updated":"2013-12-17 10:11:19.000000000","message":"Done","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a39c9eca339b0bfbdc2dbeb920560856c739e700","unresolved":false,"context_lines":[{"line_number":3172,"context_line":"                if host_az:"},{"line_number":3173,"context_line":"                    if (host_az !\u003d metadata[\"availability_zone\"] and"},{"line_number":3174,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3175,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3176,"context_line":"                        msg \u003d _(\"This aggregate contains hosts in\""},{"line_number":3177,"context_line":"                                \" existing availability zone\")"},{"line_number":3178,"context_line":"                        raise exception.InvalidAggregateAction("}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F958Q%3D","line":3175,"updated":"2013-12-04 16:57:42.000000000","message":"femtonit: you can combine the two if conditions without any further loss of readability.  That would allow you to reduce the indentation depth.","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"e552e9a87d63524c3648fc8f3bfe6f35d02f691c","unresolved":false,"context_lines":[{"line_number":3172,"context_line":"                if host_az:"},{"line_number":3173,"context_line":"                    if (host_az !\u003d metadata[\"availability_zone\"] and"},{"line_number":3174,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3175,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3176,"context_line":"                        msg \u003d _(\"This aggregate contains hosts in\""},{"line_number":3177,"context_line":"                                \" existing availability zone\")"},{"line_number":3178,"context_line":"                        raise exception.InvalidAggregateAction("}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9DFI%3D","line":3175,"in_reply_to":"AAAATn%2F958Q%3D","updated":"2013-12-17 10:11:19.000000000","message":"Done","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"a39c9eca339b0bfbdc2dbeb920560856c739e700","unresolved":false,"context_lines":[{"line_number":3174,"context_line":"                           host_az !\u003d CONF.default_availability_zone"},{"line_number":3175,"context_line":"                           and host_az !\u003d aggregate_az):"},{"line_number":3176,"context_line":"                        msg \u003d _(\"This aggregate contains hosts in\""},{"line_number":3177,"context_line":"                                \" existing availability zone\")"},{"line_number":3178,"context_line":"                        raise exception.InvalidAggregateAction("},{"line_number":3179,"context_line":"                                            action\u003daction_name,"},{"line_number":3180,"context_line":"                                            aggregate_id\u003daggregate.id,"}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F958E%3D","line":3177,"updated":"2013-12-04 16:57:42.000000000","message":"femtonit: s/existing/another/, perhaps","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"7cf5f0898e8accfe3d98bc8f709959d4af8df820","unresolved":false,"context_lines":[{"line_number":3232,"context_line":"        # have a single availability zone set at one time."},{"line_number":3233,"context_line":"        for aggregate_az in aggregate_meta[\"availability_zone\"]:"},{"line_number":3234,"context_line":"            # NOTE(mtreinish) Ensure that the aggregate_az is not none"},{"line_number":3235,"context_line":"            # if it is none then that is just a regular aggregate and"},{"line_number":3236,"context_line":"            # it is valid to have a host in multiple aggregates."},{"line_number":3237,"context_line":"            if aggregate_az and aggregate_az !\u003d host_az:"},{"line_number":3238,"context_line":"                msg \u003d _(\"Host already in availability zone \""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9ElA%3D","line":3235,"updated":"2013-12-17 03:12:43.000000000","message":"after this patch lands, this won\u0027t be true correct?","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"e552e9a87d63524c3648fc8f3bfe6f35d02f691c","unresolved":false,"context_lines":[{"line_number":3232,"context_line":"        # have a single availability zone set at one time."},{"line_number":3233,"context_line":"        for aggregate_az in aggregate_meta[\"availability_zone\"]:"},{"line_number":3234,"context_line":"            # NOTE(mtreinish) Ensure that the aggregate_az is not none"},{"line_number":3235,"context_line":"            # if it is none then that is just a regular aggregate and"},{"line_number":3236,"context_line":"            # it is valid to have a host in multiple aggregates."},{"line_number":3237,"context_line":"            if aggregate_az and aggregate_az !\u003d host_az:"},{"line_number":3238,"context_line":"                msg \u003d _(\"Host already in availability zone \""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAATn%2F9DFE%3D","line":3235,"in_reply_to":"AAAATn%2F9ElA%3D","updated":"2013-12-17 10:11:19.000000000","message":"Done","commit_id":"3b0356a32c5fd72c507be052eaaba8157c6080d3"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"3cb7654511331b61add7f85f7cfacca2c2b19c97","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"                   and host_az !\u003d CONF.default_availability_zone and"},{"line_number":3172,"context_line":"                   host_az !\u003d aggregate_az):"},{"line_number":3173,"context_line":"                    msg \u003d _(\"This aggregate contains hosts in\""},{"line_number":3174,"context_line":"                            \" existing availability zone\")"},{"line_number":3175,"context_line":"                    raise exception.InvalidAggregateAction("},{"line_number":3176,"context_line":"                                            action\u003daction_name,"},{"line_number":3177,"context_line":"                                            aggregate_id\u003daggregate.id,"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2FtOg%3D","line":3174,"updated":"2014-01-09 11:37:42.000000000","message":"Minot nit - but should be \" an existing\"","commit_id":"01d3fbd816a4c25fef0880e074dc7fc4f93e6490"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"874bac02716ec187f73c5d636cf921b1514a9fe9","unresolved":false,"context_lines":[{"line_number":3171,"context_line":"                   and host_az !\u003d CONF.default_availability_zone and"},{"line_number":3172,"context_line":"                   host_az !\u003d aggregate_az):"},{"line_number":3173,"context_line":"                    msg \u003d _(\"This aggregate contains hosts in\""},{"line_number":3174,"context_line":"                            \" existing availability zone\")"},{"line_number":3175,"context_line":"                    raise exception.InvalidAggregateAction("},{"line_number":3176,"context_line":"                                            action\u003daction_name,"},{"line_number":3177,"context_line":"                                            aggregate_id\u003daggregate.id,"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2B9yo%3D","line":3174,"in_reply_to":"AAAAUH%2F%2FtOg%3D","updated":"2014-01-20 10:25:49.000000000","message":"Done","commit_id":"01d3fbd816a4c25fef0880e074dc7fc4f93e6490"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"3cb7654511331b61add7f85f7cfacca2c2b19c97","unresolved":false,"context_lines":[{"line_number":3229,"context_line":"        # have a single availability zone set at one time."},{"line_number":3230,"context_line":"        for aggregate_az in aggregate_meta[\"availability_zone\"]:"},{"line_number":3231,"context_line":"            # NOTE(mtreinish) Ensure that the aggregate_az is not none"},{"line_number":3232,"context_line":"            # if it is none then that is just a regular aggregate"},{"line_number":3233,"context_line":"            if aggregate_az and aggregate_az !\u003d host_az:"},{"line_number":3234,"context_line":"                msg \u003d _(\"Host already in availability zone \""},{"line_number":3235,"context_line":"                        \"%s\") % host_az"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2FtOk%3D","line":3232,"updated":"2014-01-09 11:37:42.000000000","message":"I don\u0027t really understand why the rest of this comment has been deleted - as it is still true that a host can be more than one aggregate providing only one of those aggregates is an AZ","commit_id":"01d3fbd816a4c25fef0880e074dc7fc4f93e6490"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"874bac02716ec187f73c5d636cf921b1514a9fe9","unresolved":false,"context_lines":[{"line_number":3229,"context_line":"        # have a single availability zone set at one time."},{"line_number":3230,"context_line":"        for aggregate_az in aggregate_meta[\"availability_zone\"]:"},{"line_number":3231,"context_line":"            # NOTE(mtreinish) Ensure that the aggregate_az is not none"},{"line_number":3232,"context_line":"            # if it is none then that is just a regular aggregate"},{"line_number":3233,"context_line":"            if aggregate_az and aggregate_az !\u003d host_az:"},{"line_number":3234,"context_line":"                msg \u003d _(\"Host already in availability zone \""},{"line_number":3235,"context_line":"                        \"%s\") % host_az"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2B9yk%3D","line":3232,"in_reply_to":"AAAAUH%2F%2FtOk%3D","updated":"2014-01-20 10:25:49.000000000","message":"Done","commit_id":"01d3fbd816a4c25fef0880e074dc7fc4f93e6490"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"2bfea9fda6f356ae84c9b0f6e47893d25181daa4","unresolved":false,"context_lines":[{"line_number":3229,"context_line":"        # have a single availability zone set at one time."},{"line_number":3230,"context_line":"        for aggregate_az in aggregate_meta[\"availability_zone\"]:"},{"line_number":3231,"context_line":"            # NOTE(mtreinish) Ensure that the aggregate_az is not none"},{"line_number":3232,"context_line":"            # if it is none then that is just a regular aggregate"},{"line_number":3233,"context_line":"            if aggregate_az and aggregate_az !\u003d host_az:"},{"line_number":3234,"context_line":"                msg \u003d _(\"Host already in availability zone \""},{"line_number":3235,"context_line":"                        \"%s\") % host_az"}],"source_content_type":"text/x-python","patch_set":41,"id":"AAAAUH%2F%2FH7c%3D","line":3232,"in_reply_to":"AAAAUH%2F%2FtOk%3D","updated":"2014-01-17 07:36:42.000000000","message":"I deleted the line because it may lead to confusion since the loop is used to checking az aggregates, comments for reason to do the checking is enough, I think it\u0027s better to add deleted statement into openstack doc about aggregate. Thank you!","commit_id":"01d3fbd816a4c25fef0880e074dc7fc4f93e6490"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"c0694473f422e2509d809120a553b5c92dafb7bd","unresolved":false,"context_lines":[{"line_number":3208,"context_line":"        if \u0027name\u0027 in values:"},{"line_number":3209,"context_line":"            aggregate.name \u003d values.pop(\u0027name\u0027)"},{"line_number":3210,"context_line":"        self.is_safe_to_update_az(context, aggregate,"},{"line_number":3211,"context_line":"                                    values, \"update aggregate\")"},{"line_number":3212,"context_line":"        if values:"},{"line_number":3213,"context_line":"            aggregate.metadata \u003d values"},{"line_number":3214,"context_line":"        aggregate.save()"}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAUX%2F%2Fum4%3D","line":3211,"updated":"2014-02-11 10:45:35.000000000","message":"Shouldn\u0027t the action names be translated?\n\nI\u0027ve filed bug #1278736 for this","commit_id":"734d9a70f81891c793e20aa23ea0ec0e5fda12b7"}],"nova/objects/aggregate.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6f98fddaa3c248e20691150a7c24a996f4f3430","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        return self.metadata.get(\u0027availability_zone\u0027, None)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def metadata_get_by_key(self, context, aggregate_id, key):"},{"line_number":147,"context_line":"        return db.aggregate_metadata_get_by_metadata_key(context,"},{"line_number":148,"context_line":"                                               aggregate_id, key)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def host_get_all(self, context, aggregate_id):"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BHr4%3D","line":147,"updated":"2013-12-02 11:41:41.000000000","message":"should this not just return the object metadata key? why do we need to reread the database here?","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"377daac166e3a7788854c447e3991f761f25ad40","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        return self.metadata.get(\u0027availability_zone\u0027, None)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def metadata_get_by_key(self, context, aggregate_id, key):"},{"line_number":147,"context_line":"        return db.aggregate_metadata_get_by_metadata_key(context,"},{"line_number":148,"context_line":"                                               aggregate_id, key)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def host_get_all(self, context, aggregate_id):"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BCNs%3D","line":147,"in_reply_to":"AAAATn%2F%2BHr4%3D","updated":"2013-12-03 07:59:57.000000000","message":"For get_by_id function returns metadata, I\u0027ll abandon this unnecessary function","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"d6f98fddaa3c248e20691150a7c24a996f4f3430","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                               aggregate_id, key)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def host_get_all(self, context, aggregate_id):"},{"line_number":151,"context_line":"        return db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class AggregateList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BHsI%3D","line":151,"updated":"2013-12-02 11:41:41.000000000","message":"why not self.hosts? I do not understand why the database needs to be reread here. Can you please clarify.","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"377daac166e3a7788854c447e3991f761f25ad40","unresolved":false,"context_lines":[{"line_number":148,"context_line":"                                               aggregate_id, key)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    def host_get_all(self, context, aggregate_id):"},{"line_number":151,"context_line":"        return db.aggregate_host_get_all(context, aggregate_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class AggregateList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":38,"id":"AAAATn%2F%2BCNk%3D","line":151,"in_reply_to":"AAAATn%2F%2BHsI%3D","updated":"2013-12-03 07:59:57.000000000","message":"For get_by_id function returns hosts, I\u0027ll abandon this unnecessary function","commit_id":"9419f06a8bcce551ba31e7046e242d2862380ebc"}],"nova/tests/compute/test_compute.py":[{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"b66fe17c6cd434b3a0e54798a3e07a5a67e2c957","unresolved":false,"context_lines":[{"line_number":8365,"context_line":"        #Ensure metadata with new availability zone can\u0027t be updated,"},{"line_number":8366,"context_line":"        #when aggregate has hosts alreday"},{"line_number":8367,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"},{"line_number":8368,"context_line":"        values \u003d _create_service_entries(self.context)"},{"line_number":8369,"context_line":"        fake_zone \u003d values.keys()[0]"},{"line_number":8370,"context_line":"        fake_host \u003d values[fake_zone][0]"},{"line_number":8371,"context_line":"        aggr \u003d self.api.create_aggregate(self.context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2F7a0%3D","line":8368,"updated":"2013-07-18 23:15:42.000000000","message":"Same here","commit_id":"6adfbb78b79f233931d65c8b1c686b5c335398b1"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"c820c4e44a5236d48fb0d325049387ef053b3372","unresolved":false,"context_lines":[{"line_number":8365,"context_line":"        #Ensure metadata with new availability zone can\u0027t be updated,"},{"line_number":8366,"context_line":"        #when aggregate has hosts alreday"},{"line_number":8367,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"},{"line_number":8368,"context_line":"        values \u003d _create_service_entries(self.context)"},{"line_number":8369,"context_line":"        fake_zone \u003d values.keys()[0]"},{"line_number":8370,"context_line":"        fake_host \u003d values[fake_zone][0]"},{"line_number":8371,"context_line":"        aggr \u003d self.api.create_aggregate(self.context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAQn%2F%2F67o%3D","line":8368,"in_reply_to":"AAAAQn%2F%2F7a0%3D","updated":"2013-07-19 05:19:10.000000000","message":"Joe,\n\nI don\u0027t understand what you mean, could you give more detail comments? Thank you!","commit_id":"6adfbb78b79f233931d65c8b1c686b5c335398b1"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"de8a51a26986cffe702ef97d8288fb7e9a98466e","unresolved":false,"context_lines":[{"line_number":8379,"context_line":"                        matchers.DictMatches({\u0027availability_zone\u0027: \u0027fake_zone\u0027,"},{"line_number":8380,"context_line":"                        \u0027foo_key2\u0027: \u0027foo_value2\u0027}))"},{"line_number":8381,"context_line":""},{"line_number":8382,"context_line":"    def test_update_aggregate_metadata_az(self):"},{"line_number":8383,"context_line":"        #Ensure metadata with new availability zone can\u0027t be updated,"},{"line_number":8384,"context_line":"        #when aggregate has hosts alreday"},{"line_number":8385,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FynE%3D","line":8382,"updated":"2013-07-23 07:03:46.000000000","message":"This can be DRYer","commit_id":"84316d40191afd193640af2dd22f4fff38ebb74a"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"d6bb274c4080e212578f9d724825a28bb5d5649c","unresolved":false,"context_lines":[{"line_number":8379,"context_line":"                        matchers.DictMatches({\u0027availability_zone\u0027: \u0027fake_zone\u0027,"},{"line_number":8380,"context_line":"                        \u0027foo_key2\u0027: \u0027foo_value2\u0027}))"},{"line_number":8381,"context_line":""},{"line_number":8382,"context_line":"    def test_update_aggregate_metadata_az(self):"},{"line_number":8383,"context_line":"        #Ensure metadata with new availability zone can\u0027t be updated,"},{"line_number":8384,"context_line":"        #when aggregate has hosts alreday"},{"line_number":8385,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FyTI%3D","line":8382,"in_reply_to":"AAAAQn%2F%2FynE%3D","updated":"2013-07-23 08:54:51.000000000","message":"I\u0027d like to correct my previous reply, I actually mean that I should\nmodify test_update_aggregate_az using \nself.api.update_aggregate to replace\n self.api.update_aggregate_metadata","commit_id":"84316d40191afd193640af2dd22f4fff38ebb74a"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"df0640ed15264a514420d08a368aa824fd5680a9","unresolved":false,"context_lines":[{"line_number":8379,"context_line":"                        matchers.DictMatches({\u0027availability_zone\u0027: \u0027fake_zone\u0027,"},{"line_number":8380,"context_line":"                        \u0027foo_key2\u0027: \u0027foo_value2\u0027}))"},{"line_number":8381,"context_line":""},{"line_number":8382,"context_line":"    def test_update_aggregate_metadata_az(self):"},{"line_number":8383,"context_line":"        #Ensure metadata with new availability zone can\u0027t be updated,"},{"line_number":8384,"context_line":"        #when aggregate has hosts alreday"},{"line_number":8385,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FyWM%3D","line":8382,"in_reply_to":"AAAAQn%2F%2FynE%3D","updated":"2013-07-23 08:38:20.000000000","message":"I\u0027ll correct this test case, I should call\nself.api.update_aggregate_metadata","commit_id":"84316d40191afd193640af2dd22f4fff38ebb74a"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"e2f0fec86f048c1dd11cd6961eb1a9aa9b0d977a","unresolved":false,"context_lines":[{"line_number":8154,"context_line":"        self.assertEqual(msg[\u0027event_type\u0027],"},{"line_number":8155,"context_line":"                         \u0027aggregate.updateprop.end\u0027)"},{"line_number":8156,"context_line":""},{"line_number":8157,"context_line":"    def test_update_aggregate_az(self):"},{"line_number":8158,"context_line":"        # Ensure aggregate\u0027s availability zone can\u0027t be updated,"},{"line_number":8159,"context_line":"        # when aggregate has hosts in other availability zone"},{"line_number":8160,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAQ3%2F%2F4w4%3D","line":8157,"updated":"2013-08-13 13:52:05.000000000","message":"Test name should reflect the negative nature of the test:\n\ntest_update_aggregate_az_fails","commit_id":"d7a24167e952740a1bd1b660607a68f5ea0d0ada"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"2d42014cfe733cf1219f6b34f656c475ef59e24b","unresolved":false,"context_lines":[{"line_number":8154,"context_line":"        self.assertEqual(msg[\u0027event_type\u0027],"},{"line_number":8155,"context_line":"                         \u0027aggregate.updateprop.end\u0027)"},{"line_number":8156,"context_line":""},{"line_number":8157,"context_line":"    def test_update_aggregate_az(self):"},{"line_number":8158,"context_line":"        # Ensure aggregate\u0027s availability zone can\u0027t be updated,"},{"line_number":8159,"context_line":"        # when aggregate has hosts in other availability zone"},{"line_number":8160,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAARH%2F%2F%2Flo%3D","line":8157,"in_reply_to":"AAAAQ3%2F%2F4w4%3D","updated":"2013-08-14 02:34:20.000000000","message":"ok","commit_id":"d7a24167e952740a1bd1b660607a68f5ea0d0ada"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"e2f0fec86f048c1dd11cd6961eb1a9aa9b0d977a","unresolved":false,"context_lines":[{"line_number":8189,"context_line":"        self.assertEqual(msg[\u0027event_type\u0027],"},{"line_number":8190,"context_line":"                         \u0027aggregate.updateprop.end\u0027)"},{"line_number":8191,"context_line":""},{"line_number":8192,"context_line":"    def test_update_aggregate_metadata(self):"},{"line_number":8193,"context_line":"        # Ensure metadata can be updated."},{"line_number":8194,"context_line":"        aggr \u003d self.api.create_aggregate(self.context, \u0027fake_aggregate\u0027,"},{"line_number":8195,"context_line":"                                         \u0027fake_zone\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAQ3%2F%2F4xs%3D","line":8192,"updated":"2013-08-13 13:52:05.000000000","message":"Need to have a test now that makes sure this can work even if there are hosts in the aggregate but the AZ is no changing","commit_id":"d7a24167e952740a1bd1b660607a68f5ea0d0ada"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"2d42014cfe733cf1219f6b34f656c475ef59e24b","unresolved":false,"context_lines":[{"line_number":8189,"context_line":"        self.assertEqual(msg[\u0027event_type\u0027],"},{"line_number":8190,"context_line":"                         \u0027aggregate.updateprop.end\u0027)"},{"line_number":8191,"context_line":""},{"line_number":8192,"context_line":"    def test_update_aggregate_metadata(self):"},{"line_number":8193,"context_line":"        # Ensure metadata can be updated."},{"line_number":8194,"context_line":"        aggr \u003d self.api.create_aggregate(self.context, \u0027fake_aggregate\u0027,"},{"line_number":8195,"context_line":"                                         \u0027fake_zone\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAARH%2F%2F%2Fk8%3D","line":8192,"in_reply_to":"AAAAQ3%2F%2F4xs%3D","updated":"2013-08-14 02:34:20.000000000","message":"I tested in running system, the logic works well, however, I\u0027ll add tests to cover more user case of aggregate metadata updating. Thanks for your comments","commit_id":"d7a24167e952740a1bd1b660607a68f5ea0d0ada"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"e2f0fec86f048c1dd11cd6961eb1a9aa9b0d977a","unresolved":false,"context_lines":[{"line_number":8212,"context_line":"                        matchers.DictMatches({\u0027availability_zone\u0027: \u0027fake_zone\u0027,"},{"line_number":8213,"context_line":"                        \u0027foo_key2\u0027: \u0027foo_value2\u0027}))"},{"line_number":8214,"context_line":""},{"line_number":8215,"context_line":"    def test_update_aggregate_metadata_az(self):"},{"line_number":8216,"context_line":"        # Ensure metadata with new availability zone can\u0027t be updated,"},{"line_number":8217,"context_line":"        # when aggregate has hosts in other availability zone"},{"line_number":8218,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAQ3%2F%2F4ws%3D","line":8215,"updated":"2013-08-13 13:52:05.000000000","message":"As above - needs a name that reflects that this is a negative test","commit_id":"d7a24167e952740a1bd1b660607a68f5ea0d0ada"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"afb6562cfeee7e53db25fa9b0003c25442c32b2a","unresolved":false,"context_lines":[{"line_number":8260,"context_line":"        fake_host \u003d values[fake_zone][0]"},{"line_number":8261,"context_line":"        aggr \u003d self.api.add_host_to_aggregate(self.context,"},{"line_number":8262,"context_line":"                                              aggr[\u0027id\u0027], fake_host)"},{"line_number":8263,"context_line":"        metadata \u003d {\u0027availability_zone\u0027: \u0027test_zone\u0027,"},{"line_number":8264,"context_line":"                    \u0027foo_key2\u0027: \u0027foo_value3\u0027, }"},{"line_number":8265,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"},{"line_number":8266,"context_line":"        aggr \u003d self.api.update_aggregate_metadata(self.context, aggr[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F%2Bdg%3D","line":8263,"updated":"2013-08-14 10:12:28.000000000","message":"This isn\u0027t teh test I asked to be added. \n\nYou need to test changing a metadata value that *doesn\u0027t* include availability_zone when there are hosts in the aggregate that do belong to a different aggregate that is an AZ \n\nI think that merits a separate new test","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"43623942fb8ad5a0f2e21ccfacca736face0d9ee","unresolved":false,"context_lines":[{"line_number":8260,"context_line":"        fake_host \u003d values[fake_zone][0]"},{"line_number":8261,"context_line":"        aggr \u003d self.api.add_host_to_aggregate(self.context,"},{"line_number":8262,"context_line":"                                              aggr[\u0027id\u0027], fake_host)"},{"line_number":8263,"context_line":"        metadata \u003d {\u0027availability_zone\u0027: \u0027test_zone\u0027,"},{"line_number":8264,"context_line":"                    \u0027foo_key2\u0027: \u0027foo_value3\u0027, }"},{"line_number":8265,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"},{"line_number":8266,"context_line":"        aggr \u003d self.api.update_aggregate_metadata(self.context, aggr[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAARH%2F%2F7FU%3D","line":8263,"in_reply_to":"AAAARH%2F%2F%2Bdg%3D","updated":"2013-08-15 05:32:59.000000000","message":"ok, I\u0027ll reorganize logic in aggregate update and aggregate metadata update fucntion, so I\u0027ll modify test cases to do verification","commit_id":"13f865b6e0567818559cf40d482eeb134888a672"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"b99fd0fee5239f96eac06978ba97c2655aa916e9","unresolved":false,"context_lines":[{"line_number":7787,"context_line":""},{"line_number":7788,"context_line":"    def test_update_aggregate_az_fails(self):"},{"line_number":7789,"context_line":"        # Ensure aggregate\u0027s availability zone can\u0027t be updated,"},{"line_number":7790,"context_line":"        # when aggregate has hosts in other availability zone"},{"line_number":7791,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"},{"line_number":7792,"context_line":"        values \u003d _create_service_entries(self.context)"},{"line_number":7793,"context_line":"        fake_zone \u003d values.keys()[0]"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Fi98%3D","line":7790,"updated":"2013-09-03 16:50:12.000000000","message":"In this case, what is the preferred alternative?","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"67a3cacf8cd60d0859d8f3988add45f28a19ebd2","unresolved":false,"context_lines":[{"line_number":7787,"context_line":""},{"line_number":7788,"context_line":"    def test_update_aggregate_az_fails(self):"},{"line_number":7789,"context_line":"        # Ensure aggregate\u0027s availability zone can\u0027t be updated,"},{"line_number":7790,"context_line":"        # when aggregate has hosts in other availability zone"},{"line_number":7791,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"},{"line_number":7792,"context_line":"        values \u003d _create_service_entries(self.context)"},{"line_number":7793,"context_line":"        fake_zone \u003d values.keys()[0]"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2FaIQ%3D","line":7790,"in_reply_to":"AAAASn%2F%2Fc6I%3D","updated":"2013-09-05 03:10:25.000000000","message":"yes, I agree that removing the host from another az is the best choice","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"5d2f48bff8288fcb05fcb7ef7952711ffefde6c4","unresolved":false,"context_lines":[{"line_number":7787,"context_line":""},{"line_number":7788,"context_line":"    def test_update_aggregate_az_fails(self):"},{"line_number":7789,"context_line":"        # Ensure aggregate\u0027s availability zone can\u0027t be updated,"},{"line_number":7790,"context_line":"        # when aggregate has hosts in other availability zone"},{"line_number":7791,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"},{"line_number":7792,"context_line":"        values \u003d _create_service_entries(self.context)"},{"line_number":7793,"context_line":"        fake_zone \u003d values.keys()[0]"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Fc6I%3D","line":7790,"in_reply_to":"AAAASn%2F%2Ffiw%3D","updated":"2013-09-04 16:07:21.000000000","message":"making two aggregates map to the same AZ sounds like a bad idea to me. It will just make things more confusing later on.","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"c67d71ae5ea00ce0c21f0a5643ae48cb5dee9084","unresolved":false,"context_lines":[{"line_number":7787,"context_line":""},{"line_number":7788,"context_line":"    def test_update_aggregate_az_fails(self):"},{"line_number":7789,"context_line":"        # Ensure aggregate\u0027s availability zone can\u0027t be updated,"},{"line_number":7790,"context_line":"        # when aggregate has hosts in other availability zone"},{"line_number":7791,"context_line":"        test_notifier.NOTIFICATIONS \u003d []"},{"line_number":7792,"context_line":"        values \u003d _create_service_entries(self.context)"},{"line_number":7793,"context_line":"        fake_zone \u003d values.keys()[0]"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAASn%2F%2Ffiw%3D","line":7790,"in_reply_to":"AAAASn%2F%2Fi98%3D","updated":"2013-09-04 05:27:51.000000000","message":"There are two choice:\n\n1, remove the host from another az\n\n2, assign this aggregate into same az\n\nthe choice can be made according to host\u0027s feature or user\u0027s management criteria","commit_id":"ba754889026cabe73fb951320c24651f02fbff8f"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"e0ec0d1e1ceffa74672a7ea5caac2991a62d99d4","unresolved":false,"context_lines":[{"line_number":8171,"context_line":"                         \u0027aggregate.updateprop.end\u0027)"},{"line_number":8172,"context_line":""},{"line_number":8173,"context_line":"    def test_update_aggregate_no_az(self):"},{"line_number":8174,"context_line":"        # Ensure metadata without availability zone can be"},{"line_number":8175,"context_line":"        # updated,even the aggregate contains hosts belong"},{"line_number":8176,"context_line":"        # to another availability zone"},{"line_number":8177,"context_line":"        aggr1 \u003d self.api.create_aggregate(self.context, \u0027fake_aggregate1\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAS3%2F%2Fp58%3D","line":8174,"updated":"2013-09-23 10:41:15.000000000","message":"nit: can we abstract the common code to a private and reusable method and pass those difference as parameter from different unit test entry point to reduce the lines of codes?","commit_id":"8b3d08fe8181c05990b010a91eb96ec3eb136ab0"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"d0999760de5f39a75cded9d520c126a9eee6f13e","unresolved":false,"context_lines":[{"line_number":8171,"context_line":"                         \u0027aggregate.updateprop.end\u0027)"},{"line_number":8172,"context_line":""},{"line_number":8173,"context_line":"    def test_update_aggregate_no_az(self):"},{"line_number":8174,"context_line":"        # Ensure metadata without availability zone can be"},{"line_number":8175,"context_line":"        # updated,even the aggregate contains hosts belong"},{"line_number":8176,"context_line":"        # to another availability zone"},{"line_number":8177,"context_line":"        aggr1 \u003d self.api.create_aggregate(self.context, \u0027fake_aggregate1\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAATH%2F%2Fl4g%3D","line":8174,"in_reply_to":"AAAAS3%2F%2FXA0%3D","updated":"2013-10-14 03:27:08.000000000","message":"Done","commit_id":"8b3d08fe8181c05990b010a91eb96ec3eb136ab0"},{"author":{"_account_id":7040,"name":"GuoHui LIu","email":"liuguohui@gmail.com","username":"guohliu"},"change_message_id":"c0ebe87a4bb2fce68e8760731390937182f09636","unresolved":false,"context_lines":[{"line_number":8171,"context_line":"                         \u0027aggregate.updateprop.end\u0027)"},{"line_number":8172,"context_line":""},{"line_number":8173,"context_line":"    def test_update_aggregate_no_az(self):"},{"line_number":8174,"context_line":"        # Ensure metadata without availability zone can be"},{"line_number":8175,"context_line":"        # updated,even the aggregate contains hosts belong"},{"line_number":8176,"context_line":"        # to another availability zone"},{"line_number":8177,"context_line":"        aggr1 \u003d self.api.create_aggregate(self.context, \u0027fake_aggregate1\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAS3%2F%2FXA0%3D","line":8174,"in_reply_to":"AAAAS3%2F%2Fh6M%3D","updated":"2013-09-28 12:48:46.000000000","message":"Hi, in order to reducing the line of codes, we can make the tests reusable as much as possible, there are lots of example, it\u0027s not a big deal for now.","commit_id":"8b3d08fe8181c05990b010a91eb96ec3eb136ab0"},{"author":{"_account_id":7138,"name":"David Jia","email":"jiataotj@cn.ibm.com","username":"jiataotj"},"change_message_id":"fcecddcd2b57eb1a567135e408d8ae4ddcdcd1e2","unresolved":false,"context_lines":[{"line_number":8171,"context_line":"                         \u0027aggregate.updateprop.end\u0027)"},{"line_number":8172,"context_line":""},{"line_number":8173,"context_line":"    def test_update_aggregate_no_az(self):"},{"line_number":8174,"context_line":"        # Ensure metadata without availability zone can be"},{"line_number":8175,"context_line":"        # updated,even the aggregate contains hosts belong"},{"line_number":8176,"context_line":"        # to another availability zone"},{"line_number":8177,"context_line":"        aggr1 \u003d self.api.create_aggregate(self.context, \u0027fake_aggregate1\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"AAAAS3%2F%2Fh6M%3D","line":8174,"in_reply_to":"AAAAS3%2F%2Fp58%3D","updated":"2013-09-25 06:47:31.000000000","message":"Thanks for your comments.\n\nI wrote these test cases according to previous review comments. I don\u0027t clear see there is common/reusable method which may be wanted by others test cases. Could you give more instructions? Thank you!","commit_id":"8b3d08fe8181c05990b010a91eb96ec3eb136ab0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"c0694473f422e2509d809120a553b5c92dafb7bd","unresolved":false,"context_lines":[{"line_number":8633,"context_line":"                                      metadata)"},{"line_number":8634,"context_line":"        except exception.InvalidAggregateAction as e:"},{"line_number":8635,"context_line":"            msg \u003d \"host1 in avail_zone1,host2 in avail_zone1\""},{"line_number":8636,"context_line":"            self.assertTrue(e.format_message().find(msg))"},{"line_number":8637,"context_line":""},{"line_number":8638,"context_line":"    def test_update_aggregate(self):"},{"line_number":8639,"context_line":"        # Ensure metadata can be updated."}],"source_content_type":"text/x-python","patch_set":42,"id":"AAAAUX%2F%2FtO8%3D","line":8636,"updated":"2014-02-11 10:45:35.000000000","message":".find() will return -1 here because it won\u0027t find the string\n\nWe should just assertRaises() - I\u0027ll follow up with a separate patch","commit_id":"734d9a70f81891c793e20aa23ea0ec0e5fda12b7"}]}
