)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f8a4caacf3ae339b75781da04e6e56d20791e1fc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"resize-revert can break anti-affinity policy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There is an example illustrating the problem very well:"},{"line_number":10,"context_line":"1. boot instanceA with anti-affinity policy server group, instanceA start"},{"line_number":11,"context_line":"on hostA."},{"line_number":12,"context_line":"2. resize instanceA, instanceA was migrated to hostB, wait for verify"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"fa963961_d7813efd","line":9,"updated":"2015-03-26 15:52:08.000000000","message":"The commit message should explain how you fix the problem, what did you update and why.\n\nThe example you are describe should be in the bug report only or at least as a note in the second paragraph of the message.","commit_id":"aa7ae93bb40ebdc4809cc64f0eaf051444ad42e9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"334ea7fe3f61de7d047df1aaa97143ef8553c266","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Zhenyu Zheng \u003czhengzhenyu@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-10 06:37:29 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"resize-revert can break anti-affinity policy"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In order to resolve this problem, we can add the source compute node"},{"line_number":10,"context_line":"into the anti-affinity servergroup when the instance has set the dest"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":59,"id":"1a122d0e_40dff60b","line":7,"updated":"2016-05-04 15:49:53.000000000","message":"Think it can cause the miscalculation in the soft-affinity soft-anti-affinity weighers as well. I don\u0027t know if it should be fixed here or with a separate bug / patch.","commit_id":"fa144affa9361525a539e6985fe2ee7e1cf31728"}],"nova/db/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f84cdae531bd24637d32878fcdaec185e5095960","unresolved":false,"context_lines":[{"line_number":463,"context_line":"            status)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"def migration_get_by_instance_with_muti_status(context, instance_uuid,"},{"line_number":467,"context_line":"                                               statuses):"},{"line_number":468,"context_line":"    \"\"\"Finds a migration by the instance uuid its migrating.\"\"\""},{"line_number":469,"context_line":"    return IMPL.migration_get_by_instance_with_muti_status(context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9b358b_af89b8cc","line":466,"updated":"2015-03-29 05:11:22.000000000","message":"muti \u003d\u003e not sure what this is?\nare there specific tests for this?","commit_id":"3278a8e5fc403fe269c8ce0895052399f4e4eb6c"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"b7befdc27092d1a2afbbaa955ec421a78670348f","unresolved":false,"context_lines":[{"line_number":463,"context_line":"            status)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"def migration_get_by_instance_with_muti_status(context, instance_uuid,"},{"line_number":467,"context_line":"                                               statuses):"},{"line_number":468,"context_line":"    \"\"\"Finds a migration by the instance uuid its migrating.\"\"\""},{"line_number":469,"context_line":"    return IMPL.migration_get_by_instance_with_muti_status(context,"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9b358b_64906eed","line":466,"in_reply_to":"da9b358b_af89b8cc","updated":"2015-03-30 02:53:31.000000000","message":"thanks, I will add the tests","commit_id":"3278a8e5fc403fe269c8ce0895052399f4e4eb6c"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f84cdae531bd24637d32878fcdaec185e5095960","unresolved":false,"context_lines":[{"line_number":4401,"context_line":"    return result"},{"line_number":4402,"context_line":""},{"line_number":4403,"context_line":""},{"line_number":4404,"context_line":"def migration_get_by_instance_with_muti_status(context, instance_uuid,"},{"line_number":4405,"context_line":"                                               statuses):"},{"line_number":4406,"context_line":"    # in order to avoid multiple database queries for the multiple status"},{"line_number":4407,"context_line":"    filter_statuses \u003d [models.Migration.status \u003d\u003d value for value in"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9b358b_8f86f4b7","line":4404,"updated":"2015-03-29 05:11:22.000000000","message":"i have a problem with the method name","commit_id":"3278a8e5fc403fe269c8ce0895052399f4e4eb6c"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"b7befdc27092d1a2afbbaa955ec421a78670348f","unresolved":false,"context_lines":[{"line_number":4401,"context_line":"    return result"},{"line_number":4402,"context_line":""},{"line_number":4403,"context_line":""},{"line_number":4404,"context_line":"def migration_get_by_instance_with_muti_status(context, instance_uuid,"},{"line_number":4405,"context_line":"                                               statuses):"},{"line_number":4406,"context_line":"    # in order to avoid multiple database queries for the multiple status"},{"line_number":4407,"context_line":"    filter_statuses \u003d [models.Migration.status \u003d\u003d value for value in"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9b358b_244f0694","line":4404,"in_reply_to":"da9b358b_8f86f4b7","updated":"2015-03-30 02:53:31.000000000","message":"I mean that we get migration object based on the one of multiple migration statues. thanks","commit_id":"3278a8e5fc403fe269c8ce0895052399f4e4eb6c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f84cdae531bd24637d32878fcdaec185e5095960","unresolved":false,"context_lines":[{"line_number":4402,"context_line":""},{"line_number":4403,"context_line":""},{"line_number":4404,"context_line":"def migration_get_by_instance_with_muti_status(context, instance_uuid,"},{"line_number":4405,"context_line":"                                               statuses):"},{"line_number":4406,"context_line":"    # in order to avoid multiple database queries for the multiple status"},{"line_number":4407,"context_line":"    filter_statuses \u003d [models.Migration.status \u003d\u003d value for value in"},{"line_number":4408,"context_line":"                       statuses]"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9b358b_6f93b0fb","line":4405,"updated":"2015-03-29 05:11:22.000000000","message":"please add specific unit tests for this","commit_id":"3278a8e5fc403fe269c8ce0895052399f4e4eb6c"}],"nova/objects/instance_group.py":[{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"b1ad1630fe34b29f8a240dbd34dd563a64280b50","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            # https://bugs.launchpad.net/nova/+bug/1425859"},{"line_number":191,"context_line":"            for status in [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":192,"context_line":"                           \u0027reverted\u0027]:"},{"line_number":193,"context_line":"                migration \u003d None"},{"line_number":194,"context_line":"                try:"},{"line_number":195,"context_line":"                    migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":196,"context_line":"                        context.elevated(), instance.uuid, status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_896afe7e","line":193,"updated":"2015-03-15 22:55:50.000000000","message":"You can eliminate the migration variable entirely! right?\n\n    try:\n        objects.Migration.get_by_instance_and_status(\n            context.elevated(), instance.uuid, status)\n        group_hosts.add(migration.source_compute)\n    except exception.MigrationNotFoundByStatus:\n        pass","commit_id":"a15aedbdee9b03d83e990c7d5c9dd05ae9a115e5"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"fa96c8bdfb60f91475cb7758423057ef79eff2d2","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            # https://bugs.launchpad.net/nova/+bug/1425859"},{"line_number":191,"context_line":"            for status in [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":192,"context_line":"                           \u0027reverted\u0027]:"},{"line_number":193,"context_line":"                migration \u003d None"},{"line_number":194,"context_line":"                try:"},{"line_number":195,"context_line":"                    migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":196,"context_line":"                        context.elevated(), instance.uuid, status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_d47c2a23","line":193,"in_reply_to":"9a80dd14_896afe7e","updated":"2015-03-31 09:04:59.000000000","message":"yeah, we can eliminate the migration  variable in the following way:\ntry:\n      group_hosts.add(objects.Migration.get_by_instance_and_status(\n                context.elevated(), instance.uuid, status).source_compute)\n except exception.MigrationNotFoundByStatus:\n        pass\nbut, I think that the current way is easier to understand!","commit_id":"a15aedbdee9b03d83e990c7d5c9dd05ae9a115e5"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"f8a4caacf3ae339b75781da04e6e56d20791e1fc","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        filters \u003d {\u0027uuid\u0027: filter_uuids, \u0027deleted\u0027: False}"},{"line_number":185,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"},{"line_number":186,"context_line":"                                                        filters\u003dfilters)"},{"line_number":187,"context_line":"        group_hosts \u003d set()"},{"line_number":188,"context_line":"        for instance in instances:"},{"line_number":189,"context_line":"            # Add the source hosts which run the instances"},{"line_number":190,"context_line":"            # in the migration progress for the bug:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa963961_29ffee02","line":187,"updated":"2015-03-26 15:52:08.000000000","message":"So you go through instances and for each instance you will hit 4 times the database. This seems to me not reasonable. A new db api should be defined to do all of that work in the database and with one query.","commit_id":"aa7ae93bb40ebdc4809cc64f0eaf051444ad42e9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bb5d2d96c27fd21a810afdc120d843b69452be2","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"},{"line_number":186,"context_line":"                                                        filters\u003dfilters)"},{"line_number":187,"context_line":"        group_hosts \u003d set()"},{"line_number":188,"context_line":"        for instance in instances:"},{"line_number":189,"context_line":"            # Add the source hosts which run the instances"},{"line_number":190,"context_line":"            # in the migration progress for the bug:"},{"line_number":191,"context_line":"            # https://bugs.launchpad.net/nova/+bug/1425859"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa963961_8d36e901","line":188,"updated":"2015-03-27 10:01:20.000000000","message":"I still believe we can do something better here, probably in one query instead of len(instances)\n\n  1. go thought \u0027instances\u0027 to extract instances in a migration status.\n  2. query the Migration with a the list of the instances previously extracted \n  3. with the list returned by the database, set group_hosts with the source_compute","commit_id":"f396bc7907924d734a40f005192cf94840c28318"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"d6695527b294f5fb03f3f82d23c1f05274c6ae4b","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"},{"line_number":186,"context_line":"                                                        filters\u003dfilters)"},{"line_number":187,"context_line":"        group_hosts \u003d set()"},{"line_number":188,"context_line":"        for instance in instances:"},{"line_number":189,"context_line":"            # Add the source hosts which run the instances"},{"line_number":190,"context_line":"            # in the migration progress for the bug:"},{"line_number":191,"context_line":"            # https://bugs.launchpad.net/nova/+bug/1425859"}],"source_content_type":"text/x-python","patch_set":12,"id":"da9b358b_0d0af4d2","line":188,"in_reply_to":"fa963961_8d36e901","updated":"2015-03-28 10:39:33.000000000","message":"I will try it. thanks for your advice a lot.","commit_id":"f396bc7907924d734a40f005192cf94840c28318"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"57e46e56b70b755e3dd2264970e84744182bfd75","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"},{"line_number":186,"context_line":"                                                        filters\u003dfilters)"},{"line_number":187,"context_line":"        group_hosts \u003d set()"},{"line_number":188,"context_line":"        for instance in instances:"},{"line_number":189,"context_line":"            # Add the source hosts which run the instances"},{"line_number":190,"context_line":"            # in the migration progress for the bug:"},{"line_number":191,"context_line":"            # https://bugs.launchpad.net/nova/+bug/1425859"}],"source_content_type":"text/x-python","patch_set":12,"id":"da9b358b_44c7aa12","line":188,"in_reply_to":"fa963961_8d36e901","updated":"2015-03-30 02:48:40.000000000","message":"To your advice, I thought a lot. \n1. using one query of len(instances) makes the logic unclear.\n2. we just need to add the dest_compute into group_hosts to the instances in other migration statuses or not in migration  process.\nthanks","commit_id":"f396bc7907924d734a40f005192cf94840c28318"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bb5d2d96c27fd21a810afdc120d843b69452be2","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                                                        filters\u003dfilters)"},{"line_number":187,"context_line":"        group_hosts \u003d set()"},{"line_number":188,"context_line":"        for instance in instances:"},{"line_number":189,"context_line":"            # Add the source hosts which run the instances"},{"line_number":190,"context_line":"            # in the migration progress for the bug:"},{"line_number":191,"context_line":"            # https://bugs.launchpad.net/nova/+bug/1425859"},{"line_number":192,"context_line":"            statuses \u003d [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa963961_cd9cf16b","line":189,"updated":"2015-03-27 10:01:20.000000000","message":"Just explain what and why you are doing that.\n\n\"In the case where instances are in the state.... We want to consider them... during blabla\"","commit_id":"f396bc7907924d734a40f005192cf94840c28318"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bb5d2d96c27fd21a810afdc120d843b69452be2","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        for instance in instances:"},{"line_number":189,"context_line":"            # Add the source hosts which run the instances"},{"line_number":190,"context_line":"            # in the migration progress for the bug:"},{"line_number":191,"context_line":"            # https://bugs.launchpad.net/nova/+bug/1425859"},{"line_number":192,"context_line":"            statuses \u003d [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":193,"context_line":"                        \u0027reverted\u0027]"},{"line_number":194,"context_line":"            migration \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa963961_6ddde541","line":191,"updated":"2015-03-27 10:01:20.000000000","message":"This bug reference can be remove","commit_id":"f396bc7907924d734a40f005192cf94840c28318"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"1bb5d2d96c27fd21a810afdc120d843b69452be2","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            # Add the source hosts which run the instances"},{"line_number":190,"context_line":"            # in the migration progress for the bug:"},{"line_number":191,"context_line":"            # https://bugs.launchpad.net/nova/+bug/1425859"},{"line_number":192,"context_line":"            statuses \u003d [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":193,"context_line":"                        \u0027reverted\u0027]"},{"line_number":194,"context_line":"            migration \u003d None"},{"line_number":195,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa963961_6d26056a","line":192,"updated":"2015-03-27 10:01:20.000000000","message":"This can probably be out of the loop","commit_id":"f396bc7907924d734a40f005192cf94840c28318"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"09a5f97c0cc44f52b1b9f8500f4b2d8805bc7d4c","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                        \u0027reverted\u0027]"},{"line_number":194,"context_line":"            migration \u003d None"},{"line_number":195,"context_line":"            try:"},{"line_number":196,"context_line":"                migration \u003d objects.Migration.get_by_instance_with_muti_status("},{"line_number":197,"context_line":"                        self._context.elevated(), instance.uuid, statuses)"},{"line_number":198,"context_line":"            except exception.MigrationNotFoundByStatus:"},{"line_number":199,"context_line":"                    pass"}],"source_content_type":"text/x-python","patch_set":15,"id":"da9b358b_1602936f","line":196,"updated":"2015-04-01 09:52:23.000000000","message":"So we still hit database for each instances. The solution here does not work ? https://review.openstack.org/#/c/160110/12/nova/objects/instance_group.py,cm","commit_id":"1743f0a8228a3d8ae0d3c60b994e53d98a0e0f09"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"47c90fdba1d946457ea360f4bd71e21acaa50dda","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"},{"line_number":186,"context_line":"                                                        filters\u003dfilters)"},{"line_number":187,"context_line":"        source_hosts \u003d set()"},{"line_number":188,"context_line":"        # Add the source hosts which run the instances"},{"line_number":189,"context_line":"        # in the migration progress for the bug:"},{"line_number":190,"context_line":"        statuses \u003d [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":191,"context_line":"                        \u0027reverted\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"baa041b7_1f2bed95","line":188,"updated":"2015-04-03 14:21:24.000000000","message":"You comment seems to be not really useful, let me try:\n\n  # In order to avoid breaking anti-affinity with instances in\n  # migration status (means they can be on host A or B) we\n  # should consider thier hosts when computing the group\n\nProbably needs some reviews but the point is to explain why you are doing that. - Make a comment to indicate there was a bug here is not useful at all.","commit_id":"f6f48dff252d837b7796813798091863ecc3b68e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"47c90fdba1d946457ea360f4bd71e21acaa50dda","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        statuses \u003d [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":191,"context_line":"                        \u0027reverted\u0027]"},{"line_number":192,"context_line":"        try:"},{"line_number":193,"context_line":"            migrations \u003d objects.MigrationList.get_by_instances_with_muti_status("},{"line_number":194,"context_line":"                        self._context.elevated(), filter_uuids, statuses)"},{"line_number":195,"context_line":"        except exception.MigrationNotFoundByStatus:"},{"line_number":196,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":16,"id":"baa041b7_7f979990","line":193,"updated":"2015-04-03 14:21:24.000000000","message":"Nice so now one call on the database :) - s/get_by_instances_with_muti_status/get_by_instance_with_multiple_statuses\n\nThat said i thing the plural is statutes.","commit_id":"f6f48dff252d837b7796813798091863ecc3b68e"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a6b8e6d82049b030540b7d1f22ba528f2d20c0d0","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"},{"line_number":186,"context_line":"                                                        filters\u003dfilters)"},{"line_number":187,"context_line":"        source_hosts \u003d set()"},{"line_number":188,"context_line":"        # Add the source hosts which run the instances"},{"line_number":189,"context_line":"        # in the migration progress for the bug:"},{"line_number":190,"context_line":"        statuses \u003d [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":191,"context_line":"                        \u0027reverted\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"9aa53dc9_ae52bedb","line":188,"updated":"2015-04-07 12:22:48.000000000","message":"You did not address comment on PS16 and did not give me a return, please let me know you thinking","commit_id":"5a80218b1113e3e97b7257c7e29ec70090f0f556"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"38e0eb685ef0534da3927b755aab85373160f92c","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"},{"line_number":186,"context_line":"                                                        filters\u003dfilters)"},{"line_number":187,"context_line":"        source_hosts \u003d set()"},{"line_number":188,"context_line":"        # Add the source hosts which run the instances"},{"line_number":189,"context_line":"        # in the migration progress for the bug:"},{"line_number":190,"context_line":"        statuses \u003d [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":191,"context_line":"                        \u0027reverted\u0027]"}],"source_content_type":"text/x-python","patch_set":19,"id":"9aa53dc9_e5032541","line":188,"in_reply_to":"9aa53dc9_ae52bedb","updated":"2015-04-08 00:59:10.000000000","message":"oh,my god,I forgot it, thank you for reminding me again!","commit_id":"5a80218b1113e3e97b7257c7e29ec70090f0f556"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dd9a4602451d916d9b1ceb4e740c6eb1dc69a057","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                    \u0027reverted\u0027]"},{"line_number":193,"context_line":"        migrations \u003d None"},{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            migrations \u003d objects.MigrationList. \\"},{"line_number":196,"context_line":"                get_by_instances_with_multiple_statuses("},{"line_number":197,"context_line":"                self._context.elevated(), filter_uuids, statuses)"},{"line_number":198,"context_line":"        except exception.MigrationNotFoundByStatus:"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_70e52336","line":195,"updated":"2015-04-10 12:46:11.000000000","message":"well, using a \\ for multiline statements is already \"ugly\", but can\u0027t be fitted on this line. That\u0027s fine. But remove the space before the \\","commit_id":"712d1e651ac32cbca5af83b8e7265815389e6eab"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"5e12ce01342d983fad91a8f964d859d220adff52","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                    \u0027reverted\u0027]"},{"line_number":193,"context_line":"        migrations \u003d None"},{"line_number":194,"context_line":"        try:"},{"line_number":195,"context_line":"            migrations \u003d objects.MigrationList. \\"},{"line_number":196,"context_line":"                get_by_instances_with_multiple_statuses("},{"line_number":197,"context_line":"                self._context.elevated(), filter_uuids, statuses)"},{"line_number":198,"context_line":"        except exception.MigrationNotFoundByStatus:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aaa499b_3995f8e3","line":195,"in_reply_to":"9aa53dc9_70e52336","updated":"2015-04-11 01:45:44.000000000","message":"oh, yeah, thanks.","commit_id":"712d1e651ac32cbca5af83b8e7265815389e6eab"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dd9a4602451d916d9b1ceb4e740c6eb1dc69a057","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                get_by_instances_with_multiple_statuses("},{"line_number":197,"context_line":"                self._context.elevated(), filter_uuids, statuses)"},{"line_number":198,"context_line":"        except exception.MigrationNotFoundByStatus:"},{"line_number":199,"context_line":"                pass"},{"line_number":200,"context_line":"        if migrations:"},{"line_number":201,"context_line":"            for migration in migrations:"},{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_30d2fb5c","line":199,"updated":"2015-04-10 12:46:11.000000000","message":"overindented","commit_id":"712d1e651ac32cbca5af83b8e7265815389e6eab"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dd9a4602451d916d9b1ceb4e740c6eb1dc69a057","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                pass"},{"line_number":200,"context_line":"        if migrations:"},{"line_number":201,"context_line":"            for migration in migrations:"},{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":203,"context_line":"        group_hosts \u003d set("},{"line_number":204,"context_line":"            [instance.host for instance in instances if instance.host])"},{"line_number":205,"context_line":"        return list(group_hosts | source_hosts)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aa53dc9_b04deb3f","line":202,"updated":"2015-04-10 12:46:11.000000000","message":"how about:\n\n    source_hosts.extend(migr[\u0027source_compute\u0027] for migr in migrations])\n\njust a suggestion, not imperative. :P","commit_id":"712d1e651ac32cbca5af83b8e7265815389e6eab"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"5e12ce01342d983fad91a8f964d859d220adff52","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                pass"},{"line_number":200,"context_line":"        if migrations:"},{"line_number":201,"context_line":"            for migration in migrations:"},{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":203,"context_line":"        group_hosts \u003d set("},{"line_number":204,"context_line":"            [instance.host for instance in instances if instance.host])"},{"line_number":205,"context_line":"        return list(group_hosts | source_hosts)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aaa499b_199a3c15","line":202,"in_reply_to":"9aa53dc9_b04deb3f","updated":"2015-04-11 01:45:44.000000000","message":"LGTM, thanks","commit_id":"712d1e651ac32cbca5af83b8e7265815389e6eab"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"1716827f18f8bc4e93177f86f1fab227246fdb4b","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                pass"},{"line_number":200,"context_line":"        if migrations:"},{"line_number":201,"context_line":"            for migration in migrations:"},{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":203,"context_line":"        group_hosts \u003d set("},{"line_number":204,"context_line":"            [instance.host for instance in instances if instance.host])"},{"line_number":205,"context_line":"        return list(group_hosts | source_hosts)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7aaa499b_6a9f1c60","line":202,"in_reply_to":"9aa53dc9_b04deb3f","updated":"2015-04-11 10:59:53.000000000","message":"if using source_hosts.extend(...), we need to type conversion","commit_id":"712d1e651ac32cbca5af83b8e7265815389e6eab"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2905e789a8cedd7d15b332512c04c486885b565f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        except exception.MigrationNotFoundByStatus:"},{"line_number":199,"context_line":"            pass"},{"line_number":200,"context_line":"        if migrations:"},{"line_number":201,"context_line":"            for migration in migrations:"},{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":203,"context_line":"        group_hosts \u003d set("},{"line_number":204,"context_line":"            [instance.host for instance in instances if instance.host])"}],"source_content_type":"text/x-python","patch_set":29,"id":"7aaa499b_3d5e9976","line":201,"updated":"2015-04-15 07:41:18.000000000","message":"This block can be moved line 197","commit_id":"557ededf9afe72453293c14c3c61c50f738b9b68"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"bcbb2cf88c80b606edb1c79251a0acd11809a99d","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        except exception.MigrationNotFoundByStatus:"},{"line_number":199,"context_line":"            pass"},{"line_number":200,"context_line":"        if migrations:"},{"line_number":201,"context_line":"            for migration in migrations:"},{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":203,"context_line":"        group_hosts \u003d set("},{"line_number":204,"context_line":"            [instance.host for instance in instances if instance.host])"}],"source_content_type":"text/x-python","patch_set":29,"id":"3ab451fb_54608235","line":201,"in_reply_to":"5aa745d1_a3f2e398","updated":"2015-04-17 08:54:30.000000000","message":"thanks guys, it is really good advice.","commit_id":"557ededf9afe72453293c14c3c61c50f738b9b68"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6fe1438dd39febb1c6c37398b25ec5eb9a39770c","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        except exception.MigrationNotFoundByStatus:"},{"line_number":199,"context_line":"            pass"},{"line_number":200,"context_line":"        if migrations:"},{"line_number":201,"context_line":"            for migration in migrations:"},{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":203,"context_line":"        group_hosts \u003d set("},{"line_number":204,"context_line":"            [instance.host for instance in instances if instance.host])"}],"source_content_type":"text/x-python","patch_set":29,"id":"5aa745d1_a3f2e398","line":201,"in_reply_to":"7aaa499b_3d5e9976","updated":"2015-04-16 12:56:01.000000000","message":"I agree. This way, there is no reason to have ``if migrations:``. Also, L193 will not be necessary.","commit_id":"557ededf9afe72453293c14c3c61c50f738b9b68"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"70484f97753d9c9eb4caf6dffbb91849b7cf78e5","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":203,"context_line":"        group_hosts \u003d set("},{"line_number":204,"context_line":"            [instance.host for instance in instances if instance.host])"},{"line_number":205,"context_line":"        return list(group_hosts | source_hosts)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    @base.remotable"},{"line_number":208,"context_line":"    def count_members_by_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a0c5dc1_118427d2","line":205,"updated":"2015-05-13 14:03:02.000000000","message":"I feel like this isn\u0027t the right place to do this. It makes it less change because it\u0027s more integrated, but I feel like it\u0027s not the result a caller expects.\n\nI think the only time we really need to include the migration hosts in the set is when we\u0027re doing the last-minute validation on the destination compute host, right? We should be able to do our own grab of pending migrations that involve just that host (which is a much smaller query), right?\n\nIs there any reason this needs to be done by all the callers of get_hosts()?","commit_id":"cc4b9c679f4566ca7d700fd61dcc227b4d8210f7"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"10aa74d2ccbca71d03f8d3edf3febf0a1f929dc5","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":203,"context_line":"        group_hosts \u003d set("},{"line_number":204,"context_line":"            [instance.host for instance in instances if instance.host])"},{"line_number":205,"context_line":"        return list(group_hosts | source_hosts)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    @base.remotable"},{"line_number":208,"context_line":"    def count_members_by_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a016987_fd599d8f","line":205,"in_reply_to":"9a0c5dc1_118427d2","updated":"2015-05-14 12:16:48.000000000","message":"Thanks for your review.  We don\u0027t predict what the user will do after executing the cold_migrate/resize, the action may be confirm or revert. I think we need to include the migration hosts before the last-minute validation on the destination compute host.","commit_id":"cc4b9c679f4566ca7d700fd61dcc227b4d8210f7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08973db3609bdc82f25066e97059dbc33b83f96f","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        \"\"\"Get a list of hosts for non-deleted instances in the group"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        This method allows you to get a list of the hosts where instances in"},{"line_number":178,"context_line":"        this group are currently running.  There\u0027s also an option to exclude"},{"line_number":179,"context_line":"        certain instance UUIDs from this calculation."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":55,"id":"fa1b9901_778d007b","line":178,"range":{"start_line":178,"start_character":23,"end_line":178,"end_character":40},"updated":"2015-08-26 10:07:35.000000000","message":"Doc needs to be updated due to the change","commit_id":"0a47d22699d5cae8f379e3248422abd28ec8ce23"},{"author":{"_account_id":14358,"name":"Marian Horban","email":"m.horban@gmail.com","username":"mhorban"},"change_message_id":"4c579e4042dc2c74a53fe0187c5980dcb427f986","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                    self._context.elevated(), filter_uuids, statuses))"},{"line_number":199,"context_line":"        except exception.MigrationsNotFoundByStatuses:"},{"line_number":200,"context_line":"            pass"},{"line_number":201,"context_line":"        if migrations:"},{"line_number":202,"context_line":"            for migration in migrations:"},{"line_number":203,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":204,"context_line":"        group_hosts \u003d set("}],"source_content_type":"text/x-python","patch_set":55,"id":"fa1b9901_23d4261e","line":201,"updated":"2015-08-26 11:25:45.000000000","message":"Instead of \"if migrations:\" operator \"else:\" could be used.","commit_id":"0a47d22699d5cae8f379e3248422abd28ec8ce23"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b454ef555896b0cd829557efc4d826dfa34e002d","unresolved":false,"context_lines":[{"line_number":213,"context_line":"            filter_uuids \u003d set(filter_uuids) - set(exclude)"},{"line_number":214,"context_line":"        filters \u003d {\u0027uuid\u0027: filter_uuids, \u0027deleted\u0027: False}"},{"line_number":215,"context_line":"        instances \u003d objects.InstanceList.get_by_filters(self._context,"},{"line_number":216,"context_line":"                                                        filters\u003dfilters)"},{"line_number":217,"context_line":"        source_hosts \u003d set()"},{"line_number":218,"context_line":"        # In order to avoid breaking anti-affinity with instances in"},{"line_number":219,"context_line":"        # migration status (means they can be on host A or B) we"}],"source_content_type":"text/x-python","patch_set":59,"id":"da20952f_179f3060","line":216,"updated":"2015-09-10 10:25:31.000000000","message":"hmm, you actually want expected_attributes\u003d[] here, to make this query more efficient. just spotted that, bit it should be a separate patchset you might want.","commit_id":"fa144affa9361525a539e6985fe2ee7e1cf31728"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b454ef555896b0cd829557efc4d826dfa34e002d","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        # migration status (means they can be on host A or B) we"},{"line_number":220,"context_line":"        # should consider these hosts when computing the group"},{"line_number":221,"context_line":"        statuses \u003d [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027,"},{"line_number":222,"context_line":"                    \u0027reverted\u0027]"},{"line_number":223,"context_line":"        migrations \u003d None"},{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            migrations \u003d ("}],"source_content_type":"text/x-python","patch_set":59,"id":"da20952f_77f46cce","line":222,"updated":"2015-09-10 10:25:31.000000000","message":"Isn\u0027t reverted a final state, so this means the source_compute should already be assigned to the instance, so it shouldn\u0027t be an issue?\n\nThe reason I don\u0027t like a final state being here is that I like the idea that the query below is normally empty, but adding a terminal state means you return all reverted migrations, all the time, for very little gain.\n\nI wonder about the error states, but I think we can come back to those.","commit_id":"fa144affa9361525a539e6985fe2ee7e1cf31728"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"eae87016d946d58f36971e341cef74dfed39d548","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        try:"},{"line_number":225,"context_line":"            migrations \u003d ("},{"line_number":226,"context_line":"                objects.MigrationList.get_by_instances_with_multiple_statuses("},{"line_number":227,"context_line":"                    self._context.elevated(), filter_uuids, statuses))"},{"line_number":228,"context_line":"        except exception.MigrationsNotFoundByStatuses:"},{"line_number":229,"context_line":"            pass"},{"line_number":230,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":59,"id":"da20952f_ec1aef7b","line":227,"updated":"2015-09-10 10:13:32.000000000","message":"I don\u0027t think you will need elevated any more? Please double check that.","commit_id":"fa144affa9361525a539e6985fe2ee7e1cf31728"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"eae87016d946d58f36971e341cef74dfed39d548","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    self._context.elevated(), filter_uuids, statuses))"},{"line_number":228,"context_line":"        except exception.MigrationsNotFoundByStatuses:"},{"line_number":229,"context_line":"            pass"},{"line_number":230,"context_line":"        else:"},{"line_number":231,"context_line":"            for migration in migrations:"},{"line_number":232,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":233,"context_line":"        group_hosts \u003d set("}],"source_content_type":"text/x-python","patch_set":59,"id":"da20952f_77630cde","line":230,"updated":"2015-09-10 10:13:32.000000000","message":"Micro Nit, I think its simpler to just make migrations \u003d [] by default, but thats just personal preference.","commit_id":"fa144affa9361525a539e6985fe2ee7e1cf31728"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"eae87016d946d58f36971e341cef74dfed39d548","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            for migration in migrations:"},{"line_number":232,"context_line":"                source_hosts.add(migration[\u0027source_compute\u0027])"},{"line_number":233,"context_line":"        group_hosts \u003d set("},{"line_number":234,"context_line":"            [instance.host for instance in instances if instance.host])"},{"line_number":235,"context_line":"        return list(group_hosts | source_hosts)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"    @base.remotable"}],"source_content_type":"text/x-python","patch_set":59,"id":"da20952f_f79ddcbb","line":234,"updated":"2015-09-10 10:13:32.000000000","message":"Nit: why not just loop around instances and add the host into source_hosts in a simple for loop?","commit_id":"fa144affa9361525a539e6985fe2ee7e1cf31728"}],"nova/objects/migration.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f84cdae531bd24637d32878fcdaec185e5095960","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @base.remotable_classmethod"},{"line_number":62,"context_line":"    def get_by_instance_with_muti_status(cls, context, instance_uuid,"},{"line_number":63,"context_line":"                                         statuses):"},{"line_number":64,"context_line":"        db_migration \u003d db.migration_get_by_instance_with_muti_status("},{"line_number":65,"context_line":"            context, instance_uuid, statuses)"}],"source_content_type":"text/x-python","patch_set":13,"id":"da9b358b_2fbc886b","line":62,"updated":"2015-03-29 05:11:22.000000000","message":"you are adding a new method you need to bump the version number","commit_id":"3278a8e5fc403fe269c8ce0895052399f4e4eb6c"}],"nova/tests/unit/objects/test_instance_group.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6fe1438dd39febb1c6c37398b25ec5eb9a39770c","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        instance.host \u003d migration[\u0027dest_compute\u0027]"},{"line_number":318,"context_line":"        instance.save()"},{"line_number":319,"context_line":"        mock.patch.object(self.context, \u0027elevated\u0027, return_value\u003dself.context)"},{"line_number":320,"context_line":"        objects.MigrationList.get_by_instances_with_multiple_statuses \u003d\\"},{"line_number":321,"context_line":"            mock.MagicMock(return_value\u003d[migration])"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        instance_ids \u003d [instance.uuid]"}],"source_content_type":"text/x-python","patch_set":29,"id":"5aa745d1_e326ab15","line":320,"updated":"2015-04-16 12:56:01.000000000","message":"please avoid using \\ for multiline statements. Please use instead:\n\n    objects.MigrationList.get_by_instances_with_multiple_statuses \u003d (\n        mock.MagicMock(return_value\u003d[migration]))","commit_id":"557ededf9afe72453293c14c3c61c50f738b9b68"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6fe1438dd39febb1c6c37398b25ec5eb9a39770c","unresolved":false,"context_lines":[{"line_number":328,"context_line":"        group \u003d instance_group.InstanceGroup.get_by_uuid(self.context,"},{"line_number":329,"context_line":"                                                         group.uuid)"},{"line_number":330,"context_line":"        hosts \u003d group.get_hosts()"},{"line_number":331,"context_line":"        objects.MigrationList.get_by_instances_with_multiple_statuses \u003d\\"},{"line_number":332,"context_line":"            mock.MagicMock(return_value\u003dNone)"},{"line_number":333,"context_line":"        self.assertEqual(2, len(hosts))"},{"line_number":334,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5aa745d1_831da7bf","line":331,"updated":"2015-04-16 12:56:01.000000000","message":"ditto","commit_id":"557ededf9afe72453293c14c3c61c50f738b9b68"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6fe1438dd39febb1c6c37398b25ec5eb9a39770c","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        hosts \u003d group.get_hosts()"},{"line_number":331,"context_line":"        objects.MigrationList.get_by_instances_with_multiple_statuses \u003d\\"},{"line_number":332,"context_line":"            mock.MagicMock(return_value\u003dNone)"},{"line_number":333,"context_line":"        self.assertEqual(2, len(hosts))"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":336,"context_line":"        group \u003d instance_group.InstanceGroup(context\u003dself.context,"}],"source_content_type":"text/x-python","patch_set":29,"id":"5aa745d1_c3d84ff2","line":333,"updated":"2015-04-16 12:56:01.000000000","message":"it would be great if you could assert what those 2 hosts are.","commit_id":"557ededf9afe72453293c14c3c61c50f738b9b68"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"bcbb2cf88c80b606edb1c79251a0acd11809a99d","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        hosts \u003d group.get_hosts()"},{"line_number":331,"context_line":"        objects.MigrationList.get_by_instances_with_multiple_statuses \u003d\\"},{"line_number":332,"context_line":"            mock.MagicMock(return_value\u003dNone)"},{"line_number":333,"context_line":"        self.assertEqual(2, len(hosts))"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def test_obj_make_compatible(self):"},{"line_number":336,"context_line":"        group \u003d instance_group.InstanceGroup(context\u003dself.context,"}],"source_content_type":"text/x-python","patch_set":29,"id":"3ab451fb_344f3694","line":333,"in_reply_to":"5aa745d1_c3d84ff2","updated":"2015-04-17 08:54:30.000000000","message":"ok, I will update it. thanks.","commit_id":"557ededf9afe72453293c14c3c61c50f738b9b68"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"24015d06663f25f3053071d2a5d9dfea7810ba8c","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        self.assertEqual(1, len(hosts))"},{"line_number":307,"context_line":"        self.assertIn(\u0027hostB\u0027, hosts)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_get_hosts_with_migrating_instances(self):"},{"line_number":310,"context_line":"        instance \u003d tests_utils.get_test_instance("},{"line_number":311,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":312,"context_line":"        migration \u003d test_migration.fake_db_migration()"}],"source_content_type":"text/x-python","patch_set":33,"id":"7ad32947_0c68c0f4","line":309,"updated":"2015-04-27 18:17:14.000000000","message":"I would also like to see a migration with a status other than the expected ones: [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027, \u0027reverted\u0027] to make sure that instances with other statuses are not included.","commit_id":"ef84884a11d94143b51db210a17fed19ef4b9536"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"06d37513dd5b96650856c4ad783ece6834a3e05c","unresolved":false,"context_lines":[{"line_number":306,"context_line":"        self.assertEqual(1, len(hosts))"},{"line_number":307,"context_line":"        self.assertIn(\u0027hostB\u0027, hosts)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"    def test_get_hosts_with_migrating_instances(self):"},{"line_number":310,"context_line":"        instance \u003d tests_utils.get_test_instance("},{"line_number":311,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":312,"context_line":"        migration \u003d test_migration.fake_db_migration()"}],"source_content_type":"text/x-python","patch_set":33,"id":"7ad32947_21f3770c","line":309,"in_reply_to":"7ad32947_0c68c0f4","updated":"2015-04-28 06:58:14.000000000","message":"yeah, I will add it. thanks.","commit_id":"ef84884a11d94143b51db210a17fed19ef4b9536"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"acb59da37fd2dba4b8779cb09572f926bd87a585","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        instance.host \u003d migration[\u0027dest_compute\u0027]"},{"line_number":318,"context_line":"        instance.save()"},{"line_number":319,"context_line":"        mock.patch.object(self.context, \u0027elevated\u0027, return_value\u003dself.context)"},{"line_number":320,"context_line":"        objects.MigrationList.get_by_instances_with_multiple_statuses \u003d\\"},{"line_number":321,"context_line":"            mock.MagicMock(return_value\u003d[migration])"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        instance_ids \u003d [instance.uuid]"}],"source_content_type":"text/x-python","patch_set":33,"id":"dac4157f_f1305e03","line":320,"updated":"2015-04-22 07:50:22.000000000","message":"nit: \n\n  (objects.MigrationList.get_by_instances_with_multiple_statuses \u003d \n     mock.MagicMock(return_value\u003d[migration])","commit_id":"ef84884a11d94143b51db210a17fed19ef4b9536"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"24015d06663f25f3053071d2a5d9dfea7810ba8c","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        instance.host \u003d migration[\u0027dest_compute\u0027]"},{"line_number":318,"context_line":"        instance.save()"},{"line_number":319,"context_line":"        mock.patch.object(self.context, \u0027elevated\u0027, return_value\u003dself.context)"},{"line_number":320,"context_line":"        objects.MigrationList.get_by_instances_with_multiple_statuses \u003d\\"},{"line_number":321,"context_line":"            mock.MagicMock(return_value\u003d[migration])"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        instance_ids \u003d [instance.uuid]"}],"source_content_type":"text/x-python","patch_set":33,"id":"7ad32947_ac266c14","line":320,"in_reply_to":"dac4157f_f1305e03","updated":"2015-04-27 18:17:14.000000000","message":"or:\n\n    objects.MigrationList.get_by_instances_with_multiple_statuses \u003d (\n     mock.MagicMock(return_value\u003d[migration])\n\nbut still, you are setting this method, instead of patching, which means that the original method is not set back after the test, which could result in side effects.\n\nSo, I suggest patching the method:\n\n    @mock.patch.object(objects.MigrationList, \u0027get_by_instances_with_multiple_statuses\u0027)\n    def test_get_hosts_with_migrating_instances(self, mock_get_migrations):\n    ...\n    mock.get_migrations_by_instance.return_value \u003d [migration]","commit_id":"ef84884a11d94143b51db210a17fed19ef4b9536"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"24015d06663f25f3053071d2a5d9dfea7810ba8c","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                                                         group.uuid)"},{"line_number":330,"context_line":"        hosts \u003d group.get_hosts()"},{"line_number":331,"context_line":"        objects.MigrationList.get_by_instances_with_multiple_statuses \u003d\\"},{"line_number":332,"context_line":"            mock.MagicMock(return_value\u003dNone)"},{"line_number":333,"context_line":"        self.assertEqual(2, len(hosts))"},{"line_number":334,"context_line":"        self.assertIn(\u0027compute-dest\u0027, hosts)"},{"line_number":335,"context_line":"        self.assertIn(\u0027compute-source\u0027, hosts)"}],"source_content_type":"text/x-python","patch_set":33,"id":"7ad32947_cc5e4876","line":332,"updated":"2015-04-27 18:17:14.000000000","message":"this doesn\u0027t seem to do anything, especially after you\u0027ve executed the tested method.","commit_id":"ef84884a11d94143b51db210a17fed19ef4b9536"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"06d37513dd5b96650856c4ad783ece6834a3e05c","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                                                         group.uuid)"},{"line_number":330,"context_line":"        hosts \u003d group.get_hosts()"},{"line_number":331,"context_line":"        objects.MigrationList.get_by_instances_with_multiple_statuses \u003d\\"},{"line_number":332,"context_line":"            mock.MagicMock(return_value\u003dNone)"},{"line_number":333,"context_line":"        self.assertEqual(2, len(hosts))"},{"line_number":334,"context_line":"        self.assertIn(\u0027compute-dest\u0027, hosts)"},{"line_number":335,"context_line":"        self.assertIn(\u0027compute-source\u0027, hosts)"}],"source_content_type":"text/x-python","patch_set":33,"id":"7ad32947_1ab464f0","line":332,"in_reply_to":"7ad32947_cc5e4876","updated":"2015-04-28 06:58:14.000000000","message":"yeah,I will remove it","commit_id":"ef84884a11d94143b51db210a17fed19ef4b9536"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"a98677692dfe52d6c3bfc4f825bcaac559105728","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        instance1 \u003d tests_utils.get_test_instance("},{"line_number":315,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":316,"context_line":"        migration1 \u003d test_migration.fake_db_migration()"},{"line_number":317,"context_line":"        migration1 \u003d copy.deepcopy(migration1)"},{"line_number":318,"context_line":"        migration1.update(status\u003d\u0027finished\u0027,"},{"line_number":319,"context_line":"                          new_instance_type_id\u003dinstance1.instance_type_id,"},{"line_number":320,"context_line":"                          instance_uuid\u003dinstance1.uuid)"}],"source_content_type":"text/x-python","patch_set":34,"id":"3acd31a7_fc8764d5","line":317,"updated":"2015-04-30 06:07:03.000000000","message":"no reason to do a deep copy, since test_migration.fake_db_migration() always returns a new copy.","commit_id":"5c3124fe2d7b952ebd9dfb5d62537d38aeab9042"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"4e2731addf3b4084017214c52b94505b84449b76","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        instance1 \u003d tests_utils.get_test_instance("},{"line_number":315,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":316,"context_line":"        migration1 \u003d test_migration.fake_db_migration()"},{"line_number":317,"context_line":"        migration1 \u003d copy.deepcopy(migration1)"},{"line_number":318,"context_line":"        migration1.update(status\u003d\u0027finished\u0027,"},{"line_number":319,"context_line":"                          new_instance_type_id\u003dinstance1.instance_type_id,"},{"line_number":320,"context_line":"                          instance_uuid\u003dinstance1.uuid)"}],"source_content_type":"text/x-python","patch_set":34,"id":"3acd31a7_7c90f4ec","line":317,"in_reply_to":"3acd31a7_fc8764d5","updated":"2015-04-30 06:12:34.000000000","message":"oh.., thanks.I will modify it.thanks.","commit_id":"5c3124fe2d7b952ebd9dfb5d62537d38aeab9042"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"a98677692dfe52d6c3bfc4f825bcaac559105728","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        instance2 \u003d tests_utils.get_test_instance("},{"line_number":325,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":326,"context_line":"        migration2 \u003d test_migration.fake_db_migration()"},{"line_number":327,"context_line":"        migration2 \u003d copy.deepcopy(migration2)"},{"line_number":328,"context_line":"        migration2.update(new_instance_type_id\u003dinstance2.instance_type_id,"},{"line_number":329,"context_line":"                          instance_uuid\u003dinstance2.uuid, dest_compute\u003d\u0027hostB\u0027)"},{"line_number":330,"context_line":"        instance2.host \u003d \u0027hostB\u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"3acd31a7_9c775002","line":327,"updated":"2015-04-30 06:07:03.000000000","message":"ditto","commit_id":"5c3124fe2d7b952ebd9dfb5d62537d38aeab9042"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"a98677692dfe52d6c3bfc4f825bcaac559105728","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":326,"context_line":"        migration2 \u003d test_migration.fake_db_migration()"},{"line_number":327,"context_line":"        migration2 \u003d copy.deepcopy(migration2)"},{"line_number":328,"context_line":"        migration2.update(new_instance_type_id\u003dinstance2.instance_type_id,"},{"line_number":329,"context_line":"                          instance_uuid\u003dinstance2.uuid, dest_compute\u003d\u0027hostB\u0027)"},{"line_number":330,"context_line":"        instance2.host \u003d \u0027hostB\u0027"},{"line_number":331,"context_line":"        instance2.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"3acd31a7_fc5e4475","line":328,"updated":"2015-04-30 06:07:03.000000000","message":"I assume migration1 should be fine, since it is in a expected migration status. But I think migration2.update is missing a ``status\u003d\u0027other_state\u0027``, as I assume that you wanted to add a case where a migration was in another state than expected migration states, as per my comment on the last patchset. Correct?","commit_id":"5c3124fe2d7b952ebd9dfb5d62537d38aeab9042"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"f43ec8d219d167f55d0b33781946d9092727427f","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":326,"context_line":"        migration2 \u003d test_migration.fake_db_migration()"},{"line_number":327,"context_line":"        migration2 \u003d copy.deepcopy(migration2)"},{"line_number":328,"context_line":"        migration2.update(new_instance_type_id\u003dinstance2.instance_type_id,"},{"line_number":329,"context_line":"                          instance_uuid\u003dinstance2.uuid, dest_compute\u003d\u0027hostB\u0027)"},{"line_number":330,"context_line":"        instance2.host \u003d \u0027hostB\u0027"},{"line_number":331,"context_line":"        instance2.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"3acd31a7_f63051ea","line":328,"in_reply_to":"3acd31a7_dc8948cc","updated":"2015-05-04 09:02:57.000000000","message":"Maybe, I need to set it explicitly. thanks.","commit_id":"5c3124fe2d7b952ebd9dfb5d62537d38aeab9042"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"c15ec14241ec71c7047f564e088089386f757946","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":326,"context_line":"        migration2 \u003d test_migration.fake_db_migration()"},{"line_number":327,"context_line":"        migration2 \u003d copy.deepcopy(migration2)"},{"line_number":328,"context_line":"        migration2.update(new_instance_type_id\u003dinstance2.instance_type_id,"},{"line_number":329,"context_line":"                          instance_uuid\u003dinstance2.uuid, dest_compute\u003d\u0027hostB\u0027)"},{"line_number":330,"context_line":"        instance2.host \u003d \u0027hostB\u0027"},{"line_number":331,"context_line":"        instance2.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"3acd31a7_8c6eb0ff","line":328,"in_reply_to":"3acd31a7_f63051ea","updated":"2015-05-04 11:50:37.000000000","message":"well, the point to having 2 migrations in this test was to make sure that you don\u0027t process migrations in other statuses than [\u0027post-migrating\u0027, \u0027finished\u0027, \u0027reverting\u0027, \u0027reverted\u0027], right? So, having another migration with status \u0027migrating\u0027 is not very helpful. That is why I was suggesting a migration with some status \u0027other_status\u0027, to make sure it won\u0027t be processed.","commit_id":"5c3124fe2d7b952ebd9dfb5d62537d38aeab9042"},{"author":{"_account_id":11530,"name":"zhangtralon","email":"ztralon@hotmail.com","username":"zhangtralon"},"change_message_id":"4e2731addf3b4084017214c52b94505b84449b76","unresolved":false,"context_lines":[{"line_number":325,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":326,"context_line":"        migration2 \u003d test_migration.fake_db_migration()"},{"line_number":327,"context_line":"        migration2 \u003d copy.deepcopy(migration2)"},{"line_number":328,"context_line":"        migration2.update(new_instance_type_id\u003dinstance2.instance_type_id,"},{"line_number":329,"context_line":"                          instance_uuid\u003dinstance2.uuid, dest_compute\u003d\u0027hostB\u0027)"},{"line_number":330,"context_line":"        instance2.host \u003d \u0027hostB\u0027"},{"line_number":331,"context_line":"        instance2.save()"}],"source_content_type":"text/x-python","patch_set":34,"id":"3acd31a7_dc8948cc","line":328,"in_reply_to":"3acd31a7_fc5e4475","updated":"2015-04-30 06:12:34.000000000","message":"hi, Claudiu Belu. the migration2 uses the default status \"migrating\" ,which is not the expected migration states.thanks.","commit_id":"5c3124fe2d7b952ebd9dfb5d62537d38aeab9042"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"08973db3609bdc82f25066e97059dbc33b83f96f","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        instance2.save()"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        mock_context.return_value \u003d self.context"},{"line_number":245,"context_line":"        mock_get_migrations.return_value \u003d [migration1]"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        instance_ids \u003d [instance1.uuid, instance2.uuid]"},{"line_number":248,"context_line":"        values \u003d self._get_default_values()"}],"source_content_type":"text/x-python","patch_set":55,"id":"fa1b9901_b77dd81d","line":245,"range":{"start_line":245,"start_character":5,"end_line":245,"end_character":55},"updated":"2015-08-26 10:07:35.000000000","message":"Why do you return only migration1 and not both migration1 and migration2?","commit_id":"0a47d22699d5cae8f379e3248422abd28ec8ce23"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"709ccf2f02f5ea996a8ed92877a4ae4b06f1e484","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            self.context, flavor\u003dflavors.get_default_flavor(), obj\u003dTrue)"},{"line_number":240,"context_line":"        migration2 \u003d test_migration.fake_db_migration()"},{"line_number":241,"context_line":"        migration2.update(new_instance_type_id\u003dinstance2.instance_type_id,"},{"line_number":242,"context_line":"                          instance_uuid\u003dinstance2.uuid, dest_compute\u003d\u0027hostB\u0027)"},{"line_number":243,"context_line":"        instance2.host \u003d \u0027hostB\u0027"},{"line_number":244,"context_line":"        instance2.save()"},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"da20952f_9028d3e3","line":242,"updated":"2015-08-31 10:44:23.000000000","message":"It seems to me that something is wrong with the test. You added the migration2 to the return_value of the get_by_instances_with_multiple_statuses and none of the asserts are changed due to that. So either the migration2 does not needed at all, or migration2 should change the result of your test","commit_id":"e58e1f65dc408f2a9997221e5cadf302517e60fc"}]}
