)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0d2f0b7fce76376799eaeb5a535c5d3cb0944ae","unresolved":false,"context_lines":[{"line_number":2578,"context_line":""},{"line_number":2579,"context_line":"        def _refresh_root_device(context, instance, bdms, image_meta):"},{"line_number":2580,"context_line":"            if not image_meta or \u0027id\u0027 not in image_meta:"},{"line_number":2581,"context_line":"                LOG.warning(_LW(\"Rebuild failed due to invalid image_meta: \\"},{"line_number":2582,"context_line":"                                %s\"), image_meta, instance\u003dinstance)"},{"line_number":2583,"context_line":"                return"},{"line_number":2584,"context_line":"            for bdm in bdms:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_8c3637e6","line":2581,"updated":"2015-09-18 22:11:56.000000000","message":"If this is a failure, why wouldn\u0027t you raise an exception?\n\nSeems this warning isn\u0027t necessary.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":17527,"name":"Felix Ma","email":"maqi@cmss.chinamobile.com","username":"felix23ma"},"change_message_id":"f91f509274b1364c4f3c2841addabcf88d0db063","unresolved":false,"context_lines":[{"line_number":2578,"context_line":""},{"line_number":2579,"context_line":"        def _refresh_root_device(context, instance, bdms, image_meta):"},{"line_number":2580,"context_line":"            if not image_meta or \u0027id\u0027 not in image_meta:"},{"line_number":2581,"context_line":"                LOG.warning(_LW(\"Rebuild failed due to invalid image_meta: \\"},{"line_number":2582,"context_line":"                                %s\"), image_meta, instance\u003dinstance)"},{"line_number":2583,"context_line":"                return"},{"line_number":2584,"context_line":"            for bdm in bdms:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_0aa7b90b","line":2581,"in_reply_to":"ba15a1d1_82f7db8b","updated":"2015-09-28 09:13:45.000000000","message":"Feodor, image-baed instances doesn\u0027t support rebuild without image specified. novaclient will also return a failure if you don\u0027t give an image id or name in cmd line.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"3857cbd33ff0e7632496dc35a19fe0aa365740ee","unresolved":false,"context_lines":[{"line_number":2578,"context_line":""},{"line_number":2579,"context_line":"        def _refresh_root_device(context, instance, bdms, image_meta):"},{"line_number":2580,"context_line":"            if not image_meta or \u0027id\u0027 not in image_meta:"},{"line_number":2581,"context_line":"                LOG.warning(_LW(\"Rebuild failed due to invalid image_meta: \\"},{"line_number":2582,"context_line":"                                %s\"), image_meta, instance\u003dinstance)"},{"line_number":2583,"context_line":"                return"},{"line_number":2584,"context_line":"            for bdm in bdms:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_82f7db8b","line":2581,"in_reply_to":"ba15a1d1_8c3637e6","updated":"2015-09-19 06:19:32.000000000","message":"IIUC, for image based instances if a new image is not specified rebuild operation reuses an old image to rebuild the instance. Perhaps the same should be done for volume backed instances.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0d2f0b7fce76376799eaeb5a535c5d3cb0944ae","unresolved":false,"context_lines":[{"line_number":2582,"context_line":"                                %s\"), image_meta, instance\u003dinstance)"},{"line_number":2583,"context_line":"                return"},{"line_number":2584,"context_line":"            for bdm in bdms:"},{"line_number":2585,"context_line":"                if bdm.is_volume and bdm.is_root:"},{"line_number":2586,"context_line":"                    self.volume_api.delete(context, bdm.volume_id)"},{"line_number":2587,"context_line":"                    bdm.volume_id \u003d None"},{"line_number":2588,"context_line":"                    bdm.connection_info \u003d None"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_8c3dd7bd","line":2585,"updated":"2015-09-18 22:11:56.000000000","message":"Can you have more than one root volume?  If not, you could break the loop after you process this bdm.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0d2f0b7fce76376799eaeb5a535c5d3cb0944ae","unresolved":false,"context_lines":[{"line_number":2583,"context_line":"                return"},{"line_number":2584,"context_line":"            for bdm in bdms:"},{"line_number":2585,"context_line":"                if bdm.is_volume and bdm.is_root:"},{"line_number":2586,"context_line":"                    self.volume_api.delete(context, bdm.volume_id)"},{"line_number":2587,"context_line":"                    bdm.volume_id \u003d None"},{"line_number":2588,"context_line":"                    bdm.connection_info \u003d None"},{"line_number":2589,"context_line":"                    bdm.image_id \u003d image_meta[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_aca3fbff","line":2586,"updated":"2015-09-18 22:11:56.000000000","message":"I\u0027d probably be doing some debug logging in here that you\u0027re deleting this volume as part of the rebuild and resetting the bdm information so that the attach recreates the volume implicitly.\n\nThis code is pretty tightly coupled to the block_device attach code which makes it brittle, so having comments and debug logging in here is important if things fail.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":14084,"name":"Einst Crazy","email":"yu.changcai@99cloud.net","username":"Einst"},"change_message_id":"91d5821ba3566914d293924b660ee86a2a9c46be","unresolved":false,"context_lines":[{"line_number":2583,"context_line":"                return"},{"line_number":2584,"context_line":"            for bdm in bdms:"},{"line_number":2585,"context_line":"                if bdm.is_volume and bdm.is_root:"},{"line_number":2586,"context_line":"                    self.volume_api.delete(context, bdm.volume_id)"},{"line_number":2587,"context_line":"                    bdm.volume_id \u003d None"},{"line_number":2588,"context_line":"                    bdm.connection_info \u003d None"},{"line_number":2589,"context_line":"                    bdm.image_id \u003d image_meta[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba8a016a_c942eb67","line":2586,"in_reply_to":"ba15a1d1_aca3fbff","updated":"2015-11-20 02:20:29.000000000","message":"I think delete operation should be after new one could work","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"3857cbd33ff0e7632496dc35a19fe0aa365740ee","unresolved":false,"context_lines":[{"line_number":2586,"context_line":"                    self.volume_api.delete(context, bdm.volume_id)"},{"line_number":2587,"context_line":"                    bdm.volume_id \u003d None"},{"line_number":2588,"context_line":"                    bdm.connection_info \u003d None"},{"line_number":2589,"context_line":"                    bdm.image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":2590,"context_line":"                    bdm.save()"},{"line_number":2591,"context_line":""},{"line_number":2592,"context_line":"        if recreate:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_82c91b5d","line":2589,"updated":"2015-09-19 06:19:32.000000000","message":"This will not work if bdm.snapshot_id is not None.\n\nAlso bdm.volume_size may not fit to image size or min_size.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":13630,"name":"Luo Gangyi","email":"luogangyi@corp.netease.com","username":"luogangyi"},"change_message_id":"becc820ca5b7a691ee776bd03b792301220d6ef1","unresolved":false,"context_lines":[{"line_number":2586,"context_line":"                    self.volume_api.delete(context, bdm.volume_id)"},{"line_number":2587,"context_line":"                    bdm.volume_id \u003d None"},{"line_number":2588,"context_line":"                    bdm.connection_info \u003d None"},{"line_number":2589,"context_line":"                    bdm.image_id \u003d image_meta[\u0027id\u0027]"},{"line_number":2590,"context_line":"                    bdm.save()"},{"line_number":2591,"context_line":""},{"line_number":2592,"context_line":"        if recreate:"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_7305b012","line":2589,"in_reply_to":"ba15a1d1_82c91b5d","updated":"2015-09-20 14:27:20.000000000","message":"good point! In such case, I think we should allow user to redefine the size of volume.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":2467,"name":"Jin Nan Zhang","email":"zhang.jinnan@99cloud.net","username":"zhangjinnan87"},"change_message_id":"18c0825da978dff569f156727adb8903da494955","unresolved":false,"context_lines":[{"line_number":2595,"context_line":"        else:"},{"line_number":2596,"context_line":"            self._power_off_instance(context, instance, clean_shutdown\u003dTrue)"},{"line_number":2597,"context_line":"            detach_block_devices(context, bdms)"},{"line_number":2598,"context_line":"            _refresh_root_device(context, instance, bdms, image_meta)"},{"line_number":2599,"context_line":"            self.driver.destroy(context, instance,"},{"line_number":2600,"context_line":"                                network_info\u003dnetwork_info,"},{"line_number":2601,"context_line":"                                block_device_info\u003dblock_device_info)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a740942_98308158","line":2598,"updated":"2015-12-04 01:58:52.000000000","message":"If recreate \u003d False, refresh_root_device will lose data.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0d2f0b7fce76376799eaeb5a535c5d3cb0944ae","unresolved":false,"context_lines":[{"line_number":2128,"context_line":"                    self.assertFalse(bdm.destroy.called)"},{"line_number":2129,"context_line":""},{"line_number":2130,"context_line":"    def test_refresh_root_device(self):"},{"line_number":2131,"context_line":"        bdm \u003d mock.MagicMock()"},{"line_number":2132,"context_line":"        bdm.is_root \u003d True"},{"line_number":2133,"context_line":"        bdm.is_volume \u003d True"},{"line_number":2134,"context_line":"        bdm.volume_id \u003d 123"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_cc5bcff5","line":2131,"updated":"2015-09-18 22:11:56.000000000","message":"Set the spec when creating mocks, like this:\n\nmock.MagicMock(spec\u003dobjects.BlockDeviceMapping)","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0d2f0b7fce76376799eaeb5a535c5d3cb0944ae","unresolved":false,"context_lines":[{"line_number":2134,"context_line":"        bdm.volume_id \u003d 123"},{"line_number":2135,"context_line":""},{"line_number":2136,"context_line":"        fake_image_meta \u003d {\u0027id\u0027: 456}"},{"line_number":2137,"context_line":"        fake_instance \u003d mock.MagicMock()"},{"line_number":2138,"context_line":"        detach_blk \u003d mock.MagicMock()"},{"line_number":2139,"context_line":"        attach_blk \u003d mock.MagicMock()"},{"line_number":2140,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_8c6e3795","line":2137,"updated":"2015-09-18 22:11:56.000000000","message":"Use a spec:\n\nmock.MagicMock(spec\u003dobjects.Instance)","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0d2f0b7fce76376799eaeb5a535c5d3cb0944ae","unresolved":false,"context_lines":[{"line_number":2164,"context_line":"                                               block_device_info\u003dNone,"},{"line_number":2165,"context_line":"                                               preserve_ephemeral\u003dFalse)"},{"line_number":2166,"context_line":"            mock_volume_delete.assert_called_once_with(self.context, 123)"},{"line_number":2167,"context_line":"            assert bdm.image_id is fake_image_meta[\u0027id\u0027]"},{"line_number":2168,"context_line":""},{"line_number":2169,"context_line":"    def _test_rescue(self, clean_shutdown\u003dTrue):"},{"line_number":2170,"context_line":"        instance \u003d fake_instance.fake_instance_obj("}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_0c09c7dd","line":2167,"updated":"2015-09-18 22:11:56.000000000","message":"Use self.assertEqual.  You should also assert the volume_id and connection_info in the bdm is None, which means you have to set fake values for those in the bdm mock above to make sure they are reset.","commit_id":"7850245fb18f78f2df57b4b7bb358fc77f0d69b5"}]}
