)]}'
{"nova/objects/instance_action.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4aa4333b7afc7fde5adcbe91a92a8b8b680740e4","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    @base.serialize_args"},{"line_number":190,"context_line":"    @base.remotable_classmethod"},{"line_number":191,"context_line":"    def event_finish_with_failure(cls, context, instance_uuid, event_name,"},{"line_number":192,"context_line":"                                  exc_val\u003dNone, exc_tb\u003dNone, want_result\u003dNone):"},{"line_number":193,"context_line":"        values \u003d cls.pack_action_event_finish(context, instance_uuid,"},{"line_number":194,"context_line":"                                              event_name, exc_val\u003dexc_val,"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_2ff7dd5b","line":191,"range":{"start_line":191,"start_character":8,"end_line":191,"end_character":33},"updated":"2018-03-22 13:28:33.000000000","message":"You might want to put something into the commit message about how the event finish methods don\u0027t take a host because when calling these to finish the action, the action event record is looked up by the existing action (via request id) and event name from the start event.\n\nIt does make me wonder, do we have actions like migrate where the action starts on one host but ends on another?\n\nIn the case of a failure, I\u0027d think the admin wants to see where the failure occurred, not where the action started. So should we take the host field for the event finish and update it?","commit_id":"d9b72fd366d3ebc22227c64bfa4c1bf052f2046f"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"666c24b2d703396c1bab7fe3c8ad3e7137e5b181","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    @base.serialize_args"},{"line_number":190,"context_line":"    @base.remotable_classmethod"},{"line_number":191,"context_line":"    def event_finish_with_failure(cls, context, instance_uuid, event_name,"},{"line_number":192,"context_line":"                                  exc_val\u003dNone, exc_tb\u003dNone, want_result\u003dNone):"},{"line_number":193,"context_line":"        values \u003d cls.pack_action_event_finish(context, instance_uuid,"},{"line_number":194,"context_line":"                                              event_name, exc_val\u003dexc_val,"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_6cb2ad4b","line":191,"range":{"start_line":191,"start_character":8,"end_line":191,"end_character":33},"in_reply_to":"df7087c5_2ff7dd5b","updated":"2018-03-23 03:35:28.000000000","message":"@zhenyu @matt Yeah, I only record the host in action start because the host is same when we use EventReport to record event.\n\nSuch as the migrate case, 5 event will be record:\n\nconductor_migrate_server\ncompute_prep_resize(dest)\ncompute_resize_instance(src)\ncompute_finish_resize(dest)\n\nWe have actions like migrate the action starts on one host but ends on another, but one event have same host in the whole event life.\n\nThat is, we don\u0027t have the **action_event** have 2 different hosts when starting and finishing.\n\nAs @matt mentioned, we should need add some thing into the commit message to explain this.","commit_id":"d9b72fd366d3ebc22227c64bfa4c1bf052f2046f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"feaef7cf5f57d1e8e579148d19ce8c097ccfe713","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    @base.serialize_args"},{"line_number":190,"context_line":"    @base.remotable_classmethod"},{"line_number":191,"context_line":"    def event_finish_with_failure(cls, context, instance_uuid, event_name,"},{"line_number":192,"context_line":"                                  exc_val\u003dNone, exc_tb\u003dNone, want_result\u003dNone):"},{"line_number":193,"context_line":"        values \u003d cls.pack_action_event_finish(context, instance_uuid,"},{"line_number":194,"context_line":"                                              event_name, exc_val\u003dexc_val,"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_121ec2ba","line":191,"range":{"start_line":191,"start_character":8,"end_line":191,"end_character":33},"in_reply_to":"df7087c5_2ff7dd5b","updated":"2018-03-22 13:59:29.000000000","message":"Yeah, I think the usecase for adding this is mainly to check the failed log.","commit_id":"d9b72fd366d3ebc22227c64bfa4c1bf052f2046f"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"046ecc07a40309abb0304363691665574930e515","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    @base.serialize_args"},{"line_number":190,"context_line":"    @base.remotable_classmethod"},{"line_number":191,"context_line":"    def event_finish_with_failure(cls, context, instance_uuid, event_name,"},{"line_number":192,"context_line":"                                  exc_val\u003dNone, exc_tb\u003dNone, want_result\u003dNone):"},{"line_number":193,"context_line":"        values \u003d cls.pack_action_event_finish(context, instance_uuid,"},{"line_number":194,"context_line":"                                              event_name, exc_val\u003dexc_val,"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_0cc8d11f","line":191,"range":{"start_line":191,"start_character":8,"end_line":191,"end_character":33},"in_reply_to":"df7087c5_6cb2ad4b","updated":"2018-03-23 03:56:03.000000000","message":"https://github.com/openstack/nova/blob/2ec8c49f6cb4a0e7dba217e824c20d9c703d2105/nova/compute/utils.py#L952-L964\n\nThe links is the enter and exit method of  EventReport.","commit_id":"d9b72fd366d3ebc22227c64bfa4c1bf052f2046f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"79eff4713f3e6b14158d45b457f0948e6023b889","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    # Version 1.0: Initial version"},{"line_number":225,"context_line":"    # Version 1.1: InstanceActionEvent \u003c\u003d 1.1"},{"line_number":226,"context_line":"    # Version 1.2: InstanceActionEvent \u003c\u003d 1.2"},{"line_number":227,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":228,"context_line":"    fields \u003d {"},{"line_number":229,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027InstanceActionEvent\u0027),"},{"line_number":230,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_92a172fa","line":227,"updated":"2018-03-22 13:41:07.000000000","message":"Does this really need to be updated?","commit_id":"d9b72fd366d3ebc22227c64bfa4c1bf052f2046f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"36a60023c294590b00e7e3e2935d50c622145dec","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    # Version 1.0: Initial version"},{"line_number":225,"context_line":"    # Version 1.1: InstanceActionEvent \u003c\u003d 1.1"},{"line_number":226,"context_line":"    # Version 1.2: InstanceActionEvent \u003c\u003d 1.2"},{"line_number":227,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":228,"context_line":"    fields \u003d {"},{"line_number":229,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027InstanceActionEvent\u0027),"},{"line_number":230,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_26ec3cc6","line":227,"in_reply_to":"df7087c5_0c2f713f","updated":"2018-03-26 14:25:36.000000000","message":"\u003e TBH, I\u0027m not sure about this, but now I\u0027m sure that we don\u0027t need\n \u003e this.\n \u003e \n \u003e I misunderstand this by patch like https://review.openstack.org/#/c/216733/9/nova/objects/block_device.py@276\n \u003e \n \u003e It seems the obj list changing just because ``obj_relationships``\n \u003e changing, but now we don\u0027t change anything on InstanceActionEventList,\n \u003e so version up is no need.\n\nThat\u0027s the very old way we had to do this stuff, but it hasn\u0027t been required in several releases/years now. There is a manifest of the objects and their relationships now and the manifest understands the versions between objects.\n\nhttps://github.com/openstack/nova/blob/ced5d0f323d1467c1fc2be602ded6bffb2c234eb/nova/objects/base.py#L201\n\nd5f59c1a3278e344f83a0c5b44ca94c9402bad22","commit_id":"d9b72fd366d3ebc22227c64bfa4c1bf052f2046f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"540b03982f185f53e853e7dc3c63ede2c0478636","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    # Version 1.0: Initial version"},{"line_number":225,"context_line":"    # Version 1.1: InstanceActionEvent \u003c\u003d 1.1"},{"line_number":226,"context_line":"    # Version 1.2: InstanceActionEvent \u003c\u003d 1.2"},{"line_number":227,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":228,"context_line":"    fields \u003d {"},{"line_number":229,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027InstanceActionEvent\u0027),"},{"line_number":230,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_5a23cda7","line":227,"in_reply_to":"df7087c5_0c2f713f","updated":"2018-03-23 14:48:17.000000000","message":"Thanks for the clearification","commit_id":"d9b72fd366d3ebc22227c64bfa4c1bf052f2046f"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"666c24b2d703396c1bab7fe3c8ad3e7137e5b181","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    # Version 1.0: Initial version"},{"line_number":225,"context_line":"    # Version 1.1: InstanceActionEvent \u003c\u003d 1.1"},{"line_number":226,"context_line":"    # Version 1.2: InstanceActionEvent \u003c\u003d 1.2"},{"line_number":227,"context_line":"    VERSION \u003d \u00271.2\u0027"},{"line_number":228,"context_line":"    fields \u003d {"},{"line_number":229,"context_line":"        \u0027objects\u0027: fields.ListOfObjectsField(\u0027InstanceActionEvent\u0027),"},{"line_number":230,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":2,"id":"df7087c5_0c2f713f","line":227,"in_reply_to":"df7087c5_92a172fa","updated":"2018-03-23 03:35:28.000000000","message":"TBH, I\u0027m not sure about this, but now I\u0027m sure that we don\u0027t need this.\n\nI misunderstand this by patch like https://review.openstack.org/#/c/216733/9/nova/objects/block_device.py@276\n\nIt seems the obj list changing just because ``obj_relationships`` changing, but now we don\u0027t change anything on InstanceActionEventList, so version up is no need.","commit_id":"d9b72fd366d3ebc22227c64bfa4c1bf052f2046f"}],"nova/tests/unit/objects/test_instance_action.py":[{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4d8ee69ee337ff2896bd6c1a2021307994503ad7","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        mock_get.assert_called_once_with(context,"},{"line_number":70,"context_line":"            \u0027fake-uuid\u0027, \u0027fake-request\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_pack_action_start(self):"},{"line_number":73,"context_line":"        values \u003d instance_action.InstanceAction.pack_action_start("},{"line_number":74,"context_line":"            self.context, \u0027fake-uuid\u0027, \u0027fake-action\u0027)"},{"line_number":75,"context_line":"        self.assertEqual(values[\u0027request_id\u0027], self.context.request_id)"},{"line_number":76,"context_line":"        self.assertEqual(values[\u0027user_id\u0027], self.context.user_id)"},{"line_number":77,"context_line":"        self.assertEqual(values[\u0027project_id\u0027], self.context.project_id)"},{"line_number":78,"context_line":"        self.assertEqual(values[\u0027instance_uuid\u0027], \u0027fake-uuid\u0027)"},{"line_number":79,"context_line":"        self.assertEqual(values[\u0027action\u0027], \u0027fake-action\u0027)"},{"line_number":80,"context_line":"        self.assertEqual(values[\u0027start_time\u0027].replace(tzinfo\u003dNone),"},{"line_number":81,"context_line":"                         self.context.timestamp)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def test_pack_action_finish(self):"},{"line_number":84,"context_line":"        self.useFixture(utils_fixture.TimeFixture(NOW))"}],"source_content_type":"text/x-python","patch_set":4,"id":"df7087c5_7a8fb122","line":81,"range":{"start_line":72,"start_character":0,"end_line":81,"end_character":48},"updated":"2018-03-23 14:59:00.000000000","message":"Why not test your new value here?","commit_id":"32d5a2acc8d1be77779d3f2e19d763f46013ff36"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b9507e931eb3b1d24f7f40168456dd4b5c7b2aa6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        mock_get.assert_called_once_with(context,"},{"line_number":70,"context_line":"            \u0027fake-uuid\u0027, \u0027fake-request\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def test_pack_action_start(self):"},{"line_number":73,"context_line":"        values \u003d instance_action.InstanceAction.pack_action_start("},{"line_number":74,"context_line":"            self.context, \u0027fake-uuid\u0027, \u0027fake-action\u0027)"},{"line_number":75,"context_line":"        self.assertEqual(values[\u0027request_id\u0027], self.context.request_id)"},{"line_number":76,"context_line":"        self.assertEqual(values[\u0027user_id\u0027], self.context.user_id)"},{"line_number":77,"context_line":"        self.assertEqual(values[\u0027project_id\u0027], self.context.project_id)"},{"line_number":78,"context_line":"        self.assertEqual(values[\u0027instance_uuid\u0027], \u0027fake-uuid\u0027)"},{"line_number":79,"context_line":"        self.assertEqual(values[\u0027action\u0027], \u0027fake-action\u0027)"},{"line_number":80,"context_line":"        self.assertEqual(values[\u0027start_time\u0027].replace(tzinfo\u003dNone),"},{"line_number":81,"context_line":"                         self.context.timestamp)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def test_pack_action_finish(self):"},{"line_number":84,"context_line":"        self.useFixture(utils_fixture.TimeFixture(NOW))"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_363b1bd2","line":81,"range":{"start_line":72,"start_character":0,"end_line":81,"end_character":48},"in_reply_to":"df7087c5_7a8fb122","updated":"2018-03-26 01:27:38.000000000","message":"I guess you saw the wrong testcase, we add the host field into ActionEventObject but not into ActionObject, and we test it in @242 .","commit_id":"32d5a2acc8d1be77779d3f2e19d763f46013ff36"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"b9507e931eb3b1d24f7f40168456dd4b5c7b2aa6","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            self.context, \u0027fake-uuid\u0027, \u0027fake-event\u0027, want_result\u003dTrue)"},{"line_number":240,"context_line":"        mock_finish.assert_called_once_with(self.context,"},{"line_number":241,"context_line":"                                            expected_packed_values)"},{"line_number":242,"context_line":"        self.compare_obj(event, fake_event)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @mock.patch.object(db, \u0027action_event_finish\u0027)"},{"line_number":245,"context_line":"    def test_event_finish_no_result(self, mock_finish):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_36123b5a","line":242,"range":{"start_line":242,"start_character":0,"end_line":242,"end_character":43},"updated":"2018-03-26 01:27:38.000000000","message":"(Pdb) p event\nInstanceActionEvent(action_id\u003d123,created_at\u003d2018-03-26T01:22:33Z,deleted\u003dFalse,deleted_at\u003dNone,event\u003d\u0027fake-event\u0027,finish_time\u003dNone,host\u003d\u0027fake-host\u0027,id\u003d123,result\u003d\u0027fake-result\u0027,start_time\u003d2018-03-26T01:22:33Z,traceback\u003d\u0027fake-tb\u0027,updated_at\u003dNone)\n(Pdb) p fake_event\n{\u0027deleted\u0027: False, \u0027start_time\u0027: datetime.datetime(2018, 3, 26, 1, 22, 33), \u0027updated_at\u0027: None, \u0027host\u0027: \u0027fake-host\u0027, \u0027result\u0027: \u0027fake-result\u0027, \u0027deleted_at\u0027: None, \u0027event\u0027: \u0027fake-event\u0027, \u0027finish_time\u0027: None, \u0027created_at\u0027: datetime.datetime(2018, 3, 26, 1, 22, 33), \u0027traceback\u0027: \u0027fake-tb\u0027, \u0027id\u0027: 123, \u0027action_id\u0027: 123\n\nThe \u0027host\u0027 already in here, and we compare the new obj in this testcase.","commit_id":"32d5a2acc8d1be77779d3f2e19d763f46013ff36"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f9f53ffc3e232a0f85cc614910172c390a481f95","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            self.context, \u0027fake-uuid\u0027, \u0027fake-event\u0027, want_result\u003dTrue)"},{"line_number":240,"context_line":"        mock_finish.assert_called_once_with(self.context,"},{"line_number":241,"context_line":"                                            expected_packed_values)"},{"line_number":242,"context_line":"        self.compare_obj(event, fake_event)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @mock.patch.object(db, \u0027action_event_finish\u0027)"},{"line_number":245,"context_line":"    def test_event_finish_no_result(self, mock_finish):"}],"source_content_type":"text/x-python","patch_set":4,"id":"bf659307_36aebbe7","line":242,"range":{"start_line":242,"start_character":0,"end_line":242,"end_character":43},"in_reply_to":"bf659307_36123b5a","updated":"2018-03-26 01:33:09.000000000","message":"Ah, yes, my bad, thanks for the clearification","commit_id":"32d5a2acc8d1be77779d3f2e19d763f46013ff36"}]}
