)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"5e97443925ffb8f240647c9f79cf55fd3b3c64b5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"os-xenapi: Exception Error logs shown in Citrix XenServer CI"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are many errors in the patchs which passed our XenServer CI,"},{"line_number":10,"context_line":"we can see there are some errors in nova."},{"line_number":11,"context_line":"It is caused by the exception which we throw out in the os-xenapi"},{"line_number":12,"context_line":"glance.py. Nova compute service couldn\u0027t recognize it."},{"line_number":13,"context_line":"Add a exception which computer service can process"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5f201791_1aaf782a","line":10,"updated":"2017-06-28 09:23:35.000000000","message":"Suggest describe the specific scenario where the errors come from - e.g. query an un-existing image.\nOtherwise I guess we need handle other exceptions also, if the purpose is to resolve the problem that os-xenapi didn\u0027t throw a pre-defined exception.","commit_id":"4fbb21f64a55be0abea5fe1d65b88dd94582f3ce"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"933055813d0eecc9958dfaf13bd7172415884964","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     naichuans \u003cnaichuan.sun@citrix.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-06-28 09:14:24 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"os-xenapi: Exception Error logs shown in Citrix XenServer CI"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"There are many errors in the patchs which passed our XenServer CI,"},{"line_number":10,"context_line":"we can see there are some errors in nova."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f201791_7acf8c28","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":10},"updated":"2017-06-28 09:20:47.000000000","message":"XenAPI ?","commit_id":"22bcbe670ddb3992095a704999b96bf9e42d5272"}],"nova/tests/unit/virt/xenapi/test_xenapi.py":[{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"0edc5c03b94069f948ef6aed187b37da487d26fd","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        func_call_matcher \u003d matchers.FunctionCallMatcher(expected_calls)"},{"line_number":615,"context_line":"        image_id \u003d \"my_snapshot_id\""},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        stubs.stubout_instance_snapshot(self.stubs)"},{"line_number":618,"context_line":"        stubs.stubout_is_snapshot(self.stubs)"},{"line_number":619,"context_line":"        # Stubbing out firewall driver as previous stub sets alters"},{"line_number":620,"context_line":"        # xml rpc result parsing"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_8fbc46bc","line":617,"range":{"start_line":617,"start_character":8,"end_line":617,"end_character":14},"updated":"2017-06-29 11:18:45.000000000","message":"we should use mock instead of stubs now. And please define these tests in test_vmops.py if there is no tight dependence.","commit_id":"12cc77b9e5bf16f0464f32d5f39dcb8e38d4edf2"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"6dfa535440cee29cdcb08f2d685bb061e858168d","unresolved":false,"context_lines":[{"line_number":614,"context_line":"        func_call_matcher \u003d matchers.FunctionCallMatcher(expected_calls)"},{"line_number":615,"context_line":"        image_id \u003d \"my_snapshot_id\""},{"line_number":616,"context_line":""},{"line_number":617,"context_line":"        stubs.stubout_instance_snapshot(self.stubs)"},{"line_number":618,"context_line":"        stubs.stubout_is_snapshot(self.stubs)"},{"line_number":619,"context_line":"        # Stubbing out firewall driver as previous stub sets alters"},{"line_number":620,"context_line":"        # xml rpc result parsing"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_4c47434d","line":617,"range":{"start_line":617,"start_character":8,"end_line":617,"end_character":14},"in_reply_to":"3f1d235d_8fbc46bc","updated":"2017-06-30 01:26:54.000000000","message":"will move to test_vmops.py","commit_id":"12cc77b9e5bf16f0464f32d5f39dcb8e38d4edf2"}],"nova/virt/xenapi/image/glance.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"f90e60e867bafd6f4500de66acfbbf9a1f560dff","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        except XenAPI.Failure as exc:"},{"line_number":94,"context_line":"            LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":95,"context_line":"            details \u003d exc.details"},{"line_number":96,"context_line":"            if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"},{"line_number":97,"context_line":"                LOG.debug(\"raise ImageNotFound exception\")"},{"line_number":98,"context_line":"                raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":99,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_66389e9f","line":96,"updated":"2017-07-03 11:46:47.000000000","message":"Can ImageNotFound be a specific xenapi_exception and converted by os-xenapi?\nI don\u0027t like catchable exceptions being hidden, particularly now we have a pythonic interface.  We should abstract as much to do with plugins as makes sense.\n\nNova doesn\u0027t care that a dom0 plugin got called - all it cares about is that it received an exception that it knows what to do with (as in the PluginRetriesExceeded case)","commit_id":"7fc2d8a651e6c0945f6eebe073ca00a1561384ef"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"a007cfc2aa16f2693f8ad0e0c8991c4b770b5eb7","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        except XenAPI.Failure as exc:"},{"line_number":94,"context_line":"            LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":95,"context_line":"            details \u003d exc.details"},{"line_number":96,"context_line":"            if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"},{"line_number":97,"context_line":"                LOG.debug(\"raise ImageNotFound exception\")"},{"line_number":98,"context_line":"                raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":99,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_fd5e4674","line":96,"in_reply_to":"3f1d235d_2c85d55a","updated":"2017-07-05 05:30:43.000000000","message":"According to the discussion with Huan and Jianghua, we will add a new exception PluginImageNotFound in os_xenapi/client, process as bellow,\n1, Add new exception PluginImageNotFound in os_xenapi/client/exception.py\n1, get XenAPI.Failure in host_glance.py, reraise PluginImageNotFound\n2, get PluginImageNotFound in nova/virt/xenapi/image/glance.py, reraise nova exception exception.ImageNotFound\nIs that OK?","commit_id":"7fc2d8a651e6c0945f6eebe073ca00a1561384ef"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"5713b87078c3c0f1dfc2669c31919594c9694716","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        except XenAPI.Failure as exc:"},{"line_number":94,"context_line":"            LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":95,"context_line":"            details \u003d exc.details"},{"line_number":96,"context_line":"            if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"},{"line_number":97,"context_line":"                LOG.debug(\"raise ImageNotFound exception\")"},{"line_number":98,"context_line":"                raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":99,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_2c85d55a","line":96,"in_reply_to":"3f1d235d_66389e9f","updated":"2017-07-04 01:24:19.000000000","message":"Will check if we could use a define an exception to do it.","commit_id":"7fc2d8a651e6c0945f6eebe073ca00a1561384ef"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"eec233cecae3685fc5c97f08f8ab6d8a31eb0b34","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        except XenAPI.Failure as exc:"},{"line_number":94,"context_line":"            LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":95,"context_line":"            details \u003d exc.details"},{"line_number":96,"context_line":"            if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"},{"line_number":97,"context_line":"                LOG.debug(\"raise ImageNotFound exception\")"},{"line_number":98,"context_line":"                raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":99,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_96d84f1e","line":96,"in_reply_to":"3f1d235d_fd5e4674","updated":"2017-07-05 07:22:55.000000000","message":"Perfect :) Thanks.","commit_id":"7fc2d8a651e6c0945f6eebe073ca00a1561384ef"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"f90e60e867bafd6f4500de66acfbbf9a1f560dff","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s,\""},{"line_number":101,"context_line":"                          \"re-raise\", exc)"},{"line_number":102,"context_line":"                raise"},{"line_number":103,"context_line":"        except Exception as exc:"},{"line_number":104,"context_line":"            LOG.debug(\"get exception from xenapi plugin %s, re-raise\", exc)"},{"line_number":105,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_c6d89280","line":103,"updated":"2017-07-03 11:46:47.000000000","message":"What\u0027s the benefit of catching and re-raising this here?\nIn general catching Exception is very bad practice...","commit_id":"7fc2d8a651e6c0945f6eebe073ca00a1561384ef"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"5713b87078c3c0f1dfc2669c31919594c9694716","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s,\""},{"line_number":101,"context_line":"                          \"re-raise\", exc)"},{"line_number":102,"context_line":"                raise"},{"line_number":103,"context_line":"        except Exception as exc:"},{"line_number":104,"context_line":"            LOG.debug(\"get exception from xenapi plugin %s, re-raise\", exc)"},{"line_number":105,"context_line":"            raise"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_ec7ebd69","line":103,"in_reply_to":"3f1d235d_c6d89280","updated":"2017-07-04 01:24:19.000000000","message":"we will modify the upper code and this part of code would be removed","commit_id":"7fc2d8a651e6c0945f6eebe073ca00a1561384ef"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"3cbdf3d4a7e00849f649748575d2c1a8e934c7e2","unresolved":false,"context_lines":[{"line_number":932,"context_line":"                                                       vdi_uuids,"},{"line_number":933,"context_line":"                                                       )"},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"            except self._session.XenAPI.Failure as exc:"},{"line_number":936,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":937,"context_line":"                details \u003d exc.details"},{"line_number":938,"context_line":"                if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_1ace5859","line":935,"range":{"start_line":935,"start_character":19,"end_line":935,"end_character":47},"updated":"2017-06-28 09:15:48.000000000","message":"You already imported XenAPI, see Line:30, so there is no need to use self._session.XenAPI.Failure, XenAPI.Failure should be enough","commit_id":"4fbb21f64a55be0abea5fe1d65b88dd94582f3ce"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"6d488a209a4bb310b0c0ece9c004ef3e87470329","unresolved":false,"context_lines":[{"line_number":932,"context_line":"                                                       vdi_uuids,"},{"line_number":933,"context_line":"                                                       )"},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"            except self._session.XenAPI.Failure as exc:"},{"line_number":936,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":937,"context_line":"                details \u003d exc.details"},{"line_number":938,"context_line":"                if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_3a6fd42b","line":935,"range":{"start_line":935,"start_character":19,"end_line":935,"end_character":47},"in_reply_to":"5f201791_1ace5859","updated":"2017-06-28 09:19:14.000000000","message":"will modify it","commit_id":"4fbb21f64a55be0abea5fe1d65b88dd94582f3ce"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"49cb192f91ecd55c17a88b559cc325560a203985","unresolved":false,"context_lines":[{"line_number":935,"context_line":"            except self._session.XenAPI.Failure as exc:"},{"line_number":936,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":937,"context_line":"                details \u003d exc.details"},{"line_number":938,"context_line":"                if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"},{"line_number":939,"context_line":"                    LOG.debug(\"raise ImageNotFound exception\")"},{"line_number":940,"context_line":"                    raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":941,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_ba088491","line":938,"updated":"2017-06-28 09:16:16.000000000","message":"what for other exceptions? If not process them, need re-raise.","commit_id":"4fbb21f64a55be0abea5fe1d65b88dd94582f3ce"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"6d488a209a4bb310b0c0ece9c004ef3e87470329","unresolved":false,"context_lines":[{"line_number":935,"context_line":"            except self._session.XenAPI.Failure as exc:"},{"line_number":936,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":937,"context_line":"                details \u003d exc.details"},{"line_number":938,"context_line":"                if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"},{"line_number":939,"context_line":"                    LOG.debug(\"raise ImageNotFound exception\")"},{"line_number":940,"context_line":"                    raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":941,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5f201791_1a6ad818","line":938,"in_reply_to":"5f201791_ba088491","updated":"2017-06-28 09:19:14.000000000","message":"will modify it","commit_id":"4fbb21f64a55be0abea5fe1d65b88dd94582f3ce"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"32f6ceecf9c5640601897d12f604e6bfa6cd2050","unresolved":false,"context_lines":[{"line_number":932,"context_line":"                                                       vdi_uuids,"},{"line_number":933,"context_line":"                                                       )"},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"            except self._session.XenAPI.Failure as exc:"},{"line_number":936,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":937,"context_line":"                details \u003d exc.details"},{"line_number":938,"context_line":"                if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f201791_d3e9ebe2","line":935,"range":{"start_line":935,"start_character":19,"end_line":935,"end_character":47},"updated":"2017-06-28 10:41:40.000000000","message":"XenAPI.Failure is OK, see \nprevious commit https://review.openstack.org/#/c/478437/4/nova/virt/xenapi/vmops.py","commit_id":"eae94e24f7095b1d3a849a4a3454b3eeb580ae5a"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"a93b2e74ecf3e2f55750d234eab65e582bac511d","unresolved":false,"context_lines":[{"line_number":932,"context_line":"                                                       vdi_uuids,"},{"line_number":933,"context_line":"                                                       )"},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"            except self._session.XenAPI.Failure as exc:"},{"line_number":936,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s\", exc)"},{"line_number":937,"context_line":"                details \u003d exc.details"},{"line_number":938,"context_line":"                if (len(exc.details) \u003d\u003d 4 and details[3] \u003d\u003d \u0027ImageNotFound\u0027):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f201791_2ec9d257","line":935,"range":{"start_line":935,"start_character":19,"end_line":935,"end_character":47},"in_reply_to":"5f201791_d3e9ebe2","updated":"2017-06-28 11:16:26.000000000","message":"sorry, forgot to change it...","commit_id":"eae94e24f7095b1d3a849a4a3454b3eeb580ae5a"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"0edc5c03b94069f948ef6aed187b37da487d26fd","unresolved":false,"context_lines":[{"line_number":942,"context_line":"                    LOG.debug(\"get exception from xenapi plugin %s,\""},{"line_number":943,"context_line":"                              \"re-raise\", exc)"},{"line_number":944,"context_line":"                    raise"},{"line_number":945,"context_line":"            except Exception as exc:"},{"line_number":946,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s, re-raise\", exc)"},{"line_number":947,"context_line":"                raise"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"        duration \u003d timeutils.delta_seconds(start_time, timeutils.utcnow())"},{"line_number":950,"context_line":"        LOG.debug(\"Finished snapshot and upload for VM, duration: \""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_2ff892c2","line":947,"range":{"start_line":945,"start_character":12,"end_line":947,"end_character":21},"updated":"2017-06-29 11:18:45.000000000","message":"It seems this is not needed. And the exception is not *must* form *xenapi plugin*.","commit_id":"12cc77b9e5bf16f0464f32d5f39dcb8e38d4edf2"},{"author":{"_account_id":25638,"name":"Naichuan Sun","email":"naichuan.sun@citrix.com","username":"naichuans"},"change_message_id":"62e5bf227736749fa45b356a0fb0abe6c779aed2","unresolved":false,"context_lines":[{"line_number":942,"context_line":"                    LOG.debug(\"get exception from xenapi plugin %s,\""},{"line_number":943,"context_line":"                              \"re-raise\", exc)"},{"line_number":944,"context_line":"                    raise"},{"line_number":945,"context_line":"            except Exception as exc:"},{"line_number":946,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s, re-raise\", exc)"},{"line_number":947,"context_line":"                raise"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"        duration \u003d timeutils.delta_seconds(start_time, timeutils.utcnow())"},{"line_number":950,"context_line":"        LOG.debug(\"Finished snapshot and upload for VM, duration: \""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_ec560f07","line":947,"range":{"start_line":945,"start_character":12,"end_line":947,"end_character":21},"in_reply_to":"3f1d235d_2ff892c2","updated":"2017-06-30 01:26:23.000000000","message":"Just check if there are other kinds of exceptions throw out from xenapi plugin. let it raise as it is defined may be a good way to future develop and debugging","commit_id":"12cc77b9e5bf16f0464f32d5f39dcb8e38d4edf2"},{"author":{"_account_id":17920,"name":"Jianghua Wang","email":"jianghua.wang@citrix.com","username":"wjhfresh"},"change_message_id":"3bce0b38f28c49241e10e281b1aab5e62211da20","unresolved":false,"context_lines":[{"line_number":942,"context_line":"                    LOG.debug(\"get exception from xenapi plugin %s,\""},{"line_number":943,"context_line":"                              \"re-raise\", exc)"},{"line_number":944,"context_line":"                    raise"},{"line_number":945,"context_line":"            except Exception as exc:"},{"line_number":946,"context_line":"                LOG.debug(\"get exception from xenapi plugin %s, re-raise\", exc)"},{"line_number":947,"context_line":"                raise"},{"line_number":948,"context_line":""},{"line_number":949,"context_line":"        duration \u003d timeutils.delta_seconds(start_time, timeutils.utcnow())"},{"line_number":950,"context_line":"        LOG.debug(\"Finished snapshot and upload for VM, duration: \""}],"source_content_type":"text/x-python","patch_set":10,"id":"3f1d235d_12e280d6","line":947,"range":{"start_line":945,"start_character":12,"end_line":947,"end_character":21},"in_reply_to":"3f1d235d_ec560f07","updated":"2017-06-30 03:36:56.000000000","message":"Understood. But the debug message is not accurate enough. As I said, we can\u0027t assume the exception is from *xenapi plugin* as it\u0027s to catch the exceptions from image_upload_handler.\n\nIt seems more reasonable to put this exception processing in glance.py: _call_glance_plugin. We need consider to put such kind of processes in a central place.","commit_id":"12cc77b9e5bf16f0464f32d5f39dcb8e38d4edf2"}]}
