)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1812,"name":"p-draigbrady","email":"P@draigBrady.com","username":"p-draigbrady"},"change_message_id":"b9e6ba753a3de6c97898a1d5d245d30f3468912a","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"As of now, there is only one way to delete the instances, whose"},{"line_number":20,"context_line":"task_state is \u0027deleting\u0027 state, by restarting the nova-compute"},{"line_number":21,"context_line":"services where these instances are running."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"After restarting the nova-compute service of the host, the instances"},{"line_number":24,"context_line":"which were in deleting task_state gets deleted, but the quota for"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"9aa7fdbe_757e4ee6","line":21,"updated":"2014-10-20 10:10:14.000000000","message":"Please delete the two paragraphs above as they\u0027re no longer applicable since change I4d0e47662a80109ef9622d85455587d487e47c01","commit_id":"d7359ab74f671214f052e0532e1f7db465514099"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"425442c0bb7f0c727aefcbd3ad767b0390588ca6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"which were in deleting task_state gets deleted, but the quota for"},{"line_number":14,"context_line":"those instances is not getting updated accordingly."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Added new db interface to get latest migration object based on"},{"line_number":17,"context_line":"instance id."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Added code to update the corresponding quota after deletion of"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"9a80dd14_16ba8271","line":16,"updated":"2015-03-16 18:48:50.000000000","message":"Based on the commit message, and the bug report itself not sure why we care about the latest migration. What does this give us?","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"08fd16a022eef5e0f6561c91f4dc9f8c5bc6ee03","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rajesh Tailor \u003crajesh.tailor@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-07 07:04:29 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix quota-update when nova-compute startup finish"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Quotas are not updated correctly for the instances whose task_state is"},{"line_number":10,"context_line":"in deleting status during the nova-compute init_host call."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"1aca2d91_974464b7","line":7,"updated":"2015-05-08 21:30:24.000000000","message":"this line should mention the patch fixes the stuck in deleting case","commit_id":"825af4cf636e0e50ee2e088191f60d7ae2c65919"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"c923ae3646e7a9e6d9997298c01b11d69ac9033a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rajesh Tailor \u003crajesh.tailor@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-05-07 07:04:29 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix quota-update when nova-compute startup finish"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Quotas are not updated correctly for the instances whose task_state is"},{"line_number":10,"context_line":"in deleting status during the nova-compute init_host call."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"9af37de9_e2aa2b85","line":7,"in_reply_to":"1aca2d91_974464b7","updated":"2015-05-11 06:22:19.000000000","message":"Done","commit_id":"825af4cf636e0e50ee2e088191f60d7ae2c65919"}],"nova/compute/api.py":[{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"425442c0bb7f0c727aefcbd3ad767b0390588ca6","unresolved":false,"context_lines":[{"line_number":1722,"context_line":"            if (migration and"},{"line_number":1723,"context_line":"                    instance.instance_type_id \u003d\u003d"},{"line_number":1724,"context_line":"                        migration.new_instance_type_id):"},{"line_number":1725,"context_line":"                old_inst_type_id \u003d migration.old_instance_type_id"},{"line_number":1726,"context_line":"                try:"},{"line_number":1727,"context_line":"                    old_inst_type \u003d flavors.get_flavor(old_inst_type_id)"},{"line_number":1728,"context_line":"                except exception.FlavorNotFound:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_01187e74","side":"PARENT","line":1725,"updated":"2015-03-16 18:48:50.000000000","message":"not sure what is wrong with this logic, this sounds like a different bug then the one you linked to in the commit message.","commit_id":"cc4355afcfe94caca870d809117ce2a5dea94507"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"425442c0bb7f0c727aefcbd3ad767b0390588ca6","unresolved":false,"context_lines":[{"line_number":1706,"context_line":""},{"line_number":1707,"context_line":"    def _create_reservations(self, context, instance, original_task_state,"},{"line_number":1708,"context_line":"                             project_id, user_id):"},{"line_number":1709,"context_line":"        vcpus \u003d instance.vcpus"},{"line_number":1710,"context_line":"        mem_mb \u003d instance.memory_mb"},{"line_number":1711,"context_line":"        # NOTE(wangpan): if the instance is resizing, and the resources"},{"line_number":1712,"context_line":"        #                are updated to new instance type, we should use"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_b6061620","line":1709,"updated":"2015-03-16 18:48:50.000000000","message":"Why change the names. This patch is already too big so its better to leave formatting changes like this to a later patch.","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a381f6670d58f963c961b0a5cf53af707e715dcc","unresolved":false,"context_lines":[{"line_number":1720,"context_line":"            except exception.MigrationNotFoundByStatus:"},{"line_number":1721,"context_line":"                migration \u003d None"},{"line_number":1722,"context_line":"            if (migration and"},{"line_number":1723,"context_line":"                        instance.instance_type_id \u003d\u003d"},{"line_number":1724,"context_line":"                        migration.new_instance_type_id):"},{"line_number":1725,"context_line":"                vcpus, mem_mb \u003d compute_utils.get_inst_attrs_from_migration("},{"line_number":1726,"context_line":"                    migration, instance)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_765bbef6","line":1723,"updated":"2015-03-16 18:35:26.000000000","message":"indentation here is dodgy","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"e6428e14456f4fb5d1d022d3239eeddffd385533","unresolved":false,"context_lines":[{"line_number":1694,"context_line":"                        migration.new_instance_type_id):"},{"line_number":1695,"context_line":"                get_inst_attrs \u003d compute_utils.get_inst_attrs_from_migration"},{"line_number":1696,"context_line":"                instance_vcpus, instance_memory_mb \u003d get_inst_attrs(migration,"},{"line_number":1697,"context_line":"                                                                    instance)"},{"line_number":1698,"context_line":""},{"line_number":1699,"context_line":"        quotas \u003d objects.Quotas(context)"},{"line_number":1700,"context_line":"        quotas.reserve(project_id\u003dproject_id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"baa041b7_2ec0b77a","line":1697,"updated":"2015-04-03 22:47:28.000000000","message":"Suggestion for an alternate formatting:\n\n    attrs \u003d compute_utils.get_inst_attrs_from_migration(\n        migration, instance)\n    instance_vcpus, instance_memory_mb \u003d attrs","commit_id":"209c7da40149ec8c156278783d1523a9907aaa4b"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":802,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":803,"context_line":"                context, instance.uuid)"},{"line_number":804,"context_line":"        quotas \u003d objects.Quotas(context)"},{"line_number":805,"context_line":"        project_id, user_id \u003d quotas_obj.ids_from_instance(context, instance)"},{"line_number":806,"context_line":"        quotas.reserve(context, project_id\u003dproject_id, user_id\u003duser_id,"},{"line_number":807,"context_line":"                       instances\u003d-1, cores\u003d-instance.vcpus,"},{"line_number":808,"context_line":"                       ram\u003d-instance.memory_mb)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_d11700a2","line":805,"updated":"2014-10-20 16:51:52.000000000","message":"Just a note to self, this is the same thing as what\u0027s being added to init_instance now, but coming in from a different flow.","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":925,"context_line":"                               ram\u003d-instance_memory_mb)"},{"line_number":926,"context_line":""},{"line_number":927,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"},{"line_number":928,"context_line":"            except Exception:"},{"line_number":929,"context_line":"                # we don\u0027t want that an exception blocks the init_host"},{"line_number":930,"context_line":"                msg \u003d _LE(\u0027Failed to complete a deletion\u0027)"},{"line_number":931,"context_line":"                LOG.exception(msg, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_715574c5","line":928,"updated":"2014-10-20 16:51:52.000000000","message":"Shouldn\u0027t we do a quotas.rollback on the reservation if the delete failed?","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":2471,"context_line":"            system_meta \u003d instance.system_metadata"},{"line_number":2472,"context_line":"            instance.destroy()"},{"line_number":2473,"context_line":"        except Exception:"},{"line_number":2474,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":2475,"context_line":"                quotas.rollback()"},{"line_number":2476,"context_line":""},{"line_number":2477,"context_line":"        self._complete_deletion(context,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_716c949d","line":2474,"updated":"2014-10-20 16:51:52.000000000","message":"Nevermind, I guess that happens here.","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"aee8b53da041fe50f233ab464a0c794216d3ab0a","unresolved":false,"context_lines":[{"line_number":915,"context_line":"                               user_id\u003duser_id,"},{"line_number":916,"context_line":"                               instances\u003d-1,"},{"line_number":917,"context_line":"                               cores\u003d-instance_vcpus,"},{"line_number":918,"context_line":"                               ram\u003d-instance_memory_mb)"},{"line_number":919,"context_line":""},{"line_number":920,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"},{"line_number":921,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_9825baad","line":918,"updated":"2014-10-30 08:22:45.000000000","message":"do we need to consider the logic in nova/compute/api.py \n_create_reservations especially for the migrations?","commit_id":"8aabb0c2981a0ac8f236dfbf0dfc42a7f7ff02fb"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0e3729e4655647153f17e742a09dc3b6277ff0ea","unresolved":false,"context_lines":[{"line_number":915,"context_line":"                               user_id\u003duser_id,"},{"line_number":916,"context_line":"                               instances\u003d-1,"},{"line_number":917,"context_line":"                               cores\u003d-instance_vcpus,"},{"line_number":918,"context_line":"                               ram\u003d-instance_memory_mb)"},{"line_number":919,"context_line":""},{"line_number":920,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"},{"line_number":921,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_db82aa51","line":918,"in_reply_to":"7a8c0949_2cb1cbf8","updated":"2014-11-03 02:28:15.000000000","message":"ok, it can be a solution \n\nand how about change the commit message to indicate it? thanks","commit_id":"8aabb0c2981a0ac8f236dfbf0dfc42a7f7ff02fb"},{"author":{"_account_id":8300,"name":"Abhijeet Malawade","email":"abhijeet.malawade@gmail.com","username":"abhijeet"},"change_message_id":"25dc4a9112651f37d888145da78a3861c35cbf87","unresolved":false,"context_lines":[{"line_number":915,"context_line":"                               user_id\u003duser_id,"},{"line_number":916,"context_line":"                               instances\u003d-1,"},{"line_number":917,"context_line":"                               cores\u003d-instance_vcpus,"},{"line_number":918,"context_line":"                               ram\u003d-instance_memory_mb)"},{"line_number":919,"context_line":""},{"line_number":920,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"},{"line_number":921,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_2cb1cbf8","line":918,"in_reply_to":"7a8c0949_9825baad","updated":"2014-10-31 10:12:12.000000000","message":"Hi jichenjc\t,\n\nIMO at compute manager we will not get original_task_state as in nova/compute/api.py _create_reservations. \n\nAlso I think we need to file new bug for this migration scenario and need to handle it in another patch.\n\nLet me know your opinion.","commit_id":"8aabb0c2981a0ac8f236dfbf0dfc42a7f7ff02fb"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7bc001633324c15204834d206d95f3608cc5508f","unresolved":false,"context_lines":[{"line_number":915,"context_line":"                               user_id\u003duser_id,"},{"line_number":916,"context_line":"                               instances\u003d-1,"},{"line_number":917,"context_line":"                               cores\u003d-instance_vcpus,"},{"line_number":918,"context_line":"                               ram\u003d-instance_memory_mb)"},{"line_number":919,"context_line":""},{"line_number":920,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"},{"line_number":921,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_7983b2cc","line":918,"in_reply_to":"7a8c0949_b9e69fb2","updated":"2014-11-09 14:39:18.000000000","message":"I can\u0027t reproduce this problem since it\u0027s not easy to make a env to build it\nso my suggestion is based on code analysis before\n\nfrom the comments in api.py \n\n# NOTE(wangpan): if the instance is resizing, and the resources\n        #                are updated to new instance type, we should use\n        #                the old instance type to create reservation.\n        # see https://bugs.launchpad.net/nova/+bug/1099729 for more details\nif original_task_state in (task_states.RESIZE_MIGRATED,\n                                   task_states.RESIZE_FINISH)\n\nif the instance task state is in those states, we will still change the task_state to DELETING and __init_instance will enter your logic\nbut the quota logic under the \u0027if original_task_state in  xxx\u0027\u0027 will not be executed in your code code, right?","commit_id":"8aabb0c2981a0ac8f236dfbf0dfc42a7f7ff02fb"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"64fd7b113b48e5ed7f9b3fd35d19745a1abababb","unresolved":false,"context_lines":[{"line_number":915,"context_line":"                               user_id\u003duser_id,"},{"line_number":916,"context_line":"                               instances\u003d-1,"},{"line_number":917,"context_line":"                               cores\u003d-instance_vcpus,"},{"line_number":918,"context_line":"                               ram\u003d-instance_memory_mb)"},{"line_number":919,"context_line":""},{"line_number":920,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"},{"line_number":921,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8c0949_b9e69fb2","line":918,"in_reply_to":"7a8c0949_db82aa51","updated":"2014-11-06 09:28:14.000000000","message":"Hi jichenjc,\n\nI have modified the commit message to mention that this patch fixes the bug partially.\n\nIMO migration scenario should not be issue here, which you have mentioned, because the proposed changes will be executed only when vm task_state is \u0027deleting\u0027.\n\nCould you reproduce the migration scenario which you concern about ?\nIf yes, could you please share reproduction steps, so that I can try to solve that issue.","commit_id":"8aabb0c2981a0ac8f236dfbf0dfc42a7f7ff02fb"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"30ec6a8bc597e0fe482b548a462e6f9b37d6d7d2","unresolved":false,"context_lines":[{"line_number":840,"context_line":""},{"line_number":841,"context_line":"        if instance.vm_state in (vm_states.ACTIVE, vm_states.STOPPED,"},{"line_number":842,"context_line":"                                 vm_states.ERROR):"},{"line_number":843,"context_line":"            for status in (\u0027post-migrating\u0027, \u0027error\u0027):"},{"line_number":844,"context_line":"                try:"},{"line_number":845,"context_line":"                    migration \u003d objects.Migration.get_by_instance_and_status("},{"line_number":846,"context_line":"                        context.elevated(), instance.uuid, status\u003dstatus)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_57ad1f9a","line":843,"updated":"2014-11-25 11:40:55.000000000","message":"this seems to be begging for a new object method:\nmigration \u003d objects.Migration.get_by_instance\n\nreading the DB twice here is excessive","commit_id":"6f5d011d59b4ebf512ae0804766bc8477765a759"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"30ec6a8bc597e0fe482b548a462e6f9b37d6d7d2","unresolved":false,"context_lines":[{"line_number":851,"context_line":"                            migration.new_instance_type_id):"},{"line_number":852,"context_line":"                    old_inst_type_id \u003d migration.old_instance_type_id"},{"line_number":853,"context_line":"                    try:"},{"line_number":854,"context_line":"                        old_inst_type \u003d flavors.get_flavor(old_inst_type_id)"},{"line_number":855,"context_line":"                    except exception.FlavorNotFound:"},{"line_number":856,"context_line":"                        LOG.warning(_(\"Flavor %d not found\"), old_inst_type_id)"},{"line_number":857,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_37989369","line":854,"updated":"2014-11-25 11:40:55.000000000","message":"you can get the flavor from the instance now","commit_id":"6f5d011d59b4ebf512ae0804766bc8477765a759"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"a1fca4679fe6c8cbaf24c86079fb9bc3ebc44a9e","unresolved":false,"context_lines":[{"line_number":851,"context_line":"                            migration.new_instance_type_id):"},{"line_number":852,"context_line":"                    old_inst_type_id \u003d migration.old_instance_type_id"},{"line_number":853,"context_line":"                    try:"},{"line_number":854,"context_line":"                        old_inst_type \u003d flavors.get_flavor(old_inst_type_id)"},{"line_number":855,"context_line":"                    except exception.FlavorNotFound:"},{"line_number":856,"context_line":"                        LOG.warning(_(\"Flavor %d not found\"), old_inst_type_id)"},{"line_number":857,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_b6e8dce2","line":854,"in_reply_to":"5a890539_37989369","updated":"2014-11-26 11:55:25.000000000","message":"hi garyk,\n\nInstance will have new flavor id (given while calling resize on instance) because the instance information is already updated by resize api so we need to fetch old flavor id from migration record itself while deleting the instance.","commit_id":"6f5d011d59b4ebf512ae0804766bc8477765a759"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"30ec6a8bc597e0fe482b548a462e6f9b37d6d7d2","unresolved":false,"context_lines":[{"line_number":853,"context_line":"                    try:"},{"line_number":854,"context_line":"                        old_inst_type \u003d flavors.get_flavor(old_inst_type_id)"},{"line_number":855,"context_line":"                    except exception.FlavorNotFound:"},{"line_number":856,"context_line":"                        LOG.warning(_(\"Flavor %d not found\"), old_inst_type_id)"},{"line_number":857,"context_line":"                    else:"},{"line_number":858,"context_line":"                        instance_vcpus \u003d old_inst_type[\u0027vcpus\u0027]"},{"line_number":859,"context_line":"                        vram_mb \u003d int(old_inst_type.get(\u0027extra_specs\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_575a7ff2","line":856,"updated":"2014-11-25 11:40:55.000000000","message":"missing hint _LW","commit_id":"6f5d011d59b4ebf512ae0804766bc8477765a759"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"30ec6a8bc597e0fe482b548a462e6f9b37d6d7d2","unresolved":false,"context_lines":[{"line_number":857,"context_line":"                    else:"},{"line_number":858,"context_line":"                        instance_vcpus \u003d old_inst_type[\u0027vcpus\u0027]"},{"line_number":859,"context_line":"                        vram_mb \u003d int(old_inst_type.get(\u0027extra_specs\u0027,"},{"line_number":860,"context_line":"                            {}).get(\u0027hw_video:ram_max_mb\u0027, 0))"},{"line_number":861,"context_line":"                        instance_memory_mb \u003d (old_inst_type[\u0027memory_mb\u0027] +"},{"line_number":862,"context_line":"                                              vram_mb)"},{"line_number":863,"context_line":"                        LOG.debug(\"going to delete a resizing instance\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_f791ab47","line":860,"updated":"2014-11-25 11:40:55.000000000","message":"i do not recall seeing the hw_video patches land. maybe i missed these. please point me to that","commit_id":"6f5d011d59b4ebf512ae0804766bc8477765a759"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"a1fca4679fe6c8cbaf24c86079fb9bc3ebc44a9e","unresolved":false,"context_lines":[{"line_number":857,"context_line":"                    else:"},{"line_number":858,"context_line":"                        instance_vcpus \u003d old_inst_type[\u0027vcpus\u0027]"},{"line_number":859,"context_line":"                        vram_mb \u003d int(old_inst_type.get(\u0027extra_specs\u0027,"},{"line_number":860,"context_line":"                            {}).get(\u0027hw_video:ram_max_mb\u0027, 0))"},{"line_number":861,"context_line":"                        instance_memory_mb \u003d (old_inst_type[\u0027memory_mb\u0027] +"},{"line_number":862,"context_line":"                                              vram_mb)"},{"line_number":863,"context_line":"                        LOG.debug(\"going to delete a resizing instance\","}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_d61c8815","line":860,"in_reply_to":"5a890539_f791ab47","updated":"2014-11-26 11:55:25.000000000","message":"hi garyk,\n\nPlease refer below link for requested patch:\n\nhttps://review.openstack.org/#/c/63472/","commit_id":"6f5d011d59b4ebf512ae0804766bc8477765a759"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cee442a59243227c8eeec0cf26847b30543ef0cb","unresolved":false,"context_lines":[{"line_number":945,"context_line":""},{"line_number":946,"context_line":"                quotas \u003d self._create_reservations(context, instance,"},{"line_number":947,"context_line":"                                                   project_id, user_id)"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"},{"line_number":950,"context_line":"            except Exception:"},{"line_number":951,"context_line":"                # we don\u0027t want that an exception blocks the init_host"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_c398176d","line":948,"updated":"2015-02-08 01:09:43.000000000","message":"question: At compute.API side, we already reserve the quotas, then we reserve quota at here again. So what we expect for previous reservation? Just let it expired?","commit_id":"abdb03c2811db30e29663ddac95c173051d85aa3"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"f114e4fbd1f6a8f7c4dcc656fae03b79a89ff0b7","unresolved":false,"context_lines":[{"line_number":945,"context_line":""},{"line_number":946,"context_line":"                quotas \u003d self._create_reservations(context, instance,"},{"line_number":947,"context_line":"                                                   project_id, user_id)"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"},{"line_number":950,"context_line":"            except Exception:"},{"line_number":951,"context_line":"                # we don\u0027t want that an exception blocks the init_host"}],"source_content_type":"text/x-python","patch_set":12,"id":"da86d52c_a5903596","line":948,"in_reply_to":"da86d52c_c398176d","updated":"2015-02-10 13:30:04.000000000","message":"Hi Alex,\n\nYes, the quota reserved at compute.API side will expire. \nThe quota in delete-api is committed in _complete_deletion method of nova/compute/manager after setting the task_state to None.\n\nSince the instance task_state is still \u0027deleting\u0027 i.e. the previous quota was not committed.","commit_id":"abdb03c2811db30e29663ddac95c173051d85aa3"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"425442c0bb7f0c727aefcbd3ad767b0390588ca6","unresolved":false,"context_lines":[{"line_number":857,"context_line":"        # NOTE(rajesht): if the instance is resizing, and the resources"},{"line_number":858,"context_line":"        #                are updated to new instance type, we should use"},{"line_number":859,"context_line":"        #                the old instance type to create reservation."},{"line_number":860,"context_line":"        # see https://bugs.launchpad.net/nova/+bug/1099729 for more details"},{"line_number":861,"context_line":"        if instance.vm_state in (vm_states.ACTIVE, vm_states.STOPPED,"},{"line_number":862,"context_line":"                                 vm_states.ERROR):"},{"line_number":863,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_21802249","line":860,"updated":"2015-03-16 18:48:50.000000000","message":"This is not the bug you link to in the commit message\n\nhttps://bugs.launchpad.net/nova/+bug/1296414\n\nLets fix the bug in the commit message first, and fix bug 1099729 in a subsequent patch.","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a381f6670d58f963c961b0a5cf53af707e715dcc","unresolved":false,"context_lines":[{"line_number":867,"context_line":"                migration \u003d None"},{"line_number":868,"context_line":"            if (migration and migration.status in ("},{"line_number":869,"context_line":"                \u0027post-migrating\u0027, \u0027error\u0027) and"},{"line_number":870,"context_line":"                        instance.instance_type_id \u003d\u003d"},{"line_number":871,"context_line":"                        migration.new_instance_type_id):"},{"line_number":872,"context_line":"                vcpus, mem_mb \u003d compute_utils.get_inst_attrs_from_migration("},{"line_number":873,"context_line":"                    migration, instance)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_d600eaad","line":870,"updated":"2015-03-16 18:35:26.000000000","message":"ditto regarding indentation","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"},{"author":{"_account_id":1849,"name":"Joe Gordon","email":"joe.gordon0@gmail.com","username":"jogo"},"change_message_id":"425442c0bb7f0c727aefcbd3ad767b0390588ca6","unresolved":false,"context_lines":[{"line_number":977,"context_line":"                project_id, user_id \u003d objects.quotas.ids_from_instance("},{"line_number":978,"context_line":"                    context, instance)"},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"                quotas \u003d self._create_reservations(context, instance,"},{"line_number":981,"context_line":"                                                   project_id, user_id)"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"                self._delete_instance(context, instance, bdms, quotas)"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_e1bb6a0d","line":980,"updated":"2015-03-16 18:48:50.000000000","message":"Since we will need a _create_reservations function here, can we pull out the common code with nova/compute/api.py ?","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"}],"nova/compute/utils.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"07d897e2d661c4124655b3a436f5619e65ed7251","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        instance_memory_mb \u003d (old_inst_type[\u0027memory_mb\u0027] +"},{"line_number":477,"context_line":"                              vram_mb)"},{"line_number":478,"context_line":"        LOG.debug(\"going to delete a resizing instance\","},{"line_number":479,"context_line":"                  instance\u003dinstance)"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    return instance_vcpus, instance_memory_mb"},{"line_number":482,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_53d41347","line":479,"updated":"2014-12-15 20:41:11.000000000","message":"This log message seems out of place... what does getting instance metadata have to do with resizing or deleting?","commit_id":"8d0a3771ba86e29762928edeeb50a059ffcf0f06"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1d80596642eb6272574e01be364e16adbea92043","unresolved":false,"context_lines":[{"line_number":496,"context_line":"    except exception.FlavorNotFound:"},{"line_number":497,"context_line":"        LOG.warning(_LW(\"Flavor %d not found\"), old_inst_type_id)"},{"line_number":498,"context_line":"    else:"},{"line_number":499,"context_line":"        instance_vcpus \u003d old_inst_type[\u0027vcpus\u0027]"},{"line_number":500,"context_line":"        vram_mb \u003d int(old_inst_type.get(\u0027extra_specs\u0027,"},{"line_number":501,"context_line":"            {}).get(\u0027hw_video:ram_max_mb\u0027, 0))"},{"line_number":502,"context_line":"        instance_memory_mb \u003d (old_inst_type[\u0027memory_mb\u0027] + vram_mb)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_82bd1505","line":499,"updated":"2015-02-27 22:33:19.000000000","message":"old_inst_type is an object so dot notation should be used.\n\n old_inst_type.vcpus","commit_id":"4388475d0924c3c049fcae0d5d7c9992d9a33efc"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1d80596642eb6272574e01be364e16adbea92043","unresolved":false,"context_lines":[{"line_number":498,"context_line":"    else:"},{"line_number":499,"context_line":"        instance_vcpus \u003d old_inst_type[\u0027vcpus\u0027]"},{"line_number":500,"context_line":"        vram_mb \u003d int(old_inst_type.get(\u0027extra_specs\u0027,"},{"line_number":501,"context_line":"            {}).get(\u0027hw_video:ram_max_mb\u0027, 0))"},{"line_number":502,"context_line":"        instance_memory_mb \u003d (old_inst_type[\u0027memory_mb\u0027] + vram_mb)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    return instance_vcpus, instance_memory_mb"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_42f87dc4","line":501,"updated":"2015-02-27 22:33:19.000000000","message":"old_inst_type.extra_specs.get(\u0027hw_video:ram_max_mb\u0027, 0)","commit_id":"4388475d0924c3c049fcae0d5d7c9992d9a33efc"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1d80596642eb6272574e01be364e16adbea92043","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        instance_vcpus \u003d old_inst_type[\u0027vcpus\u0027]"},{"line_number":500,"context_line":"        vram_mb \u003d int(old_inst_type.get(\u0027extra_specs\u0027,"},{"line_number":501,"context_line":"            {}).get(\u0027hw_video:ram_max_mb\u0027, 0))"},{"line_number":502,"context_line":"        instance_memory_mb \u003d (old_inst_type[\u0027memory_mb\u0027] + vram_mb)"},{"line_number":503,"context_line":""},{"line_number":504,"context_line":"    return instance_vcpus, instance_memory_mb"},{"line_number":505,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba7be1f8_62cae16f","line":502,"updated":"2015-02-27 22:33:19.000000000","message":"old_inst_type.memory_mb","commit_id":"4388475d0924c3c049fcae0d5d7c9992d9a33efc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a381f6670d58f963c961b0a5cf53af707e715dcc","unresolved":false,"context_lines":[{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    old_inst_type_id \u003d migration.old_instance_type_id"},{"line_number":486,"context_line":"    try:"},{"line_number":487,"context_line":"        old_inst_type \u003d flavors.get_flavor(old_inst_type_id)"},{"line_number":488,"context_line":"    except exception.FlavorNotFound:"},{"line_number":489,"context_line":"        LOG.warning(_LW(\"Flavor %d not found\"), old_inst_type_id)"},{"line_number":490,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_d6170aed","line":487,"updated":"2015-03-16 18:35:26.000000000","message":"can we use instance.flavor here?","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5d23f74f32f33eb6e7927ee4f9af4c1b3a8483d5","unresolved":false,"context_lines":[{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    old_inst_type_id \u003d migration.old_instance_type_id"},{"line_number":486,"context_line":"    try:"},{"line_number":487,"context_line":"        old_inst_type \u003d flavors.get_flavor(old_inst_type_id)"},{"line_number":488,"context_line":"    except exception.FlavorNotFound:"},{"line_number":489,"context_line":"        LOG.warning(_LW(\"Flavor %d not found\"), old_inst_type_id)"},{"line_number":490,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_5085dd57","line":487,"in_reply_to":"9a80dd14_d6170aed","updated":"2015-03-16 19:30:44.000000000","message":"If the instance is in the transition, then instance.old_flavor would be the proper attribute.\n\nHowever, if this could be called before/during/after the migration, then doing the actual lookup based on the migration record is probably the right thing to do, since this function is (by implication of its name) gathering data based on the migration record itself.","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"}],"nova/db/api.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"07d897e2d661c4124655b3a436f5619e65ed7251","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            status)"},{"line_number":471,"context_line":""},{"line_number":472,"context_line":""},{"line_number":473,"context_line":"def migration_get_last_action_by_instance(context, instance_uuid):"},{"line_number":474,"context_line":"    \"\"\"Finds the latest migration by the instance uuid its migrating.\"\"\""},{"line_number":475,"context_line":"    return IMPL.migration_get_last_action_by_instance(context, instance_uuid)"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_73c90fac","line":473,"updated":"2014-12-15 20:41:11.000000000","message":"Remove the \"action_\" from the above method. I don\u0027t believe it adds any value, and could potentially confuse the caller into thinking it has something to do with the action taken against the instance (like REBOOT, PAUSE, etc). Also consider changing \"last\" to \"latest\".","commit_id":"8d0a3771ba86e29762928edeeb50a059ffcf0f06"}],"nova/objects/migration.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"df5df193fadfc13ea7b3339e66f7e28930653bb4","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            context, instance_uuid, status)"},{"line_number":57,"context_line":"        return cls._from_db_object(context, cls(), db_migration)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @base.remotable_classmethod"},{"line_number":60,"context_line":"    def get_last_action_by_instance(cls, context, instance_uuid):"},{"line_number":61,"context_line":"        db_migration \u003d db.migration_get_last_action_by_instance(context,"},{"line_number":62,"context_line":"                                                                instance_uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_aa6f95fa","line":59,"updated":"2014-12-15 10:00:43.000000000","message":"you need to bump the object version number - the object has changed","commit_id":"8d0a3771ba86e29762928edeeb50a059ffcf0f06"}],"nova/tests/compute/test_compute_mgr.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":431,"context_line":"    @mock.patch.object(quota.QUOTAS, \u0027reserve\u0027)"},{"line_number":432,"context_line":"    @mock.patch.object(quotas_obj, \u0027ids_from_instance\u0027)"},{"line_number":433,"context_line":"    @mock.patch.object(objects.BlockDeviceMappingList, \u0027get_by_instance_uuid\u0027)"},{"line_number":434,"context_line":"    @mock.patch.object(timeutils, \u0027is_older_than\u0027)"},{"line_number":435,"context_line":"    @mock.patch.object(objects.InstanceList, \u0027get_by_filters\u0027)"},{"line_number":436,"context_line":"    def test_init_instance_stuck_in_deleting("},{"line_number":437,"context_line":"            self,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_7193b4fa","line":434,"updated":"2014-10-20 16:51:52.000000000","message":"Why do we need to mock this out?","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":432,"context_line":"    @mock.patch.object(quotas_obj, \u0027ids_from_instance\u0027)"},{"line_number":433,"context_line":"    @mock.patch.object(objects.BlockDeviceMappingList, \u0027get_by_instance_uuid\u0027)"},{"line_number":434,"context_line":"    @mock.patch.object(timeutils, \u0027is_older_than\u0027)"},{"line_number":435,"context_line":"    @mock.patch.object(objects.InstanceList, \u0027get_by_filters\u0027)"},{"line_number":436,"context_line":"    def test_init_instance_stuck_in_deleting("},{"line_number":437,"context_line":"            self,"},{"line_number":438,"context_line":"            mock_get_by_filters,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_d168e0f7","line":435,"updated":"2014-10-20 16:51:52.000000000","message":"Why is this mocked out?","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        ):"},{"line_number":471,"context_line":"            self.compute._init_instance(self.context, instance)"},{"line_number":472,"context_line":"            self.assertEqual(2, mock_obj_load_attr.call_count)"},{"line_number":473,"context_line":"            self.assertEqual(reservations, mock_reserve.return_value)"},{"line_number":474,"context_line":"            self.assertEqual(1, mock_delete_instance.call_count)"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    @mock.patch.object(quota.QUOTAS, \u0027reserve\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_114a6880","line":473,"updated":"2014-10-20 16:51:52.000000000","message":"What\u0027s the point?  You set this on line 462.  It\u0027d be better to just assert that quotas.reserve is called with the args you expect.","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                                               instance.user_id)"},{"line_number":506,"context_line":"        mock_reserve.return_value \u003d reservations"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        def instance_set_to_error(instance):"},{"line_number":509,"context_line":"            instance.vm_state \u003d vm_states.ERROR"},{"line_number":510,"context_line":"            return instance"},{"line_number":511,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_140fb631","line":508,"updated":"2014-10-20 16:51:52.000000000","message":"This doesn\u0027t seem necessary.","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        with contextlib.nested("},{"line_number":513,"context_line":"                mock.patch.object(instance, \u0027obj_load_attr\u0027),"},{"line_number":514,"context_line":"                mock.patch.object(self.compute, \u0027_delete_instance\u0027,"},{"line_number":515,"context_line":"                                  side_effect\u003dException(\u0027Error !\u0027)),"},{"line_number":516,"context_line":"                mock.patch.object(self.compute, \u0027_set_instance_error_state\u0027,"},{"line_number":517,"context_line":"                                  return_value\u003dinstance_set_to_error(instance))"},{"line_number":518,"context_line":"        ) as ("}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_d42b6e80","line":515,"updated":"2014-10-20 16:51:52.000000000","message":"Use nova.test.TestingException rather than Exception.","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":514,"context_line":"                mock.patch.object(self.compute, \u0027_delete_instance\u0027,"},{"line_number":515,"context_line":"                                  side_effect\u003dException(\u0027Error !\u0027)),"},{"line_number":516,"context_line":"                mock.patch.object(self.compute, \u0027_set_instance_error_state\u0027,"},{"line_number":517,"context_line":"                                  return_value\u003dinstance_set_to_error(instance))"},{"line_number":518,"context_line":"        ) as ("},{"line_number":519,"context_line":"        mock_obj_load_attr,"},{"line_number":520,"context_line":"        mock_delete_instance,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_9103b80e","line":517,"updated":"2014-10-20 16:51:52.000000000","message":"Shouldn\u0027t this be a side_effect rather than a return_value?","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c7ed4987ee2aecfe5dfe1c0ae9eb856f75d9f56","unresolved":false,"context_lines":[{"line_number":543,"context_line":"            uuid\u003d\u0027fake-uuid\u0027,"},{"line_number":544,"context_line":"            vcpus\u003d1,"},{"line_number":545,"context_line":"            memory_mb\u003d64,"},{"line_number":546,"context_line":"            vm_state\u003dvm_states.ERROR,"},{"line_number":547,"context_line":"            task_state\u003dtask_states.DELETING)"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        bdms \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_34dd9a71","line":546,"updated":"2014-10-20 16:51:52.000000000","message":"Is vm_state\u003dERROR the only difference between this and test_init_instance_stuck_in_deleting?  If so, let\u0027s make a common private test method that both public tests can call with the vm_state parameter to use, otherwise we have all of this copy/paste which isn\u0027t fun.","commit_id":"3f0e426e368d21f9f9c1b749452dd087782df875"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cbbca79120623278fa1de527a86a4bf223b82f32","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        self.mox.StubOutWithMock(self.compute, \u0027_delete_instance\u0027)"},{"line_number":444,"context_line":"        self.mox.StubOutWithMock(instance, \u0027obj_load_attr\u0027)"},{"line_number":445,"context_line":"        self.mox.StubOutWithMock(quota.QUOTAS, \u0027reserve\u0027)"},{"line_number":446,"context_line":"        self.mox.StubOutWithMock(quotas_obj, \u0027ids_from_instance\u0027)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        deltas \u003d {\u0027instances\u0027: -1,"},{"line_number":449,"context_line":"                 \u0027cores\u0027: -instance.vcpus,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_a21667ef","line":446,"updated":"2014-10-22 15:10:28.000000000","message":"nit: this is probably not necessary to mock out, it\u0027s a static utility helper method and should be deterministic.","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"3e062db8dd9af4c148b9cc9c9b406a789fb0e7bb","unresolved":false,"context_lines":[{"line_number":443,"context_line":"        self.mox.StubOutWithMock(self.compute, \u0027_delete_instance\u0027)"},{"line_number":444,"context_line":"        self.mox.StubOutWithMock(instance, \u0027obj_load_attr\u0027)"},{"line_number":445,"context_line":"        self.mox.StubOutWithMock(quota.QUOTAS, \u0027reserve\u0027)"},{"line_number":446,"context_line":"        self.mox.StubOutWithMock(quotas_obj, \u0027ids_from_instance\u0027)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        deltas \u003d {\u0027instances\u0027: -1,"},{"line_number":449,"context_line":"                 \u0027cores\u0027: -instance.vcpus,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8c0949_032cfcaa","line":446,"in_reply_to":"9aa7fdbe_a21667ef","updated":"2014-10-30 07:01:48.000000000","message":"Done","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cbbca79120623278fa1de527a86a4bf223b82f32","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        self.mox.StubOutWithMock(quotas_obj, \u0027ids_from_instance\u0027)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        deltas \u003d {\u0027instances\u0027: -1,"},{"line_number":449,"context_line":"                 \u0027cores\u0027: -instance.vcpus,"},{"line_number":450,"context_line":"                 \u0027ram\u0027: -instance.memory_mb}"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        bdms \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_62f55fca","line":449,"updated":"2014-10-22 15:10:28.000000000","message":"nit: alignment is a bit off here.","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"3e062db8dd9af4c148b9cc9c9b406a789fb0e7bb","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        self.mox.StubOutWithMock(quotas_obj, \u0027ids_from_instance\u0027)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"        deltas \u003d {\u0027instances\u0027: -1,"},{"line_number":449,"context_line":"                 \u0027cores\u0027: -instance.vcpus,"},{"line_number":450,"context_line":"                 \u0027ram\u0027: -instance.memory_mb}"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        bdms \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8c0949_23181884","line":449,"in_reply_to":"9aa7fdbe_62f55fca","updated":"2014-10-30 07:01:48.000000000","message":"Done","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cbbca79120623278fa1de527a86a4bf223b82f32","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        self.compute._init_instance(self.context, instance)"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    @mock.patch.object(quota.QUOTAS, \u0027reserve\u0027)"},{"line_number":469,"context_line":"    @mock.patch.object(quotas_obj, \u0027ids_from_instance\u0027)"},{"line_number":470,"context_line":"    @mock.patch.object(objects.BlockDeviceMappingList, \u0027get_by_instance_uuid\u0027)"},{"line_number":471,"context_line":"    def test_init_instance_stuck_in_deleting_raises_exception("},{"line_number":472,"context_line":"            self,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_a2ed87f1","line":469,"updated":"2014-10-22 15:10:28.000000000","message":"nit: again, probably not worth mocking this out, but not a huge deal.","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"3e062db8dd9af4c148b9cc9c9b406a789fb0e7bb","unresolved":false,"context_lines":[{"line_number":466,"context_line":"        self.compute._init_instance(self.context, instance)"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    @mock.patch.object(quota.QUOTAS, \u0027reserve\u0027)"},{"line_number":469,"context_line":"    @mock.patch.object(quotas_obj, \u0027ids_from_instance\u0027)"},{"line_number":470,"context_line":"    @mock.patch.object(objects.BlockDeviceMappingList, \u0027get_by_instance_uuid\u0027)"},{"line_number":471,"context_line":"    def test_init_instance_stuck_in_deleting_raises_exception("},{"line_number":472,"context_line":"            self,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8c0949_431d2473","line":469,"in_reply_to":"9aa7fdbe_a2ed87f1","updated":"2014-10-30 07:01:48.000000000","message":"Done","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cbbca79120623278fa1de527a86a4bf223b82f32","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                                               instance.user_id)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        with contextlib.nested("},{"line_number":494,"context_line":"                mock.patch.object(instance, \u0027obj_load_attr\u0027),"},{"line_number":495,"context_line":"                mock.patch.object(self.compute, \u0027_delete_instance\u0027,"},{"line_number":496,"context_line":"                                  side_effect\u003dtest.TestingException(\u0027test\u0027)),"},{"line_number":497,"context_line":"                mock.patch.object(self.compute, \u0027_set_instance_error_state\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_2287d710","line":494,"updated":"2014-10-22 15:10:28.000000000","message":"nit: it would be cleaner/easier to read in the test if we just mocked this out on the objects.Instance class with a mock method level decorator since we\u0027re just stubbing this out and don\u0027t care about it.","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"3e062db8dd9af4c148b9cc9c9b406a789fb0e7bb","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                                               instance.user_id)"},{"line_number":492,"context_line":""},{"line_number":493,"context_line":"        with contextlib.nested("},{"line_number":494,"context_line":"                mock.patch.object(instance, \u0027obj_load_attr\u0027),"},{"line_number":495,"context_line":"                mock.patch.object(self.compute, \u0027_delete_instance\u0027,"},{"line_number":496,"context_line":"                                  side_effect\u003dtest.TestingException(\u0027test\u0027)),"},{"line_number":497,"context_line":"                mock.patch.object(self.compute, \u0027_set_instance_error_state\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8c0949_63122064","line":494,"in_reply_to":"9aa7fdbe_2287d710","updated":"2014-10-30 07:01:48.000000000","message":"Done","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cbbca79120623278fa1de527a86a4bf223b82f32","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        mock_set_instance_error_state"},{"line_number":502,"context_line":"        ):"},{"line_number":503,"context_line":"            self.compute._init_instance(self.context, instance)"},{"line_number":504,"context_line":"            self.assertEqual(1, mock_set_instance_error_state.call_count)"},{"line_number":505,"context_line":"            self.assertRaises(test.TestingException, mock_delete_instance,"},{"line_number":506,"context_line":"                              self.context, instance, bdms, reservations)"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_029bb367","line":504,"updated":"2014-10-22 15:10:28.000000000","message":"This would be better as:\n\nmock_set_instance_error_state.assert_called_once_with(self.context, instance)","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"3e062db8dd9af4c148b9cc9c9b406a789fb0e7bb","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        mock_set_instance_error_state"},{"line_number":502,"context_line":"        ):"},{"line_number":503,"context_line":"            self.compute._init_instance(self.context, instance)"},{"line_number":504,"context_line":"            self.assertEqual(1, mock_set_instance_error_state.call_count)"},{"line_number":505,"context_line":"            self.assertRaises(test.TestingException, mock_delete_instance,"},{"line_number":506,"context_line":"                              self.context, instance, bdms, reservations)"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a8c0949_83170c51","line":504,"in_reply_to":"9aa7fdbe_029bb367","updated":"2014-10-30 07:01:48.000000000","message":"Done","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cbbca79120623278fa1de527a86a4bf223b82f32","unresolved":false,"context_lines":[{"line_number":692,"context_line":"        self.compute._init_instance(self.context, instance)"},{"line_number":693,"context_line":"        self.mox.VerifyAll()"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"    def test_init_instance_deletes_error_deleting_instance(self):"},{"line_number":696,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":697,"context_line":"                self.context,"},{"line_number":698,"context_line":"                project_id\u003d\u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_02001366","line":695,"updated":"2014-10-22 15:10:28.000000000","message":"We should really just combine this test with test_init_instance_stuck_in_deleting so we don\u0027t have the copy paste, but actually I don\u0027t even know why we have this test since test_init_instance_stuck_in_deleting covers the same thing, the difference in this test is the fake instance has a different vm_state (ERROR), but the power_state/vm_state in init_instance aren\u0027t checked, only that task_state \u003d\u003d DELETING.\n\nThis is probably something we could handle in a separate change though.","commit_id":"b693babea096a57c69866ecbfd25d0559d3f2f5f"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"07d897e2d661c4124655b3a436f5619e65ed7251","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        self.mox.ReplayAll()"},{"line_number":532,"context_line":"        self.compute._init_instance(self.context, instance)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    @mock.patch.object(objects.Instance, \u0027obj_load_attr\u0027)"},{"line_number":535,"context_line":"    @mock.patch.object(objects.BlockDeviceMappingList, \u0027get_by_instance_uuid\u0027)"},{"line_number":536,"context_line":"    def test_init_instance_stuck_in_deleting_raises_exception("},{"line_number":537,"context_line":"            self,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_93ce7bb3","line":534,"updated":"2014-12-15 20:41:11.000000000","message":"This is, IMO, dangerous to mock out here. You will end up masking bugs accidentally. Instead, just set the attributes you need to on the object returned by fake_instance.fake_instance_obj() -- i.e. metadata and system_metadata.","commit_id":"8d0a3771ba86e29762928edeeb50a059ffcf0f06"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"07d897e2d661c4124655b3a436f5619e65ed7251","unresolved":false,"context_lines":[{"line_number":569,"context_line":"            self.assertRaises(test.TestingException, mock_delete_instance,"},{"line_number":570,"context_line":"                              self.context, instance, bdms, reservations)"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    @mock.patch.object(objects.Instance, \u0027obj_load_attr\u0027)"},{"line_number":573,"context_line":"    @mock.patch.object(objects.BlockDeviceMappingList, \u0027get_by_instance_uuid\u0027)"},{"line_number":574,"context_line":"    def _test_init_instance_tries_deleting_resizing_instance("},{"line_number":575,"context_line":"            self, vm_state, status, raises_exc,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a961159_b3c29784","line":572,"updated":"2014-12-15 20:41:11.000000000","message":"ditto","commit_id":"8d0a3771ba86e29762928edeeb50a059ffcf0f06"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"5ee5374641902be023d1463294a5a2647bcd03e8","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        self.compute._init_instance(self.context, instance)"},{"line_number":656,"context_line":"        mock_set_instance_error_state.assert_called_once_with("},{"line_number":657,"context_line":"            self.context, instance)"},{"line_number":658,"context_line":"        self.assertRaises(test.TestingException, mock_delete_instance,"},{"line_number":659,"context_line":"                          self.context, instance, bdms, reservations)"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def _test_init_instance_reverts_crashed_migrations(self,"}],"source_content_type":"text/x-python","patch_set":22,"id":"3acd31a7_546a681b","line":658,"updated":"2015-05-03 16:24:02.000000000","message":"This is not how self.assertRaises works. self.assertRaises will call the mock_delete_instance with the next arguments and it will assert that it will raise test.TestingException. It is self.assertRaises, not self.assertRaised.\n\nAnyways, you can remove this assertion right here, since mock_set_instance_error_state.assert_called_once_with validates the fact that _delete_instance raised an exception.","commit_id":"1f5088a432ad505b1fdbe39f1eea4f440212c527"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"2fe0369c09028a76db75d35fa2a953b6279d5a9e","unresolved":false,"context_lines":[{"line_number":655,"context_line":"        self.compute._init_instance(self.context, instance)"},{"line_number":656,"context_line":"        mock_set_instance_error_state.assert_called_once_with("},{"line_number":657,"context_line":"            self.context, instance)"},{"line_number":658,"context_line":"        self.assertRaises(test.TestingException, mock_delete_instance,"},{"line_number":659,"context_line":"                          self.context, instance, bdms, reservations)"},{"line_number":660,"context_line":""},{"line_number":661,"context_line":"    def _test_init_instance_reverts_crashed_migrations(self,"}],"source_content_type":"text/x-python","patch_set":22,"id":"1aca2d91_180d5c37","line":658,"in_reply_to":"3acd31a7_546a681b","updated":"2015-05-07 14:14:16.000000000","message":"Done","commit_id":"1f5088a432ad505b1fdbe39f1eea4f440212c527"}],"nova/tests/unit/objects/test_migration.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"a381f6670d58f963c961b0a5cf53af707e715dcc","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":179,"context_line":"        fake_migration \u003d fake_db_migration()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        with mock.patch.object("},{"line_number":182,"context_line":"                db, \u0027migration_get_latest_by_instance\u0027"},{"line_number":183,"context_line":"        ) as mock_migration:"},{"line_number":184,"context_line":"            mock_migration.return_value \u003d fake_migration"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_f6996e7a","line":181,"updated":"2015-03-16 18:35:26.000000000","message":"can this be a decorator on the method?","commit_id":"864bb8ad63a90e4da7366f982fe094c2872aa1df"}]}
