)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1f0cebf848cf009de74b0f763453860ef034116e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We need to calculate assignments based on tracked instances and"},{"line_number":10,"context_line":"migrations, so we take orphan instances and error migrations into"},{"line_number":11,"context_line":"consideration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ida8dc7a01db096c269ef18656c5a373ce08ee58c"},{"line_number":14,"context_line":"Partially-Implements: blueprint virtual-persistent-memory"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7faddb67_f7f551cd","line":11,"updated":"2019-08-28 05:04:48.000000000","message":"good to have a separate bug filed for orphan instance and error migration.","commit_id":"b6d616666f4ac361b886cfec87c1c7dccc1af2ef"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"65d220fc975dc5729ced4a482bf5f970923a312b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We need to calculate assignments based on tracked instances and"},{"line_number":10,"context_line":"migrations, so we take orphan instances and error migrations into"},{"line_number":11,"context_line":"consideration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ida8dc7a01db096c269ef18656c5a373ce08ee58c"},{"line_number":14,"context_line":"Partially-Implements: blueprint virtual-persistent-memory"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7faddb67_d74055a5","line":11,"in_reply_to":"7faddb67_f7f551cd","updated":"2019-08-28 05:41:13.000000000","message":"Got it. And because this is more like bug-fix, I will move this out of the virtual-persistent-memory patch series.","commit_id":"b6d616666f4ac361b886cfec87c1c7dccc1af2ef"}],"nova/compute/manager.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d9cfd5f82a9f540f60cd61d1fba04ec575e72bc","unresolved":false,"context_lines":[{"line_number":933,"context_line":"                          instance\u003dinstance)"},{"line_number":934,"context_line":"        finally:"},{"line_number":935,"context_line":"            if migration:"},{"line_number":936,"context_line":"                self.compute_rpcapi.rollback_live_migration_at_destination("},{"line_number":937,"context_line":"                    context, instance, migration.dest_compute,"},{"line_number":938,"context_line":"                    destroy_disks\u003dFalse, migrate_data\u003dNone)"},{"line_number":939,"context_line":"                # NOTE(luyao): we track error migrations in resource tracker"}],"source_content_type":"text/x-python","patch_set":12,"id":"1fa4df85_f68f6e27","line":936,"updated":"2020-03-19 11:30:40.000000000","message":"This seems not covered by test case.","commit_id":"5956ab4dd12849876a5f4345b7a7ecdcee7af2bc"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d9cfd5f82a9f540f60cd61d1fba04ec575e72bc","unresolved":false,"context_lines":[{"line_number":10267,"context_line":"                        # from the source or destination compute nodes when"},{"line_number":10268,"context_line":"                        # the instance is deleted during resizing."},{"line_number":10269,"context_line":"                        self.driver.delete_instance_files(instance)"},{"line_number":10270,"context_line":"                        prefix \u003d \u0027old_\u0027 if \\"},{"line_number":10271,"context_line":"                            migration.source_compute \u003d\u003d CONF.host else \u0027new_\u0027"},{"line_number":10272,"context_line":"                        with instance.mutated_migration_context(prefix\u003dprefix):"},{"line_number":10273,"context_line":"                            # Cleanup specific resources, such as vpmems"}],"source_content_type":"text/x-python","patch_set":12,"id":"1fa4df85_76105e4f","line":10270,"range":{"start_line":10270,"start_character":43,"end_line":10270,"end_character":44},"updated":"2020-03-19 11:30:40.000000000","message":"Our convention has always been to use an open paren as a line break, other than in the db_api code.","commit_id":"5956ab4dd12849876a5f4345b7a7ecdcee7af2bc"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1f0cebf848cf009de74b0f763453860ef034116e","unresolved":false,"context_lines":[{"line_number":760,"context_line":"        instance_by_uuid \u003d self._update_usage_from_instances("},{"line_number":761,"context_line":"            context, instances, nodename)"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"        # Grab all in-progress migrations:"},{"line_number":764,"context_line":"        migrations \u003d objects.MigrationList.get_in_progress_by_host_and_node("},{"line_number":765,"context_line":"                context, self.host, nodename)"},{"line_number":766,"context_line":""},{"line_number":767,"context_line":"        self._pair_instances_to_migrations(migrations, instance_by_uuid)"},{"line_number":768,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_5741c509","line":765,"range":{"start_line":763,"start_character":7,"end_line":765,"end_character":45},"updated":"2019-08-28 05:04:48.000000000","message":"It will be great you put this and the error migration into a sub method, and filter them out by one DB call.","commit_id":"b6d616666f4ac361b886cfec87c1c7dccc1af2ef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1f0cebf848cf009de74b0f763453860ef034116e","unresolved":false,"context_lines":[{"line_number":766,"context_line":""},{"line_number":767,"context_line":"        self._pair_instances_to_migrations(migrations, instance_by_uuid)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        # Grab all error migrations:"},{"line_number":770,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":771,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027})"},{"line_number":772,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_97373db0","line":769,"range":{"start_line":769,"start_character":8,"end_line":769,"end_character":36},"updated":"2019-08-28 05:04:48.000000000","message":"Good to have comment to explain why we need those rror migrations, and explain the _cleanup_incomplete_migration will cleanup those migration, when those migration turn into fail status, then it won\u0027t be tracked anymore.","commit_id":"b6d616666f4ac361b886cfec87c1c7dccc1af2ef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1f0cebf848cf009de74b0f763453860ef034116e","unresolved":false,"context_lines":[{"line_number":766,"context_line":""},{"line_number":767,"context_line":"        self._pair_instances_to_migrations(migrations, instance_by_uuid)"},{"line_number":768,"context_line":""},{"line_number":769,"context_line":"        # Grab all error migrations:"},{"line_number":770,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":771,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027})"},{"line_number":772,"context_line":""},{"line_number":773,"context_line":"        migrations \u003d migrations + error_migrations"},{"line_number":774,"context_line":"        self._update_usage_from_migrations(context, migrations, nodename)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_57cc65ba","line":771,"range":{"start_line":769,"start_character":8,"end_line":771,"end_character":64},"updated":"2019-08-28 05:04:48.000000000","message":"we should only include the resize error migration, right? Since the live-migraiton has it own rollback method, it won\u0027t be a error migration until the rollback successful.","commit_id":"b6d616666f4ac361b886cfec87c1c7dccc1af2ef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1f0cebf848cf009de74b0f763453860ef034116e","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        orphans, orphan_uuids \u003d self._find_orphaned_instances()"},{"line_number":787,"context_line":"        self._update_usage_from_orphans(orphans, nodename)"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"        orphan_insts \u003d objects.InstanceList.get_by_filters("},{"line_number":790,"context_line":"            context, {\u0027uuid\u0027: orphan_uuids},"},{"line_number":791,"context_line":"            expected_attrs\u003d[\u0027migration_context\u0027], use_slave\u003dTrue)"},{"line_number":792,"context_line":"        for instance in orphan_insts:"},{"line_number":793,"context_line":"            migration_ctxt \u003d instance.migration_context"},{"line_number":794,"context_line":"            if not migration_ctxt:"},{"line_number":795,"context_line":"                self.tracked_instances.add(instance.uuid)"},{"line_number":796,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_575a25f2","line":793,"range":{"start_line":789,"start_character":8,"end_line":793,"end_character":55},"updated":"2019-08-28 05:04:48.000000000","message":"good to have a comment about this. I forget why we need to take care the migration case at here again.","commit_id":"b6d616666f4ac361b886cfec87c1c7dccc1af2ef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1f0cebf848cf009de74b0f763453860ef034116e","unresolved":false,"context_lines":[{"line_number":1480,"context_line":"        uuids2 \u003d frozenset(self.tracked_migrations.keys())"},{"line_number":1481,"context_line":"        uuids \u003d uuids1 | uuids2"},{"line_number":1482,"context_line":""},{"line_number":1483,"context_line":"        usage \u003d self.driver.get_per_instance_usage()"},{"line_number":1484,"context_line":"        vuuids \u003d frozenset(usage.keys())"},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"        orphan_uuids \u003d vuuids - uuids"}],"source_content_type":"text/x-python","patch_set":4,"id":"7faddb67_7702c1bc","line":1483,"range":{"start_line":1483,"start_character":28,"end_line":1483,"end_character":50},"updated":"2019-08-28 05:04:48.000000000","message":"we should use driver.list_instance_uuids instead of this method, right? since driver.get_per_instance_usage doesn\u0027t implement by most of driver.","commit_id":"b6d616666f4ac361b886cfec87c1c7dccc1af2ef"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"73c9bcfaa9dd3e4f47842819f9d25d70c1efe9c3","unresolved":false,"context_lines":[{"line_number":763,"context_line":""},{"line_number":764,"context_line":"        # Grab all error migrations:"},{"line_number":765,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":766,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027})"},{"line_number":767,"context_line":""},{"line_number":768,"context_line":"        migrations \u003d migrations + error_migrations"},{"line_number":769,"context_line":"        self._update_usage_from_migrations(context, migrations, nodename)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7faddb67_2a7829f6","line":766,"range":{"start_line":766,"start_character":25,"end_line":766,"end_character":63},"updated":"2019-08-30 18:20:43.000000000","message":"migrations are filtered with nodename at line 760, and the migrations are used with nodename at line 769.\nDon\u0027t we need to specify nodename here to get error_migrations which are related to the nodename?","commit_id":"025c2f83aa6135c9460f10062eabc35476ca0c35"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"c44e47baf50ceb768da9eda7e5a2ba769d08e78b","unresolved":false,"context_lines":[{"line_number":763,"context_line":""},{"line_number":764,"context_line":"        # Grab all error migrations:"},{"line_number":765,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":766,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027})"},{"line_number":767,"context_line":""},{"line_number":768,"context_line":"        migrations \u003d migrations + error_migrations"},{"line_number":769,"context_line":"        self._update_usage_from_migrations(context, migrations, nodename)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_c9bdc069","line":766,"range":{"start_line":766,"start_character":25,"end_line":766,"end_character":63},"in_reply_to":"1fa4df85_96cdda31","updated":"2020-03-24 11:39:28.000000000","message":"sorry I missed this comment. I‘ll add node filter","commit_id":"025c2f83aa6135c9460f10062eabc35476ca0c35"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d9cfd5f82a9f540f60cd61d1fba04ec575e72bc","unresolved":false,"context_lines":[{"line_number":763,"context_line":""},{"line_number":764,"context_line":"        # Grab all error migrations:"},{"line_number":765,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":766,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027})"},{"line_number":767,"context_line":""},{"line_number":768,"context_line":"        migrations \u003d migrations + error_migrations"},{"line_number":769,"context_line":"        self._update_usage_from_migrations(context, migrations, nodename)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1fa4df85_96cdda31","line":766,"range":{"start_line":766,"start_character":25,"end_line":766,"end_character":63},"in_reply_to":"7faddb67_2a7829f6","updated":"2020-03-19 11:30:40.000000000","message":"I am confusing this too.","commit_id":"025c2f83aa6135c9460f10062eabc35476ca0c35"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d9cfd5f82a9f540f60cd61d1fba04ec575e72bc","unresolved":false,"context_lines":[{"line_number":890,"context_line":"        self._pair_instances_to_migrations(migrations, instance_by_uuid)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        # Grab all error migrations:"},{"line_number":893,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":894,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027})"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        migrations \u003d migrations + error_migrations"}],"source_content_type":"text/x-python","patch_set":12,"id":"1fa4df85_161ecaba","line":893,"updated":"2020-03-19 11:30:40.000000000","message":"It seems not covered by tests.","commit_id":"5956ab4dd12849876a5f4345b7a7ecdcee7af2bc"},{"author":{"_account_id":23598,"name":"Zhong Luyao","email":"luyao.zhong@intel.com","username":"ZhongLuyao"},"change_message_id":"47a14c01445092a03ccdd8809d3618f12e0361bd","unresolved":false,"context_lines":[{"line_number":890,"context_line":"        self._pair_instances_to_migrations(migrations, instance_by_uuid)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"        # Grab all error migrations:"},{"line_number":893,"context_line":"        error_migrations \u003d objects.MigrationList.get_by_filters("},{"line_number":894,"context_line":"                context, {\u0027host\u0027: self.host, \u0027status\u0027: \u0027error\u0027})"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        migrations \u003d migrations + error_migrations"}],"source_content_type":"text/x-python","patch_set":12,"id":"1fa4df85_ff3c0de2","line":893,"in_reply_to":"1fa4df85_161ecaba","updated":"2020-03-20 10:46:10.000000000","message":"Yes, I don\u0027t add enough test cases yet, I\u0027ll do that when the implementation detail is accepted by community.","commit_id":"5956ab4dd12849876a5f4345b7a7ecdcee7af2bc"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d9cfd5f82a9f540f60cd61d1fba04ec575e72bc","unresolved":false,"context_lines":[{"line_number":909,"context_line":"        orphans \u003d self._find_orphaned_instances()"},{"line_number":910,"context_line":"        self._update_usage_from_orphans(orphans, nodename)"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"        uuids1 \u003d frozenset(self.tracked_instances)"},{"line_number":913,"context_line":"        uuids2 \u003d frozenset(self.tracked_migrations.keys())"},{"line_number":914,"context_line":"        uuids \u003d uuids1 | uuids2"},{"line_number":915,"context_line":"        vuuids \u003d self.driver.list_instance_uuids()"}],"source_content_type":"text/x-python","patch_set":12,"id":"1fa4df85_d66032a8","line":912,"updated":"2020-03-19 11:30:40.000000000","message":"suggestion, you can use instance_uuidsX instead of uuidsX or vuuids.\n\nAnd any test cases covered?","commit_id":"5956ab4dd12849876a5f4345b7a7ecdcee7af2bc"},{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d9cfd5f82a9f540f60cd61d1fba04ec575e72bc","unresolved":false,"context_lines":[{"line_number":1351,"context_line":"                LOG.debug(\u0027Migration instance not found: %s\u0027, e)"},{"line_number":1352,"context_line":"                # get the deleted instance"},{"line_number":1353,"context_line":"                filters \u003d {\u0027uuid\u0027: [uuid], \u0027deleted\u0027: True}"},{"line_number":1354,"context_line":"                insts \u003d objects.InstanceList.get_by_filters(context, filters)"},{"line_number":1355,"context_line":"                if insts:"},{"line_number":1356,"context_line":"                    instances[uuid] \u003d insts[0]"},{"line_number":1357,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1fa4df85_16456ab4","line":1354,"updated":"2020-03-19 11:30:40.000000000","message":"it seems not covered by test case.","commit_id":"5956ab4dd12849876a5f4345b7a7ecdcee7af2bc"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":26458,"name":"Brin Zhang","email":"zhangbailin@inspur.com","username":"zhangbailin"},"change_message_id":"2d9cfd5f82a9f540f60cd61d1fba04ec575e72bc","unresolved":false,"context_lines":[{"line_number":2349,"context_line":"        ) as (mock_del_files, mock_cleanup_res):"},{"line_number":2350,"context_line":"            self.compute._cleanup_incomplete_migrations(self.context)"},{"line_number":2351,"context_line":"            mock_del_files.assert_called()"},{"line_number":2352,"context_line":"            mock_cleanup_res.assert_called()"},{"line_number":2353,"context_line":""},{"line_number":2354,"context_line":"        # Ensure that migration status is set to \u0027failed\u0027 after instance"},{"line_number":2355,"context_line":"        # files deletion for those instances whose instance.host is not"}],"source_content_type":"text/x-python","patch_set":12,"id":"1fa4df85_96e39ad8","line":2352,"updated":"2020-03-19 11:30:40.000000000","message":"Can you add a serio for cleanup_specific_resources()? that after you clean up the vpmems from the instance, then assert it\u0027s not exist.","commit_id":"5956ab4dd12849876a5f4345b7a7ecdcee7af2bc"}]}
