)]}'
{"nova/compute/api.py":[{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"9260db3c7ad33d79fa528b26d7c9cb05ce11d122","unresolved":false,"context_lines":[{"line_number":170,"context_line":"    @six.wraps(function)"},{"line_number":171,"context_line":"    def inner(self, context, instance, *args, **kwargs):"},{"line_number":172,"context_line":"        if instance.disable_terminate:"},{"line_number":173,"context_line":"            raise exception.InstanceDisableTerminate(instance_uuid\u003dinstance.uuid)"},{"line_number":174,"context_line":"        return function(self, context, instance, *args, **kwargs)"},{"line_number":175,"context_line":"    return inner"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_0ceb2779","line":173,"range":{"start_line":173,"start_character":12,"end_line":173,"end_character":81},"updated":"2016-11-10 09:49:15.000000000","message":"This line is too long too.","commit_id":"def4b9c7d76c94c629b687e63179504b5096eba9"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f91af3225de4d176245505da34eccc18a922a777","unresolved":false,"context_lines":[{"line_number":1676,"context_line":"        if instance.disable_terminate:"},{"line_number":1677,"context_line":"            LOG.info(_LI(\u0027instance termination disabled\u0027),"},{"line_number":1678,"context_line":"                     instance\u003dinstance)"},{"line_number":1679,"context_line":"            return"},{"line_number":1680,"context_line":""},{"line_number":1681,"context_line":"        # If there is an instance.host the instance has been scheduled and"},{"line_number":1682,"context_line":"        # sent to a cell/compute which means it was pulled from the cell db."}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_b838b1a1","side":"PARENT","line":1679,"range":{"start_line":1679,"start_character":12,"end_line":1679,"end_character":18},"updated":"2016-11-10 10:46:45.000000000","message":"why not to raise exception.InstanceDisableTerminate(\n                instance_uuid\u003dinstance.uuid) here instead of decorator","commit_id":"72d0c3a484a17fa67ec2827377c15c25e8b8efda"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f91af3225de4d176245505da34eccc18a922a777","unresolved":false,"context_lines":[{"line_number":2026,"context_line":"                                                     reservations\u003dreservations)"},{"line_number":2027,"context_line":""},{"line_number":2028,"context_line":"    # NOTE(maoy): we allow delete to be called no matter what vm_state says."},{"line_number":2029,"context_line":"    @check_instance_disable_terminate"},{"line_number":2030,"context_line":"    @check_instance_lock"},{"line_number":2031,"context_line":"    @check_instance_cell"},{"line_number":2032,"context_line":"    @check_instance_state(vm_state\u003dNone, task_state\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_78e53936","line":2029,"range":{"start_line":2029,"start_character":5,"end_line":2029,"end_character":37},"updated":"2016-11-10 10:46:45.000000000","message":"honestly I couldn\u0027t see any procs in using decorators here","commit_id":"b65b4473ab21ab91267b4f0fbaea4752218dd37e"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"5a054675f5776fdb8db7c1025dd156059b4a0bbf","unresolved":false,"context_lines":[{"line_number":2026,"context_line":"                                                     reservations\u003dreservations)"},{"line_number":2027,"context_line":""},{"line_number":2028,"context_line":"    # NOTE(maoy): we allow delete to be called no matter what vm_state says."},{"line_number":2029,"context_line":"    @check_instance_disable_terminate"},{"line_number":2030,"context_line":"    @check_instance_lock"},{"line_number":2031,"context_line":"    @check_instance_cell"},{"line_number":2032,"context_line":"    @check_instance_state(vm_state\u003dNone, task_state\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_22946f41","line":2029,"range":{"start_line":2029,"start_character":5,"end_line":2029,"end_character":37},"in_reply_to":"9a629dbe_58015537","updated":"2016-11-10 11:52:55.000000000","message":"yes, it\u0027s will be enough to add raise on line 1679 of the code before this change","commit_id":"b65b4473ab21ab91267b4f0fbaea4752218dd37e"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"c1b2ae7531918a126ce20f602b903b64d23d6bca","unresolved":false,"context_lines":[{"line_number":2026,"context_line":"                                                     reservations\u003dreservations)"},{"line_number":2027,"context_line":""},{"line_number":2028,"context_line":"    # NOTE(maoy): we allow delete to be called no matter what vm_state says."},{"line_number":2029,"context_line":"    @check_instance_disable_terminate"},{"line_number":2030,"context_line":"    @check_instance_lock"},{"line_number":2031,"context_line":"    @check_instance_cell"},{"line_number":2032,"context_line":"    @check_instance_state(vm_state\u003dNone, task_state\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_58015537","line":2029,"range":{"start_line":2029,"start_character":5,"end_line":2029,"end_character":37},"in_reply_to":"9a629dbe_78e53936","updated":"2016-11-10 10:57:31.000000000","message":"I think that this is the benefit: as you have a decorator, you don\u0027t need to copy the check everywhere. But I agree with you that this one could be replaced with a simple method which checks that if instance.disable_terminate is true. And if so, we should log and raise an exception.","commit_id":"b65b4473ab21ab91267b4f0fbaea4752218dd37e"},{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"f91af3225de4d176245505da34eccc18a922a777","unresolved":false,"context_lines":[{"line_number":2044,"context_line":"        self._delete(context, instance, \u0027delete\u0027, self._do_delete,"},{"line_number":2045,"context_line":"                     task_state\u003dtask_states.DELETING)"},{"line_number":2046,"context_line":""},{"line_number":2047,"context_line":"    @check_instance_disable_terminate"},{"line_number":2048,"context_line":"    @check_instance_lock"},{"line_number":2049,"context_line":"    @check_instance_cell"},{"line_number":2050,"context_line":"    @check_instance_state(vm_state\u003dNone, task_state\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_f83ea989","line":2047,"range":{"start_line":2047,"start_character":5,"end_line":2047,"end_character":37},"updated":"2016-11-10 10:46:45.000000000","message":"ditto","commit_id":"b65b4473ab21ab91267b4f0fbaea4752218dd37e"}],"nova/exception.py":[{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"7a25fb14828252d4606c9ac81b55dc346353d2e9","unresolved":false,"context_lines":[{"line_number":1498,"context_line":""},{"line_number":1499,"context_line":""},{"line_number":1500,"context_line":"class InstanceDisableTerminate(InstanceInvalidState):"},{"line_number":1501,"context_line":"    msg_fmt \u003d _(\"Instance %(instance_uuid)s disable terminate\")"},{"line_number":1502,"context_line":""},{"line_number":1503,"context_line":""},{"line_number":1504,"context_line":"class ConfigDriveInvalidValue(Invalid):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_6cabc375","line":1501,"range":{"start_line":1501,"start_character":44,"end_line":1501,"end_character":61},"updated":"2016-11-10 09:45:06.000000000","message":"I think that should be something like \"is disabled to terminate\" or so. I\u0027m not sure that the current one is gramatically correct.","commit_id":"def4b9c7d76c94c629b687e63179504b5096eba9"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":14819,"name":"Timofey Durakov","email":"timofei.nd@gmail.com","username":"tdurakov"},"change_message_id":"e036f86dff944dca5272ff3bb1b6b3243f9f1e31","unresolved":false,"context_lines":[{"line_number":1573,"context_line":""},{"line_number":1574,"context_line":"    def test_delete_disabled_terminate_server(self):"},{"line_number":1575,"context_line":"        req \u003d self._create_delete_request(FAKE_UUID)"},{"line_number":1576,"context_line":"        self.stubs.Set(compute_api.API, \u0027soft_delete\u0027,"},{"line_number":1577,"context_line":"                       fakes.fake_delete_to_disabled_terminate_server)"},{"line_number":1578,"context_line":"        self.stubs.Set(compute_api.API, \u0027delete\u0027,"},{"line_number":1579,"context_line":"                       fakes.fake_delete_to_disabled_terminate_server)"},{"line_number":1580,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_759b5666","line":1577,"range":{"start_line":1576,"start_character":8,"end_line":1577,"end_character":70},"updated":"2016-11-11 08:40:36.000000000","message":"what is the purpose for stubbing this one? \nCONF.reclaim_instance_interval is defaulted to 0 so, code pass for soft_delete is not used. Another possible option would probably be to stub compute_api.API_delete instead.","commit_id":"3ff555245a415e297337ac9b7e0ba4f9d3523527"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"7a25fb14828252d4606c9ac81b55dc346353d2e9","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"    def test_soft_delete_disabled(self):"},{"line_number":1373,"context_line":"        inst \u003d self._create_instance_obj()"},{"line_number":1374,"context_line":"        inst.disable_terminate \u003d True"},{"line_number":1375,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_update_and_get_original\u0027)"},{"line_number":1376,"context_line":"        self.mox.ReplayAll()"},{"line_number":1377,"context_line":"        self.compute_api.soft_delete(self.context, inst)"},{"line_number":1378,"context_line":"        self.assertRaises(exception.InstanceDisableTerminate,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_46250007","line":1375,"range":{"start_line":1375,"start_character":8,"end_line":1375,"end_character":17},"updated":"2016-11-10 09:45:06.000000000","message":"Instead of mox, you should use mock as one of the current goals [1] is to get rid of mox, and use mock. So I think you new tests should not contain mox. (However I see that other delete tests still use mox. You can modify them also, in a subsequent patch).\n\n[1]: https://blueprints.launchpad.net/nova/+spec/mox-to-mock-conversion","commit_id":"def4b9c7d76c94c629b687e63179504b5096eba9"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"7a25fb14828252d4606c9ac81b55dc346353d2e9","unresolved":false,"context_lines":[{"line_number":1374,"context_line":"        inst.disable_terminate \u003d True"},{"line_number":1375,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_update_and_get_original\u0027)"},{"line_number":1376,"context_line":"        self.mox.ReplayAll()"},{"line_number":1377,"context_line":"        self.compute_api.soft_delete(self.context, inst)"},{"line_number":1378,"context_line":"        self.assertRaises(exception.InstanceDisableTerminate,"},{"line_number":1379,"context_line":"                          self.compute_api.soft_delete,"},{"line_number":1380,"context_line":"                          self.context, instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_0caec797","line":1377,"range":{"start_line":1377,"start_character":8,"end_line":1377,"end_character":56},"updated":"2016-11-10 09:45:06.000000000","message":"This one raises an exception, which you are not catching. The line below solves this problem (as you assert that the call will raise an InstanceDisableTerminate exception). So you should just delete this line. As thats the problem why test fail.","commit_id":"def4b9c7d76c94c629b687e63179504b5096eba9"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"7a25fb14828252d4606c9ac81b55dc346353d2e9","unresolved":false,"context_lines":[{"line_number":1377,"context_line":"        self.compute_api.soft_delete(self.context, inst)"},{"line_number":1378,"context_line":"        self.assertRaises(exception.InstanceDisableTerminate,"},{"line_number":1379,"context_line":"                          self.compute_api.soft_delete,"},{"line_number":1380,"context_line":"                          self.context, instance)"},{"line_number":1381,"context_line":""},{"line_number":1382,"context_line":"    def test_delete_disabled(self):"},{"line_number":1383,"context_line":"        inst \u003d self._create_instance_obj()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_ac895b28","line":1380,"range":{"start_line":1380,"start_character":40,"end_line":1380,"end_character":48},"updated":"2016-11-10 09:45:06.000000000","message":"Should be just \"inst\" as this  is you instance objects\u0027 name.","commit_id":"def4b9c7d76c94c629b687e63179504b5096eba9"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"7a25fb14828252d4606c9ac81b55dc346353d2e9","unresolved":false,"context_lines":[{"line_number":1384,"context_line":"        inst.disable_terminate \u003d True"},{"line_number":1385,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_update_and_get_original\u0027)"},{"line_number":1386,"context_line":"        self.mox.ReplayAll()"},{"line_number":1387,"context_line":"        self.compute_api.delete(self.context, inst)"},{"line_number":1388,"context_line":"        self.assertRaises(exception.InstanceDisableTerminate,"},{"line_number":1389,"context_line":"                          self.compute_api.delete,"},{"line_number":1390,"context_line":"                          self.context, instance)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_acdebb0e","line":1387,"range":{"start_line":1387,"start_character":8,"end_line":1387,"end_character":51},"updated":"2016-11-10 09:45:06.000000000","message":"this line should be also deleted, as it will raise an exception which you are not catching.","commit_id":"def4b9c7d76c94c629b687e63179504b5096eba9"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"7a25fb14828252d4606c9ac81b55dc346353d2e9","unresolved":false,"context_lines":[{"line_number":1387,"context_line":"        self.compute_api.delete(self.context, inst)"},{"line_number":1388,"context_line":"        self.assertRaises(exception.InstanceDisableTerminate,"},{"line_number":1389,"context_line":"                          self.compute_api.delete,"},{"line_number":1390,"context_line":"                          self.context, instance)"},{"line_number":1391,"context_line":""},{"line_number":1392,"context_line":"    def test_delete_soft_rollback(self):"},{"line_number":1393,"context_line":"        inst \u003d self._create_instance_obj()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_0cea47ac","line":1390,"range":{"start_line":1390,"start_character":40,"end_line":1390,"end_character":48},"updated":"2016-11-10 09:45:06.000000000","message":"Should be \"inst\".","commit_id":"def4b9c7d76c94c629b687e63179504b5096eba9"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"be14c1772485da5c52a2d98a17b39cbfea1b8c0c","unresolved":false,"context_lines":[{"line_number":1372,"context_line":"    def test_soft_delete_disabled(self):"},{"line_number":1373,"context_line":"        inst \u003d self._create_instance_obj()"},{"line_number":1374,"context_line":"        inst.disable_terminate \u003d True"},{"line_number":1375,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_update_and_get_original\u0027)"},{"line_number":1376,"context_line":"        self.mox.ReplayAll()"},{"line_number":1377,"context_line":"        self.assertRaises(exception.InstanceDisableTerminate,"},{"line_number":1378,"context_line":"                          self.compute_api.soft_delete,"},{"line_number":1379,"context_line":"                          self.context, inst)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_91eae30d","line":1376,"range":{"start_line":1375,"start_character":0,"end_line":1376,"end_character":28},"updated":"2016-11-10 13:20:26.000000000","message":"Same as previous comments. Use mock instead of mox","commit_id":"93582dbb766d55f9e7423b9a37d4a7ff10ef67cf"},{"author":{"_account_id":18602,"name":"Gábor Antal","email":"antal@inf.u-szeged.hu","username":"antal"},"change_message_id":"be14c1772485da5c52a2d98a17b39cbfea1b8c0c","unresolved":false,"context_lines":[{"line_number":1381,"context_line":"    def test_delete_disabled(self):"},{"line_number":1382,"context_line":"        inst \u003d self._create_instance_obj()"},{"line_number":1383,"context_line":"        inst.disable_terminate \u003d True"},{"line_number":1384,"context_line":"        self.mox.StubOutWithMock(db, \u0027instance_update_and_get_original\u0027)"},{"line_number":1385,"context_line":"        self.mox.ReplayAll()"},{"line_number":1386,"context_line":"        self.assertRaises(exception.InstanceDisableTerminate,"},{"line_number":1387,"context_line":"                          self.compute_api.delete,"},{"line_number":1388,"context_line":"                          self.context, inst)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a629dbe_d1c7fb95","line":1385,"range":{"start_line":1384,"start_character":0,"end_line":1385,"end_character":28},"updated":"2016-11-10 13:20:26.000000000","message":"ditto","commit_id":"93582dbb766d55f9e7423b9a37d4a7ff10ef67cf"}]}
