)]}'
{"nova/virt/xenapi/agent.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"695383e89666fcc073cda715852531c9d6ade421","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    args.update(addl_args)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    try:"},{"line_number":88,"context_line":"        ret \u003d FUNC_DICT[method](session, args)"},{"line_number":89,"context_line":"    except session.XenAPI.Failure as e:"},{"line_number":90,"context_line":"        err_msg \u003d e.details[-1].splitlines()[-1]"},{"line_number":91,"context_line":"        if \u0027TIMEOUT:\u0027 in err_msg:"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_a92aa1d7","line":88,"range":{"start_line":88,"start_character":41,"end_line":88,"end_character":45},"updated":"2017-04-21 09:01:23.000000000","message":"**args","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"3c5313b5e0e9ee90614f623d8ea294415cd04ccc","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    args.update(addl_args)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    try:"},{"line_number":88,"context_line":"        ret \u003d FUNC_DICT[method](session, args)"},{"line_number":89,"context_line":"    except session.XenAPI.Failure as e:"},{"line_number":90,"context_line":"        err_msg \u003d e.details[-1].splitlines()[-1]"},{"line_number":91,"context_line":"        if \u0027TIMEOUT:\u0027 in err_msg:"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_09d99555","line":88,"range":{"start_line":88,"start_character":14,"end_line":88,"end_character":46},"updated":"2017-04-25 01:48:02.000000000","message":"sure","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"695383e89666fcc073cda715852531c9d6ade421","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                # NOTE(johngarbutt): we can\u0027t use the xapi plugin"},{"line_number":206,"context_line":"                # timeout, because the domid may change when"},{"line_number":207,"context_line":"                # the server is rebooted"},{"line_number":208,"context_line":"                return self._call_agent(VERSION, ignore_errors\u003dFalse)"},{"line_number":209,"context_line":"            except exception.AgentError as error:"},{"line_number":210,"context_line":"                if time.time() \u003e expiration:"},{"line_number":211,"context_line":"                    self._add_instance_fault(error, sys.exc_info())"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_2917b1a6","line":208,"range":{"start_line":208,"start_character":40,"end_line":208,"end_character":47},"updated":"2017-04-21 09:01:23.000000000","message":"Instead of using a dictionary, why not just pass the function reference?\ne.g. pass host_agent.version","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"3c5313b5e0e9ee90614f623d8ea294415cd04ccc","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                # NOTE(johngarbutt): we can\u0027t use the xapi plugin"},{"line_number":206,"context_line":"                # timeout, because the domid may change when"},{"line_number":207,"context_line":"                # the server is rebooted"},{"line_number":208,"context_line":"                return self._call_agent(VERSION, ignore_errors\u003dFalse)"},{"line_number":209,"context_line":"            except exception.AgentError as error:"},{"line_number":210,"context_line":"                if time.time() \u003e expiration:"},{"line_number":211,"context_line":"                    self._add_instance_fault(error, sys.exc_info())"}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_f2c5c48f","line":208,"range":{"start_line":208,"start_character":40,"end_line":208,"end_character":47},"in_reply_to":"7ffa3b31_2917b1a6","updated":"2017-04-25 01:48:02.000000000","message":"yes, I should pass the function directly, will modify it","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"c04452fc600547d38f3779b1b93d725b171676fb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    try:"},{"line_number":69,"context_line":"        ret \u003d method(session, uuid, dom_id, timeout, **addl_args)"},{"line_number":70,"context_line":"    except XenAPI.Failure as e:"},{"line_number":71,"context_line":"        err_msg \u003d e.details[-1].splitlines()[-1]"},{"line_number":72,"context_line":"        if \u0027TIMEOUT:\u0027 in err_msg:"},{"line_number":73,"context_line":"            LOG.error(_LE(\u0027TIMEOUT: The call to %(method)s timed out. \u0027"},{"line_number":74,"context_line":"                          \u0027uuid\u003d%(uuid)s, dom_id\u003d%(dom_id)s, args\u003d%(args)r\u0027),"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_fa6ac517","line":71,"updated":"2017-05-23 09:05:09.000000000","message":"To simplify the change how about still populating args into a dict (as the original change) so all of the error reporting code is the same?","commit_id":"f462c9d189bf4a52fb21456e00639179963d3d74"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"5394006f28b154f028c868d37681a6dfbcb369fd","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    try:"},{"line_number":69,"context_line":"        ret \u003d method(session, uuid, dom_id, timeout, **addl_args)"},{"line_number":70,"context_line":"    except XenAPI.Failure as e:"},{"line_number":71,"context_line":"        err_msg \u003d e.details[-1].splitlines()[-1]"},{"line_number":72,"context_line":"        if \u0027TIMEOUT:\u0027 in err_msg:"},{"line_number":73,"context_line":"            LOG.error(_LE(\u0027TIMEOUT: The call to %(method)s timed out. \u0027"},{"line_number":74,"context_line":"                          \u0027uuid\u003d%(uuid)s, dom_id\u003d%(dom_id)s, args\u003d%(args)r\u0027),"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_1b233b58","line":71,"in_reply_to":"ff0f0b1f_fa6ac517","updated":"2017-05-23 10:45:38.000000000","message":"I see, if we can keep args in Line:65 (left column), we can avoid the error log changes","commit_id":"f462c9d189bf4a52fb21456e00639179963d3d74"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"0ce53e7454118a1300d5b6aa67704d46c3418c3b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            LOG.error(_LE(\u0027TIMEOUT: The call to %(method)s timed out. \u0027"},{"line_number":79,"context_line":"                          \u0027args\u003d%(args)r\u0027),"},{"line_number":80,"context_line":"                      {\u0027method\u0027: method, \u0027args\u0027: args}, instance\u003dinstance)"},{"line_number":81,"context_line":"            raise exception.AgentTimeout(method\u003dstr(method))"},{"line_number":82,"context_line":"        elif \u0027REBOOT:\u0027 in err_msg:"},{"line_number":83,"context_line":"            LOG.debug(\u0027REBOOT: The call to %(method)s detected a reboot. \u0027"},{"line_number":84,"context_line":"                      \u0027args\u003d%(args)r\u0027,"}],"source_content_type":"text/x-python","patch_set":38,"id":"df140735_d77ab386","line":81,"updated":"2017-05-30 10:45:07.000000000","message":"This doesn\u0027t do what you want... you want method\u003dmethod.__name__","commit_id":"2eaac7d5a7f426a6ec870a3f3c156b7dbb382cba"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"e3b913251be55220b5c4629203809cd34fe3f8ac","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            LOG.error(_LE(\u0027TIMEOUT: The call to %(method)s timed out. \u0027"},{"line_number":79,"context_line":"                          \u0027args\u003d%(args)r\u0027),"},{"line_number":80,"context_line":"                      {\u0027method\u0027: method, \u0027args\u0027: args}, instance\u003dinstance)"},{"line_number":81,"context_line":"            raise exception.AgentTimeout(method\u003dstr(method))"},{"line_number":82,"context_line":"        elif \u0027REBOOT:\u0027 in err_msg:"},{"line_number":83,"context_line":"            LOG.debug(\u0027REBOOT: The call to %(method)s detected a reboot. \u0027"},{"line_number":84,"context_line":"                      \u0027args\u003d%(args)r\u0027,"}],"source_content_type":"text/x-python","patch_set":38,"id":"df140735_fc2e5890","line":81,"in_reply_to":"df140735_d77ab386","updated":"2017-06-02 02:50:53.000000000","message":"Yes, I will update this part, thanks a lot:)","commit_id":"2eaac7d5a7f426a6ec870a3f3c156b7dbb382cba"}],"nova/virt/xenapi/firewall.py":[{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"4fc6780b96ac3adb2cb16cc3639155278889ce66","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    using iptables. This class is meant to be used with the xenapi"},{"line_number":28,"context_line":"    backend and uses xenapi plugin to enforce iptables rules in dom0."},{"line_number":29,"context_line":"    \"\"\""},{"line_number":30,"context_line":"    # TODO(huanxie) Deprecated"},{"line_number":31,"context_line":"    def _plugin_execute(self, *cmd, **kwargs):"},{"line_number":32,"context_line":"        # Prepare arguments for plugin call"},{"line_number":33,"context_line":"        args \u003d {}"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f044301_78d605f4","line":30,"updated":"2017-05-08 10:00:30.000000000","message":"We won\u0027t use this class, so mark it as Deprecated","commit_id":"247f0596fc56e672e914c71433f421e25d7f1d89"}],"nova/virt/xenapi/host.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"695383e89666fcc073cda715852531c9d6ade421","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self._session \u003d session"},{"line_number":47,"context_line":"        self._virtapi \u003d virtapi"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # TODO(huanxie): Deprecated"},{"line_number":50,"context_line":"    def host_power_action(self, action):"},{"line_number":51,"context_line":"        \"\"\"Reboots or shuts down the host.\"\"\""},{"line_number":52,"context_line":"        msg \u003d _(\"Host power action on XenServer is not supported.\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_896a4517","line":49,"updated":"2017-04-21 09:01:23.000000000","message":"Don\u0027t deprecate in this change, just don\u0027t modify the existing code.","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"3c5313b5e0e9ee90614f623d8ea294415cd04ccc","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self._session \u003d session"},{"line_number":47,"context_line":"        self._virtapi \u003d virtapi"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # TODO(huanxie): Deprecated"},{"line_number":50,"context_line":"    def host_power_action(self, action):"},{"line_number":51,"context_line":"        \"\"\"Reboots or shuts down the host.\"\"\""},{"line_number":52,"context_line":"        msg \u003d _(\"Host power action on XenServer is not supported.\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_c5057c7c","line":49,"in_reply_to":"7ffa3b31_896a4517","updated":"2017-04-25 01:48:02.000000000","message":"Done","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"4fc6780b96ac3adb2cb16cc3639155278889ce66","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        self._session \u003d session"},{"line_number":47,"context_line":"        self._virtapi \u003d virtapi"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    # TODO(huanxie): Deprecated"},{"line_number":50,"context_line":"    def host_power_action(self, action):"},{"line_number":51,"context_line":"        \"\"\"Reboots or shuts down the host.\"\"\""},{"line_number":52,"context_line":"        args \u003d {\"action\": jsonutils.dumps(action)}"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f044301_98f43188","line":49,"updated":"2017-05-08 10:00:30.000000000","message":"No need to support host reboot and shutdown, so deprecate this. libvirt also didn\u0027t implement this","commit_id":"247f0596fc56e672e914c71433f421e25d7f1d89"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"c04452fc600547d38f3779b1b93d725b171676fb","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        service.save()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        try:"},{"line_number":133,"context_line":"            result \u003d host_management.set_host_enabled("},{"line_number":134,"context_line":"                self._session, jsonutils.dumps(enabled))"},{"line_number":135,"context_line":"            if not result:"},{"line_number":136,"context_line":"                return \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_3a027d70","line":133,"updated":"2017-05-23 09:05:09.000000000","message":"I wonder if this logic should be in os-xenapi in each of the methods (or using a common function).  Repetition in here is a sign that we\u0027ve not got the API right.","commit_id":"f462c9d189bf4a52fb21456e00639179963d3d74"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"5394006f28b154f028c868d37681a6dfbcb369fd","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        service.save()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        try:"},{"line_number":133,"context_line":"            result \u003d host_management.set_host_enabled("},{"line_number":134,"context_line":"                self._session, jsonutils.dumps(enabled))"},{"line_number":135,"context_line":"            if not result:"},{"line_number":136,"context_line":"                return \u0027\u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_7b9b5717","line":133,"in_reply_to":"ff0f0b1f_3a027d70","updated":"2017-05-23 10:45:38.000000000","message":"call_xenhost() has wrapper for the exception handling, can I make another function which wrappers the dealing of exception?","commit_id":"f462c9d189bf4a52fb21456e00639179963d3d74"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"0fcc9b8554ab571946c1a2f83b093c3741a351cb","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        service.disabled_reason \u003d \u0027set by xenapi host_state\u0027"},{"line_number":130,"context_line":"        service.save()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        response \u003d call_xenhost_v2(self._session,"},{"line_number":133,"context_line":"                                   host_management.set_host_enabled,"},{"line_number":134,"context_line":"                                   jsonutils.dumps(enabled))"},{"line_number":135,"context_line":"        return response.get(\"status\", response)"}],"source_content_type":"text/x-python","patch_set":36,"id":"ff0f0b1f_1cf2f206","line":132,"updated":"2017-05-24 05:58:48.000000000","message":"In os-xenapi side, it\u0027s https://github.com/openstack/os-xenapi/blob/master/os_xenapi/client/host_management.py","commit_id":"226fdf13794eabe5a1b32406d68dca459129e31c"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"f569615208d3c4e7c9fde01cb95b668615102edb","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        return e.details[1]"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"def call_xenhost_v2(session, method, *args):"},{"line_number":412,"context_line":"    \"\"\"There will be several methods that will need this general"},{"line_number":413,"context_line":"    handling for interacting with the xenhost plugin v2, so this abstracts"},{"line_number":414,"context_line":"    out that behavior and the above one will be removed once we deprecated"}],"source_content_type":"text/x-python","patch_set":37,"id":"ff0f0b1f_3f01016b","line":411,"updated":"2017-05-25 06:47:27.000000000","message":"Need to change the function name","commit_id":"4dd14d073e907976f12062f0ed170535cc0fd3dd"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"0ce53e7454118a1300d5b6aa67704d46c3418c3b","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        response \u003d manage_xenserver_host(self._session,"},{"line_number":133,"context_line":"                                         host_management.set_host_enabled,"},{"line_number":134,"context_line":"                                         jsonutils.dumps(enabled))"},{"line_number":135,"context_line":"        return response.get(\"status\", response)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def get_host_uptime(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"df140735_9471d9e3","line":134,"updated":"2017-05-30 10:45:07.000000000","message":"I think this was a bug previously.  Enabled should be a boolean or a string - neither of which need to be dumps when adding to a dictionary (dumps is mainly useful when we have a structured field).\nI believe this should just pass \"enabled\" to the function.","commit_id":"2eaac7d5a7f426a6ec870a3f3c156b7dbb382cba"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"e3b913251be55220b5c4629203809cd34fe3f8ac","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        response \u003d manage_xenserver_host(self._session,"},{"line_number":133,"context_line":"                                         host_management.set_host_enabled,"},{"line_number":134,"context_line":"                                         jsonutils.dumps(enabled))"},{"line_number":135,"context_line":"        return response.get(\"status\", response)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"    def get_host_uptime(self):"}],"source_content_type":"text/x-python","patch_set":38,"id":"df140735_612ce1ab","line":134,"in_reply_to":"df140735_9471d9e3","updated":"2017-06-02 02:50:53.000000000","message":"I found current dom0 plugin xenhost.py only check string \u0027true\u0027/\u0027false\u0027 https://github.com/openstack/os-xenapi/blob/master/os_xenapi/dom0/etc/xapi.d/plugins/xenhost.py#L114 , but nova will only pass boolean https://github.com/openstack/nova/blob/master/nova/virt/driver.py#L1151, so it use dumps() to translate True to \u0027true\u0027","commit_id":"2eaac7d5a7f426a6ec870a3f3c156b7dbb382cba"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"0ce53e7454118a1300d5b6aa67704d46c3418c3b","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        return e.details[1]"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def manage_xenserver_host(session, method, *args):"},{"line_number":413,"context_line":"    \"\"\"There will be several methods that will need this general"},{"line_number":414,"context_line":"    handling for interacting with the dom0 plugin, so this abstracts"},{"line_number":415,"context_line":"    out that behavior. the call_xenhost will be removed once we deprecated"}],"source_content_type":"text/x-python","patch_set":38,"id":"df140735_f74c9777","line":412,"updated":"2017-05-30 10:45:07.000000000","message":"Call this \"_call_host_management\"","commit_id":"2eaac7d5a7f426a6ec870a3f3c156b7dbb382cba"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"5eb6dabf2331326bce6df92cb4a5966e181da8d3","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        return e.details[1]"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"def manage_xenserver_host(session, method, *args):"},{"line_number":413,"context_line":"    \"\"\"There will be several methods that will need this general"},{"line_number":414,"context_line":"    handling for interacting with the dom0 plugin, so this abstracts"},{"line_number":415,"context_line":"    out that behavior. the call_xenhost will be removed once we deprecated"}],"source_content_type":"text/x-python","patch_set":38,"id":"df140735_1c78ec8d","line":412,"in_reply_to":"df140735_f74c9777","updated":"2017-06-02 02:52:33.000000000","message":"sounds good, will udpate this","commit_id":"2eaac7d5a7f426a6ec870a3f3c156b7dbb382cba"}],"nova/virt/xenapi/image/bittorrent.py":[{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"4fc6780b96ac3adb2cb16cc3639155278889ce66","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                             \u0027 without xenserver.torrent_base_url\u0027"},{"line_number":51,"context_line":"                             \u0027 configuration option set.\u0027))"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    # TODO(huanxie) Deprecated"},{"line_number":54,"context_line":"    def download_image(self, context, session, instance, image_id):"},{"line_number":55,"context_line":"        params \u003d {}"},{"line_number":56,"context_line":"        params[\u0027image_id\u0027] \u003d image_id"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f044301_1836e153","line":53,"updated":"2017-05-08 10:00:30.000000000","message":"The whole bittorrent will be deprecated","commit_id":"247f0596fc56e672e914c71433f421e25d7f1d89"}],"nova/virt/xenapi/image/glance.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"695383e89666fcc073cda715852531c9d6ade421","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"UPLOAD_VHD \u003d \u0027upload_vhd\u0027"},{"line_number":35,"context_line":"DOWNLOAD_VHD \u003d \u0027download_vhd\u0027"},{"line_number":36,"context_line":"FUNC_DICT \u003d {UPLOAD_VHD: host_glance.upload_vhd2,"},{"line_number":37,"context_line":"             DOWNLOAD_VHD: host_glance.download_vhd2}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class GlanceStore(object):"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_8953656b","line":36,"updated":"2017-04-21 09:01:23.000000000","message":"Best not to use a function dictionary here either.","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"3c5313b5e0e9ee90614f623d8ea294415cd04ccc","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"UPLOAD_VHD \u003d \u0027upload_vhd\u0027"},{"line_number":35,"context_line":"DOWNLOAD_VHD \u003d \u0027download_vhd\u0027"},{"line_number":36,"context_line":"FUNC_DICT \u003d {UPLOAD_VHD: host_glance.upload_vhd2,"},{"line_number":37,"context_line":"             DOWNLOAD_VHD: host_glance.download_vhd2}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class GlanceStore(object):"}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_52d8f851","line":36,"in_reply_to":"7ffa3b31_8953656b","updated":"2017-04-25 01:48:02.000000000","message":"yes, I will change this","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"c04452fc600547d38f3779b1b93d725b171676fb","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def download_image(self, context, session, instance, image_id):"},{"line_number":60,"context_line":"        params \u003d {\u0027uuid_stack\u0027: vm_utils._make_uuid_stack()}"},{"line_number":61,"context_line":"        sr_path \u003d vm_utils.get_sr_path(session)"},{"line_number":62,"context_line":"        extra_headers \u003d glance.generate_identity_headers(context)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_3ab83de3","line":61,"updated":"2017-05-23 09:05:09.000000000","message":"As sr_path and extra_headers just depend on session/context which are passed to _call_glance_plugin, then calculate them in _call_glance_plugin rather than duplicating code in each of the methods that invokes _call_glance_plugin","commit_id":"f462c9d189bf4a52fb21456e00639179963d3d74"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"5394006f28b154f028c868d37681a6dfbcb369fd","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def download_image(self, context, session, instance, image_id):"},{"line_number":60,"context_line":"        params \u003d {\u0027uuid_stack\u0027: vm_utils._make_uuid_stack()}"},{"line_number":61,"context_line":"        sr_path \u003d vm_utils.get_sr_path(session)"},{"line_number":62,"context_line":"        extra_headers \u003d glance.generate_identity_headers(context)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_bba56f49","line":61,"in_reply_to":"ff0f0b1f_3ab83de3","updated":"2017-05-23 10:45:38.000000000","message":"+1","commit_id":"f462c9d189bf4a52fb21456e00639179963d3d74"}],"nova/virt/xenapi/pool.py":[{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"4fc6780b96ac3adb2cb16cc3639155278889ce66","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                                           % host)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    # TODO(huanxie): Deprecated"},{"line_number":162,"context_line":"    def _join_slave(self, aggregate_id, host, compute_uuid, url, user, passwd):"},{"line_number":163,"context_line":"        \"\"\"Joins a slave into a XenServer resource pool.\"\"\""},{"line_number":164,"context_line":"        try:"},{"line_number":165,"context_line":"            args \u003d {\u0027compute_uuid\u0027: compute_uuid,"}],"source_content_type":"text/x-python","patch_set":24,"id":"3f044301_38187dd1","line":162,"updated":"2017-05-08 10:00:30.000000000","message":"We don\u0027t support pool so deprecate this","commit_id":"247f0596fc56e672e914c71433f421e25d7f1d89"}],"nova/virt/xenapi/vif.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"695383e89666fcc073cda715852531c9d6ade421","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        patch_port1, tap_name \u003d self._get_patch_port_pair_names(vif[\u0027id\u0027])"},{"line_number":315,"context_line":"        try:"},{"line_number":316,"context_line":"            # delete the patch port pair"},{"line_number":317,"context_line":"            host_network.ovs_del_port(self._session, bridge_name, patch_port1)"},{"line_number":318,"context_line":"        except Exception as e:"},{"line_number":319,"context_line":"            LOG.warning(_LW(\"Failed to delete patch port pair for vif %(if)s,\""},{"line_number":320,"context_line":"                            \" exception:%(exception)s\"),"}],"source_content_type":"text/x-python","patch_set":19,"id":"7ffa3b31_e9e8a97c","line":317,"updated":"2017-04-21 09:01:23.000000000","message":"This file is a perfect example of what we want to happen :)","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"3c5313b5e0e9ee90614f623d8ea294415cd04ccc","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        patch_port1, tap_name \u003d self._get_patch_port_pair_names(vif[\u0027id\u0027])"},{"line_number":315,"context_line":"        try:"},{"line_number":316,"context_line":"            # delete the patch port pair"},{"line_number":317,"context_line":"            host_network.ovs_del_port(self._session, bridge_name, patch_port1)"},{"line_number":318,"context_line":"        except Exception as e:"},{"line_number":319,"context_line":"            LOG.warning(_LW(\"Failed to delete patch port pair for vif %(if)s,\""},{"line_number":320,"context_line":"                            \" exception:%(exception)s\"),"}],"source_content_type":"text/x-python","patch_set":19,"id":"5ff73747_f2a2649a","line":317,"in_reply_to":"7ffa3b31_e9e8a97c","updated":"2017-04-25 01:48:02.000000000","message":"Done","commit_id":"a1ba1e65a1926a529662bd4d2c58263f1757df72"}],"nova/virt/xenapi/vmops.py":[{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"c04452fc600547d38f3779b1b93d725b171676fb","unresolved":false,"context_lines":[{"line_number":2053,"context_line":"            if \u0027TIMEOUT:\u0027 in err_msg:"},{"line_number":2054,"context_line":"                LOG.error(_LE(\u0027TIMEOUT: The call to %(method)s timed out. \u0027"},{"line_number":2055,"context_line":"                              \u0027args\u003d%(args)r\u0027),"},{"line_number":2056,"context_line":"                          {\u0027method\u0027: method, \u0027args\u0027: args}, instance\u003dinstance)"},{"line_number":2057,"context_line":"                return {\u0027returncode\u0027: \u0027timeout\u0027, \u0027message\u0027: err_msg}"},{"line_number":2058,"context_line":"            elif \u0027NOT IMPLEMENTED:\u0027 in err_msg:"},{"line_number":2059,"context_line":"                LOG.error(_LE(\u0027NOT IMPLEMENTED: The call to %(method)s is not\u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_5a5771cb","side":"PARENT","line":2056,"updated":"2017-05-23 09:05:09.000000000","message":"Agree with this - I don\u0027t think there\u0027s value in showing the arguments called.  The key being changed will be written to /var/log/xenstored-access.log anyway, so the infromation is still captured.","commit_id":"4aad7fd9285bd87f9128c6b3a9dfa3aca1a677ef"},{"author":{"_account_id":6735,"name":"Bob Ball","email":"bob.ball@citrix.com","username":"bob-ball"},"change_message_id":"c04452fc600547d38f3779b1b93d725b171676fb","unresolved":false,"context_lines":[{"line_number":2012,"context_line":"        \"\"\""},{"line_number":2013,"context_line":"        dom_id \u003d self._get_dom_id(instance, vm_ref)"},{"line_number":2014,"context_line":"        try:"},{"line_number":2015,"context_line":"            out \u003d host_xenstore.write_record(self._session, dom_id, path,"},{"line_number":2016,"context_line":"                                             jsonutils.dumps(value))"},{"line_number":2017,"context_line":"            return out"},{"line_number":2018,"context_line":"        except self._session.XenAPI.Failure as e:"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_fac3e587","line":2015,"updated":"2017-05-23 09:05:09.000000000","message":"Why not just \"return host_xenstore\"...\nand return self._process in the exception handler?","commit_id":"f462c9d189bf4a52fb21456e00639179963d3d74"},{"author":{"_account_id":17922,"name":"Huan Xie","email":"huan.xie@citrix.com","username":"huan"},"change_message_id":"5394006f28b154f028c868d37681a6dfbcb369fd","unresolved":false,"context_lines":[{"line_number":2012,"context_line":"        \"\"\""},{"line_number":2013,"context_line":"        dom_id \u003d self._get_dom_id(instance, vm_ref)"},{"line_number":2014,"context_line":"        try:"},{"line_number":2015,"context_line":"            out \u003d host_xenstore.write_record(self._session, dom_id, path,"},{"line_number":2016,"context_line":"                                             jsonutils.dumps(value))"},{"line_number":2017,"context_line":"            return out"},{"line_number":2018,"context_line":"        except self._session.XenAPI.Failure as e:"}],"source_content_type":"text/x-python","patch_set":33,"id":"ff0f0b1f_fb5d2747","line":2015,"in_reply_to":"ff0f0b1f_fac3e587","updated":"2017-05-23 10:45:38.000000000","message":"Done","commit_id":"f462c9d189bf4a52fb21456e00639179963d3d74"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"dacd91547b0526e1b5c8d82984aa28d9e1e60207","unresolved":false,"context_lines":[{"line_number":2047,"context_line":""},{"line_number":2048,"context_line":"    def _process_plugin_exception(self, plugin_exception, method, instance):"},{"line_number":2049,"context_line":"        err_msg \u003d plugin_exception.details[-1].splitlines()[-1]"},{"line_number":2050,"context_line":"        if \u0027TIMEOUT:\u0027 in err_msg:"},{"line_number":2051,"context_line":"            LOG.error(_LE(\u0027TIMEOUT: The call to %s timed out\u0027),"},{"line_number":2052,"context_line":"                      method, instance\u003dinstance)"},{"line_number":2053,"context_line":"            return {\u0027returncode\u0027: \u0027timeout\u0027, \u0027message\u0027: err_msg}"}],"source_content_type":"text/x-python","patch_set":41,"id":"df140735_085fe6e5","line":2050,"updated":"2017-06-07 17:56:16.000000000","message":"yuck :)","commit_id":"a2f6aac01de30c5b3031b9ef9d0130c77ebc685d"}]}
