)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"c05d9ff3f6c8e19dc5cb21018f2963c3d93767c8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify workflow of rebuild_instance when schedule fails"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Objects.migration is created in nova.api, and it\u0027s initial"},{"line_number":10,"context_line":"status is \u0027accepted\u0027. In nova.conductor, there\u0027s nothing to"},{"line_number":11,"context_line":"do about migration when NoValidHost or UnsupportedPolicyException"},{"line_number":12,"context_line":"occurs. I will fix it."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bacf61ea_0a1e905e","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":40},"updated":"2016-07-31 21:02:09.000000000","message":"could you please point me to the code that creates migration object for rebuild?","commit_id":"ebb6d7b186f95bbe7f769870781529a12b8e5348"},{"author":{"_account_id":17288,"name":"liuxiuli","email":"liu.lixiu@zte.com.cn","username":"liu-lixiu"},"change_message_id":"d219e96322b3011670e0d59bec59dd97de857ee6","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Modify workflow of rebuild_instance when schedule fails"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Objects.migration is created in nova.api, and it\u0027s initial"},{"line_number":10,"context_line":"status is \u0027accepted\u0027. In nova.conductor, there\u0027s nothing to"},{"line_number":11,"context_line":"do about migration when NoValidHost or UnsupportedPolicyException"},{"line_number":12,"context_line":"occurs. I will fix it."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"bacf61ea_c67c70b7","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":40},"in_reply_to":"bacf61ea_0a1e905e","updated":"2016-08-01 03:34:39.000000000","message":"Thank you for your review. Sorry, it is my mistake. I want to express that Objects.migration is created in evacuate api before calling rebuild_instance. I will modify the commit message.","commit_id":"ebb6d7b186f95bbe7f769870781529a12b8e5348"}],"nova/conductor/manager.py":[{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"d9a53b5d2a38d7d12a74c50f2b9cf87e6804a29a","unresolved":false,"context_lines":[{"line_number":670,"context_line":"                                          host_dict[\u0027limits\u0027])"},{"line_number":671,"context_line":"                except exception.NoValidHost as ex:"},{"line_number":672,"context_line":"                    _fail_migration(migration)"},{"line_number":673,"context_line":"                    with excutils.save_and_reraise_exception():"},{"line_number":674,"context_line":"                        self._set_vm_state_and_notify(context, instance.uuid,"},{"line_number":675,"context_line":"                                \u0027rebuild_server\u0027,"},{"line_number":676,"context_line":"                                {\u0027vm_state\u0027: instance.vm_state,"},{"line_number":677,"context_line":"                                 \u0027task_state\u0027: None}, ex, request_spec)"},{"line_number":678,"context_line":"                        LOG.warning(_LW(\"No valid host found for rebuild\"),"},{"line_number":679,"context_line":"                                    instance\u003dinstance)"},{"line_number":680,"context_line":"                except exception.UnsupportedPolicyException as ex:"},{"line_number":681,"context_line":"                    _fail_migration(migration)"},{"line_number":682,"context_line":"                    with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_c1c18130","line":679,"range":{"start_line":673,"start_character":0,"end_line":679,"end_character":54},"updated":"2016-07-28 08:31:49.000000000","message":"Why didn\u0027t you move this part too?","commit_id":"485b55dbd64cfb2d10642793c59de5714599c134"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"d9a53b5d2a38d7d12a74c50f2b9cf87e6804a29a","unresolved":false,"context_lines":[{"line_number":679,"context_line":"                                    instance\u003dinstance)"},{"line_number":680,"context_line":"                except exception.UnsupportedPolicyException as ex:"},{"line_number":681,"context_line":"                    _fail_migration(migration)"},{"line_number":682,"context_line":"                    with excutils.save_and_reraise_exception():"},{"line_number":683,"context_line":"                        self._set_vm_state_and_notify(context, instance.uuid,"},{"line_number":684,"context_line":"                                \u0027rebuild_server\u0027,"},{"line_number":685,"context_line":"                                {\u0027vm_state\u0027: instance.vm_state,"},{"line_number":686,"context_line":"                                 \u0027task_state\u0027: None}, ex, request_spec)"},{"line_number":687,"context_line":"                        LOG.warning(_LW(\"Server with unsupported policy \""},{"line_number":688,"context_line":"                                        \"cannot be rebuilt\"),"},{"line_number":689,"context_line":"                                    instance\u003dinstance)"},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"            compute_utils.notify_about_instance_usage("},{"line_number":692,"context_line":"                self.notifier, context, instance, \"rebuild.scheduled\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_81ce6958","line":689,"range":{"start_line":682,"start_character":0,"end_line":689,"end_character":54},"updated":"2016-07-28 08:31:49.000000000","message":"Why didn\u0027t you move this part too?","commit_id":"485b55dbd64cfb2d10642793c59de5714599c134"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6e0f0b6d1ac61df8dfa1e1204013cee5e19979b5","unresolved":false,"context_lines":[{"line_number":694,"context_line":"                    _fail_migration(instance, migration, request_spec, ex,"},{"line_number":695,"context_line":"                                    errinfo)"},{"line_number":696,"context_line":"                except exception.UnsupportedPolicyException as ex:"},{"line_number":697,"context_line":"                    errinfo \u003d \"Server with unsupported policy cannot be\" \\"},{"line_number":698,"context_line":"                              \" rebuilt\""},{"line_number":699,"context_line":"                    _fail_migration(instance, migration, request_spec, ex,"},{"line_number":700,"context_line":"                                    errinfo)"},{"line_number":701,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa7ab95a_3284d55c","line":698,"range":{"start_line":697,"start_character":20,"end_line":698,"end_character":40},"updated":"2016-08-29 13:00:01.000000000","message":"nit, you should wrap line like this:\n\nerrinfo \u003d (\"Server with unsupported policy cannot be \"\n                 \"rebuilt\")\n\nAnd we should use rebuild instead of rebuilt.","commit_id":"563013213160d487300170b16ade84958022779e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"eb043d691697acfcc8756538317329c2567ba9fc","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            except exception.MigrationNotFoundByStatus:"},{"line_number":646,"context_line":"                LOG.debug(\"No migration record for the rebuild/evacuate \""},{"line_number":647,"context_line":"                          \"request.\", instance\u003dinstance)"},{"line_number":648,"context_line":"                migration \u003d None"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"            def _fail_migration(instance, migration, request_spec, ex,"},{"line_number":651,"context_line":"                                errinfo):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_3e49c9b7","line":648,"updated":"2016-08-30 08:22:25.000000000","message":"Should we not fail here? Or does only evacuate create a migration record? I know this is a cut an paste, but I am curious if this is correct.","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"35a03daca0f9450d0387f65ef90079aa744e3588","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            except exception.MigrationNotFoundByStatus:"},{"line_number":646,"context_line":"                LOG.debug(\"No migration record for the rebuild/evacuate \""},{"line_number":647,"context_line":"                          \"request.\", instance\u003dinstance)"},{"line_number":648,"context_line":"                migration \u003d None"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"            def _fail_migration(instance, migration, request_spec, ex,"},{"line_number":651,"context_line":"                                errinfo):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_a214c54c","line":648,"in_reply_to":"fa7ab95a_3e49c9b7","updated":"2016-08-30 13:13:48.000000000","message":"@John, we didn\u0027t create migration for rebuild action. Only the evacuate action create it. If we failed at here, the rebuild action will be broken.","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":17288,"name":"liuxiuli","email":"liu.lixiu@zte.com.cn","username":"liu-lixiu"},"change_message_id":"743cafc67857d3c6a46fda94719afb59cc1b9e8c","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            except exception.MigrationNotFoundByStatus:"},{"line_number":646,"context_line":"                LOG.debug(\"No migration record for the rebuild/evacuate \""},{"line_number":647,"context_line":"                          \"request.\", instance\u003dinstance)"},{"line_number":648,"context_line":"                migration \u003d None"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"            def _fail_migration(instance, migration, request_spec, ex,"},{"line_number":651,"context_line":"                                errinfo):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_9bc73995","line":648,"in_reply_to":"fa7ab95a_3e49c9b7","updated":"2016-08-30 11:21:05.000000000","message":"Done","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0ed1ac7ab42a6332c06dd2c4b7aad34792124431","unresolved":false,"context_lines":[{"line_number":645,"context_line":"            except exception.MigrationNotFoundByStatus:"},{"line_number":646,"context_line":"                LOG.debug(\"No migration record for the rebuild/evacuate \""},{"line_number":647,"context_line":"                          \"request.\", instance\u003dinstance)"},{"line_number":648,"context_line":"                migration \u003d None"},{"line_number":649,"context_line":""},{"line_number":650,"context_line":"            def _fail_migration(instance, migration, request_spec, ex,"},{"line_number":651,"context_line":"                                errinfo):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_3566312a","line":648,"in_reply_to":"fa7ab95a_a214c54c","updated":"2016-08-30 13:23:55.000000000","message":"Yeah, thats what I thought. Lets just make the log message clear, and maybe add a TODO to pass the migration object down from the API so we don\u0027t have to do this here.","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"eb043d691697acfcc8756538317329c2567ba9fc","unresolved":false,"context_lines":[{"line_number":652,"context_line":"                if migration:"},{"line_number":653,"context_line":"                    migration.status \u003d \u0027failed\u0027"},{"line_number":654,"context_line":"                    migration.save()"},{"line_number":655,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":656,"context_line":"                    self._set_vm_state_and_notify("},{"line_number":657,"context_line":"                        context, instance.uuid, \u0027rebuild_server\u0027,"},{"line_number":658,"context_line":"                        {\u0027vm_state\u0027: instance.vm_state,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_1ef2459a","line":655,"updated":"2016-08-30 08:22:25.000000000","message":"I think we really want this to be first in this function.  If we have an issue saving the migration, it will hide the original problem, which is the opposite of what we want to do here.","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":17288,"name":"liuxiuli","email":"liu.lixiu@zte.com.cn","username":"liu-lixiu"},"change_message_id":"743cafc67857d3c6a46fda94719afb59cc1b9e8c","unresolved":false,"context_lines":[{"line_number":652,"context_line":"                if migration:"},{"line_number":653,"context_line":"                    migration.status \u003d \u0027failed\u0027"},{"line_number":654,"context_line":"                    migration.save()"},{"line_number":655,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":656,"context_line":"                    self._set_vm_state_and_notify("},{"line_number":657,"context_line":"                        context, instance.uuid, \u0027rebuild_server\u0027,"},{"line_number":658,"context_line":"                        {\u0027vm_state\u0027: instance.vm_state,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_18296f8a","line":655,"in_reply_to":"fa7ab95a_1ef2459a","updated":"2016-08-30 11:21:05.000000000","message":"Done","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"eb043d691697acfcc8756538317329c2567ba9fc","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                                          host_dict[\u0027nodename\u0027],"},{"line_number":691,"context_line":"                                          host_dict[\u0027limits\u0027])"},{"line_number":692,"context_line":"                except exception.NoValidHost as ex:"},{"line_number":693,"context_line":"                    errinfo \u003d \"No valid host found for rebuild\""},{"line_number":694,"context_line":"                    _fail_migration(instance, migration, request_spec, ex,"},{"line_number":695,"context_line":"                                    errinfo)"},{"line_number":696,"context_line":"                except exception.UnsupportedPolicyException as ex:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_79328ba8","line":693,"updated":"2016-08-30 08:22:25.000000000","message":"I think we really should have the _LW() around the text here, to help the translators find these strings, if they need to.","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"eb043d691697acfcc8756538317329c2567ba9fc","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                                          host_dict[\u0027nodename\u0027],"},{"line_number":691,"context_line":"                                          host_dict[\u0027limits\u0027])"},{"line_number":692,"context_line":"                except exception.NoValidHost as ex:"},{"line_number":693,"context_line":"                    errinfo \u003d \"No valid host found for rebuild\""},{"line_number":694,"context_line":"                    _fail_migration(instance, migration, request_spec, ex,"},{"line_number":695,"context_line":"                                    errinfo)"},{"line_number":696,"context_line":"                except exception.UnsupportedPolicyException as ex:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_99dcaf47","line":693,"range":{"start_line":693,"start_character":20,"end_line":693,"end_character":27},"updated":"2016-08-30 08:22:25.000000000","message":"warning_message maybe?","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":17288,"name":"liuxiuli","email":"liu.lixiu@zte.com.cn","username":"liu-lixiu"},"change_message_id":"743cafc67857d3c6a46fda94719afb59cc1b9e8c","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                                          host_dict[\u0027nodename\u0027],"},{"line_number":691,"context_line":"                                          host_dict[\u0027limits\u0027])"},{"line_number":692,"context_line":"                except exception.NoValidHost as ex:"},{"line_number":693,"context_line":"                    errinfo \u003d \"No valid host found for rebuild\""},{"line_number":694,"context_line":"                    _fail_migration(instance, migration, request_spec, ex,"},{"line_number":695,"context_line":"                                    errinfo)"},{"line_number":696,"context_line":"                except exception.UnsupportedPolicyException as ex:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_78227ba4","line":693,"in_reply_to":"fa7ab95a_79328ba8","updated":"2016-08-30 11:21:05.000000000","message":"Done","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":17288,"name":"liuxiuli","email":"liu.lixiu@zte.com.cn","username":"liu-lixiu"},"change_message_id":"743cafc67857d3c6a46fda94719afb59cc1b9e8c","unresolved":false,"context_lines":[{"line_number":690,"context_line":"                                          host_dict[\u0027nodename\u0027],"},{"line_number":691,"context_line":"                                          host_dict[\u0027limits\u0027])"},{"line_number":692,"context_line":"                except exception.NoValidHost as ex:"},{"line_number":693,"context_line":"                    errinfo \u003d \"No valid host found for rebuild\""},{"line_number":694,"context_line":"                    _fail_migration(instance, migration, request_spec, ex,"},{"line_number":695,"context_line":"                                    errinfo)"},{"line_number":696,"context_line":"                except exception.UnsupportedPolicyException as ex:"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa7ab95a_983d7fc6","line":693,"range":{"start_line":693,"start_character":20,"end_line":693,"end_character":27},"in_reply_to":"fa7ab95a_99dcaf47","updated":"2016-08-30 11:21:05.000000000","message":"Done","commit_id":"04e6c997421a8b7eaccd3db9a84c66493db986a8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"60426c83a7c618afa650a291dfce39604aa7b0bd","unresolved":false,"context_lines":[{"line_number":641,"context_line":"            node \u003d limits \u003d None"},{"line_number":642,"context_line":"            if recreate:"},{"line_number":643,"context_line":"                try:"},{"line_number":644,"context_line":"                    migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":645,"context_line":"                        context, instance.uuid, \u0027accepted\u0027)"},{"line_number":646,"context_line":"                except exception.MigrationNotFoundByStatus:"},{"line_number":647,"context_line":"                    with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa7ab95a_b844f849","line":644,"updated":"2016-08-30 13:25:29.000000000","message":"Nit: its tempting to add a TODO to pass in the migration object, so we don\u0027t need to worry about all this.","commit_id":"1556a6c4dfb32957fe3ea125bb8956987814a57d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"0281d7186c1d76cdefadafcb6c2ea4b534ee100d","unresolved":false,"context_lines":[{"line_number":641,"context_line":"            node \u003d limits \u003d None"},{"line_number":642,"context_line":"            if recreate:"},{"line_number":643,"context_line":"                try:"},{"line_number":644,"context_line":"                    migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":645,"context_line":"                        context, instance.uuid, \u0027accepted\u0027)"},{"line_number":646,"context_line":"                except exception.MigrationNotFoundByStatus:"},{"line_number":647,"context_line":"                    with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa7ab95a_b33df9c5","line":644,"in_reply_to":"fa7ab95a_b844f849","updated":"2016-08-30 13:38:37.000000000","message":"Lets add this in, otherwise we will forget again.","commit_id":"1556a6c4dfb32957fe3ea125bb8956987814a57d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"60426c83a7c618afa650a291dfce39604aa7b0bd","unresolved":false,"context_lines":[{"line_number":648,"context_line":"                        LOG.error(_LE(\"No migration record for the evacuate \""},{"line_number":649,"context_line":"                                      \"request.\", instance\u003dinstance))"},{"line_number":650,"context_line":"            else:"},{"line_number":651,"context_line":"                migration \u003d None"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"            def _fail_migration(instance, migration, request_spec, ex,"},{"line_number":654,"context_line":"                                warning_message):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa7ab95a_582ccc98","line":651,"updated":"2016-08-30 13:25:29.000000000","message":"Nit: its tempting to add a comment about why we do this.","commit_id":"1556a6c4dfb32957fe3ea125bb8956987814a57d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"60426c83a7c618afa650a291dfce39604aa7b0bd","unresolved":false,"context_lines":[{"line_number":652,"context_line":""},{"line_number":653,"context_line":"            def _fail_migration(instance, migration, request_spec, ex,"},{"line_number":654,"context_line":"                                warning_message):"},{"line_number":655,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":656,"context_line":"                    if migration:"},{"line_number":657,"context_line":"                        migration.status \u003d \u0027failed\u0027"},{"line_number":658,"context_line":"                        migration.save()"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa7ab95a_1846c44e","line":655,"updated":"2016-08-30 13:25:29.000000000","message":"thanks.","commit_id":"1556a6c4dfb32957fe3ea125bb8956987814a57d"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"5cf58c23cb6f0479d71e69d5191a885d303c24d6","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        with compute_utils.EventReporter(context, \u0027rebuild_server\u0027,"},{"line_number":666,"context_line":"                                         instance.uuid):"},{"line_number":667,"context_line":"            node \u003d limits \u003d None"},{"line_number":668,"context_line":"            if recreate:"},{"line_number":669,"context_line":"                # TODO(liuxl): Evacuate action create migration, but it does"},{"line_number":670,"context_line":"                # not be passed by parameter, so we need get migration object"},{"line_number":671,"context_line":"                # now. We want to fix it in future"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a95cdbc_b2440f4a","line":668,"range":{"start_line":668,"start_character":12,"end_line":668,"end_character":24},"updated":"2016-10-10 09:29:59.000000000","message":"tbh I\u0027d not rely on that param, but bump rpc and start passing migration object instead.","commit_id":"2a87cf0aa72c262d8f761297424e13bf63812b97"}]}
