)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"eedf0be1aca41ab93569b7304ea327bac813d743","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"78492e03_98f95663","updated":"2024-04-02 02:55:58.000000000","message":"This review is a subsequent patch based on [1]\n[1] https://review.opendev.org/#/q/Id84adda53744ef55fc171d35b372d178f38ce068\n\nI will remove WIP after the base patch passes review and is merged.","commit_id":"aea0a09e090d6f01929f8c9762a38608f0427797"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"d311935c1901cbd8a051b7be2ead8e953176bdfc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"49fcfa60_71626d89","updated":"2024-04-03 02:10:51.000000000","message":"Actually, i think it can be reviewed separately so I\u0027ve changed it to Active for now.","commit_id":"6b53535e364bbcdf620163b33ecdcfba4ada089e"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"ca5c0c099e4d712f4748203cc3df59ce4f364836","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"f911ca61_f06795c0","updated":"2024-11-13 09:04:09.000000000","message":"Nice work! Thanks","commit_id":"fc4a4d10cdc43cbf1a111fca5c56316aae240a9e"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"13bfc5a9210d6a4780853244c2a000fc63bdc7b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"5973a02d_c60b56d1","updated":"2024-11-21 09:37:15.000000000","message":"recheck","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"8ebaa249b3aacabd16d716eb103a9cd053aabf66","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":31,"id":"e0089a9a_c3f97cfe","updated":"2025-09-24 21:45:04.000000000","message":"I believe a missing part of this chain is a documentation on how to configure and use the driver, or maybe I missed it?","commit_id":"47e5936619b89a3105623d0d5a1ad489e19ee312"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"f4bd01759621866ce45ecd4c24f26c03a0fe5f37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":31,"id":"2be71fe5_31b8c4bc","in_reply_to":"e0089a9a_c3f97cfe","updated":"2025-12-26 09:26:52.000000000","message":"You are correct. currently, there is no separation between configuring and using the HTTP driver. \nI’ll address all the review comments first so the spec is more finalized, and then prepare the document within the next 2 weeks hopefully.","commit_id":"47e5936619b89a3105623d0d5a1ad489e19ee312"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"05f215f6c5f709f655791487d918893244ff5f5d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":38,"id":"895b5cba_2c07e2cf","updated":"2026-01-19 15:31:57.000000000","message":"Thanks for updating. I\u0027ll get back to this once I go through the full series.","commit_id":"c5dcf5f53928ea7af76c973e5c753fc23d676be4"}],"oslo_messaging/_drivers/impl_http.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fa84227c423cedbd40d8e0de02070c5416cab13c","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"http_opts \u003d ["},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027max_rpc_request_retries\u0027,"},{"line_number":32,"context_line":"               default\u003d5,"},{"line_number":33,"context_line":"               help\u003d\u0027Maximum number of retries for sending RPC requests\u0027),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1d72bd77_45298904","line":32,"range":{"start_line":32,"start_character":15,"end_line":32,"end_character":22},"updated":"2024-11-23 06:12:30.000000000","message":"add min\u003d0","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"70a22640476da519cd41da4f0d39eee5ede82cd3","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"http_opts \u003d ["},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027max_rpc_request_retries\u0027,"},{"line_number":32,"context_line":"               default\u003d5,"},{"line_number":33,"context_line":"               help\u003d\u0027Maximum number of retries for sending RPC requests\u0027),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"97792b4f_cfaa8922","line":32,"range":{"start_line":32,"start_character":15,"end_line":32,"end_character":22},"in_reply_to":"1d72bd77_45298904","updated":"2024-11-25 10:11:17.000000000","message":"Done","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fa84227c423cedbd40d8e0de02070c5416cab13c","unresolved":true,"context_lines":[{"line_number":145,"context_line":"    def _send_call(self, topic, target, ctxt, message, timeout\u003dNone):"},{"line_number":146,"context_line":"        target_service \u003d self._select_target_service(target, ctxt, message)"},{"line_number":147,"context_line":"        log_msg \u003d \"CALL topic \u0027{topic}\u0027\".format(topic\u003dtopic)"},{"line_number":148,"context_line":"        LOG.info(log_msg)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            resp \u003d self.http_client.call(target_service, message, timeout)"},{"line_number":151,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":13,"id":"28c8b73b_bf591989","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":16},"updated":"2024-11-23 06:12:30.000000000","message":"Adding log for every rpc call is too verbose. Use debug.","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"70a22640476da519cd41da4f0d39eee5ede82cd3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def _send_call(self, topic, target, ctxt, message, timeout\u003dNone):"},{"line_number":146,"context_line":"        target_service \u003d self._select_target_service(target, ctxt, message)"},{"line_number":147,"context_line":"        log_msg \u003d \"CALL topic \u0027{topic}\u0027\".format(topic\u003dtopic)"},{"line_number":148,"context_line":"        LOG.info(log_msg)"},{"line_number":149,"context_line":"        try:"},{"line_number":150,"context_line":"            resp \u003d self.http_client.call(target_service, message, timeout)"},{"line_number":151,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":13,"id":"a950375d_721d5033","line":148,"range":{"start_line":148,"start_character":12,"end_line":148,"end_character":16},"in_reply_to":"28c8b73b_bf591989","updated":"2024-11-25 10:11:17.000000000","message":"Done","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fa84227c423cedbd40d8e0de02070c5416cab13c","unresolved":true,"context_lines":[{"line_number":157,"context_line":"    def _send_cast(self, topic, target, ctxt, message):"},{"line_number":158,"context_line":"        target_service \u003d self._select_target_service(target, ctxt, message)"},{"line_number":159,"context_line":"        log_msg \u003d \"CAST topic \u0027{topic}\u0027\".format(topic\u003dtopic)"},{"line_number":160,"context_line":"        LOG.info(log_msg)"},{"line_number":161,"context_line":"        self.http_client.cast(target_service, message)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _send_fanout(self, topic, target, ctxt, message):"}],"source_content_type":"text/x-python","patch_set":13,"id":"eec49404_fce0c1ab","line":160,"range":{"start_line":160,"start_character":12,"end_line":160,"end_character":16},"updated":"2024-11-23 06:12:30.000000000","message":"ditto. use debug","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"70a22640476da519cd41da4f0d39eee5ede82cd3","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    def _send_cast(self, topic, target, ctxt, message):"},{"line_number":158,"context_line":"        target_service \u003d self._select_target_service(target, ctxt, message)"},{"line_number":159,"context_line":"        log_msg \u003d \"CAST topic \u0027{topic}\u0027\".format(topic\u003dtopic)"},{"line_number":160,"context_line":"        LOG.info(log_msg)"},{"line_number":161,"context_line":"        self.http_client.cast(target_service, message)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def _send_fanout(self, topic, target, ctxt, message):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ae2723d9_073411fb","line":160,"range":{"start_line":160,"start_character":12,"end_line":160,"end_character":16},"in_reply_to":"eec49404_fce0c1ab","updated":"2024-11-25 10:11:17.000000000","message":"Done","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fa84227c423cedbd40d8e0de02070c5416cab13c","unresolved":true,"context_lines":[{"line_number":166,"context_line":"        log_msg \u003d \"CAST FANOUT exchange \u0027%(exchange)s\u0027, \" \\"},{"line_number":167,"context_line":"            \"topic \u0027%(topic)s\u0027\" % {\u0027exchange\u0027: exchange,"},{"line_number":168,"context_line":"                                   \u0027topic\u0027: topic}"},{"line_number":169,"context_line":"        LOG.info(log_msg)"},{"line_number":170,"context_line":"        self.http_client.fanout(target_service,"},{"line_number":171,"context_line":"                                target.topic,"},{"line_number":172,"context_line":"                                target.server,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1effa1a5_6f326550","line":169,"range":{"start_line":169,"start_character":12,"end_line":169,"end_character":16},"updated":"2024-11-23 06:12:30.000000000","message":"ditto. use debug","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"70a22640476da519cd41da4f0d39eee5ede82cd3","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        log_msg \u003d \"CAST FANOUT exchange \u0027%(exchange)s\u0027, \" \\"},{"line_number":167,"context_line":"            \"topic \u0027%(topic)s\u0027\" % {\u0027exchange\u0027: exchange,"},{"line_number":168,"context_line":"                                   \u0027topic\u0027: topic}"},{"line_number":169,"context_line":"        LOG.info(log_msg)"},{"line_number":170,"context_line":"        self.http_client.fanout(target_service,"},{"line_number":171,"context_line":"                                target.topic,"},{"line_number":172,"context_line":"                                target.server,"}],"source_content_type":"text/x-python","patch_set":13,"id":"53bde244_0769c386","line":169,"range":{"start_line":169,"start_character":12,"end_line":169,"end_character":16},"in_reply_to":"1effa1a5_6f326550","updated":"2024-11-25 10:11:17.000000000","message":"Done","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fa84227c423cedbd40d8e0de02070c5416cab13c","unresolved":true,"context_lines":[{"line_number":187,"context_line":"            service_name \u003d self._get_exchange(target) + \u0027.\u0027 + target.topic"},{"line_number":188,"context_line":"            service_list \u003d self._get_service_list(service_name, target.server)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        LOG.info(\"Start sending message to service %s\", service_name)"},{"line_number":191,"context_line":"        if len(service_list) \u003d\u003d 0:"},{"line_number":192,"context_line":"            raise exceptions.InvalidTarget("},{"line_number":193,"context_line":"                \u0027Target does not exist on Service Broker\u0027, service_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"89f4c2ff_b5a68f93","line":190,"range":{"start_line":190,"start_character":12,"end_line":190,"end_character":16},"updated":"2024-11-23 06:12:30.000000000","message":"ditto. use debug","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"70a22640476da519cd41da4f0d39eee5ede82cd3","unresolved":false,"context_lines":[{"line_number":187,"context_line":"            service_name \u003d self._get_exchange(target) + \u0027.\u0027 + target.topic"},{"line_number":188,"context_line":"            service_list \u003d self._get_service_list(service_name, target.server)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        LOG.info(\"Start sending message to service %s\", service_name)"},{"line_number":191,"context_line":"        if len(service_list) \u003d\u003d 0:"},{"line_number":192,"context_line":"            raise exceptions.InvalidTarget("},{"line_number":193,"context_line":"                \u0027Target does not exist on Service Broker\u0027, service_name)"}],"source_content_type":"text/x-python","patch_set":13,"id":"0f80302c_cbf84cd0","line":190,"range":{"start_line":190,"start_character":12,"end_line":190,"end_character":16},"in_reply_to":"89f4c2ff_b5a68f93","updated":"2024-11-25 10:11:17.000000000","message":"Done","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fa84227c423cedbd40d8e0de02070c5416cab13c","unresolved":true,"context_lines":[{"line_number":226,"context_line":"    :param excluded_exceptions: Lists of exceptions to be excluded."},{"line_number":227,"context_line":"    :type Exceptions: Tuple of Exceptions"},{"line_number":228,"context_line":"    \"\"\""},{"line_number":229,"context_line":"    def new_func(*args, **kwargs):"},{"line_number":230,"context_line":"        attempt \u003d 0"},{"line_number":231,"context_line":"        while attempt \u003c times:"},{"line_number":232,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"0c65e9a0_7bda8891","line":229,"updated":"2024-11-23 06:12:30.000000000","message":"Add ``` @functools.wraps(func) ```","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"70a22640476da519cd41da4f0d39eee5ede82cd3","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    :param excluded_exceptions: Lists of exceptions to be excluded."},{"line_number":227,"context_line":"    :type Exceptions: Tuple of Exceptions"},{"line_number":228,"context_line":"    \"\"\""},{"line_number":229,"context_line":"    def new_func(*args, **kwargs):"},{"line_number":230,"context_line":"        attempt \u003d 0"},{"line_number":231,"context_line":"        while attempt \u003c times:"},{"line_number":232,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba81797d_273c9398","line":229,"in_reply_to":"0c65e9a0_7bda8891","updated":"2024-11-25 10:11:17.000000000","message":"Done","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"fa84227c423cedbd40d8e0de02070c5416cab13c","unresolved":true,"context_lines":[{"line_number":232,"context_line":"            try:"},{"line_number":233,"context_line":"                return func(*args, **kwargs)"},{"line_number":234,"context_line":"            except excluded_exceptions:"},{"line_number":235,"context_line":"                # Skip this exception."},{"line_number":236,"context_line":"                raise"},{"line_number":237,"context_line":"            except Exception as e:"},{"line_number":238,"context_line":"                # Otherwise, retry."}],"source_content_type":"text/x-python","patch_set":13,"id":"ba801182_0c973c87","line":235,"range":{"start_line":235,"start_character":18,"end_line":235,"end_character":22},"updated":"2024-11-23 06:12:30.000000000","message":"This does not skip on these exceptions but immediately aborts on these.","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"70a22640476da519cd41da4f0d39eee5ede82cd3","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            try:"},{"line_number":233,"context_line":"                return func(*args, **kwargs)"},{"line_number":234,"context_line":"            except excluded_exceptions:"},{"line_number":235,"context_line":"                # Skip this exception."},{"line_number":236,"context_line":"                raise"},{"line_number":237,"context_line":"            except Exception as e:"},{"line_number":238,"context_line":"                # Otherwise, retry."}],"source_content_type":"text/x-python","patch_set":13,"id":"acc5dc26_deed8749","line":235,"range":{"start_line":235,"start_character":18,"end_line":235,"end_character":22},"in_reply_to":"ba801182_0c973c87","updated":"2024-11-25 10:11:17.000000000","message":"Good catch! just fixed the comment. \nThank you.","commit_id":"103a8797984dbcdcdb2466181b77cfb341217e1a"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5be5cfcfd75a3ee632deac20709720d905b99b64","unresolved":true,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class HTTPClient:"},{"line_number":52,"context_line":"    def __init__(self, conf, allowed_remote_exmods):"},{"line_number":53,"context_line":"        \"\"\"To be implemented.\"\"\""},{"line_number":54,"context_line":"        pass  # TODO(xiang-roger-wang): Implement __init__ method."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"4ba143fa_7f4610af","line":52,"updated":"2024-11-25 21:46:45.000000000","message":"There may be value in actually making a metaclass here; since I could see a world where we might have different http backends depending on if eventlet or some other async framework.","commit_id":"1422fc1f522ed2f7a2d9acc8e627128eb379d7b2"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"7a52095d9bebdc9b37ce0856339edc4af25df20b","unresolved":true,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class HTTPClient:"},{"line_number":52,"context_line":"    def __init__(self, conf, allowed_remote_exmods):"},{"line_number":53,"context_line":"        \"\"\"To be implemented.\"\"\""},{"line_number":54,"context_line":"        pass  # TODO(xiang-roger-wang): Implement __init__ method."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5b875b00_15534fbd","line":52,"in_reply_to":"4ba143fa_7f4610af","updated":"2025-01-14 01:03:49.000000000","message":"That is a good point. we are also looking for a different async framework since eventlet is going to be deprecated.","commit_id":"1422fc1f522ed2f7a2d9acc8e627128eb379d7b2"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"056c28b92023b290f2141a78779d0690d53d0091","unresolved":true,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class HTTPClient:"},{"line_number":52,"context_line":"    def __init__(self, conf, allowed_remote_exmods):"},{"line_number":53,"context_line":"        \"\"\"To be implemented.\"\"\""},{"line_number":54,"context_line":"        pass  # TODO(xiang-roger-wang): Implement __init__ method."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"8e182fc8_342a9ffc","line":52,"in_reply_to":"5b875b00_15534fbd","updated":"2025-03-31 10:04:25.000000000","message":"\u003eThere may be value in actually making a metaclass here since I could see a world where we might have different http backends depending on if eventlet or some other async framework.\n\nSince all the patches have been submitted, please allow me to add more comments on this topic. \n- The current implementation includes both an HTTP client and an HTTP server.\n- The HTTP client uses the \"requests\" library to send HTTP requests, which is synchronous.\n- The HTTP server is implemented using a Flask app, based on WSGI. It is currently run by eventlet.wsgi(), but it can also be run by other WSGI servers like Gunicorn or uWSGI after the removal of Eventlet. This setup is \"non-blocking.\"\n\nFor simplicity and ease of review, there is currently only one implementation. However, for future steps, I also believe it would be beneficial to make it a metaclass and introduce other HTTP backends.\n\nFor example, once the following topics have been addressed by the HTTP SGI Working Group, I can begin working on this.\nhttps://wiki.openstack.org/wiki/Eventlet-removal#The_HTTP_SGI_Working_Group","commit_id":"1422fc1f522ed2f7a2d9acc8e627128eb379d7b2"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"2c981df004a4ecd0e67d7178ae8e9db43c31098d","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class HTTPClient:"},{"line_number":52,"context_line":"    def __init__(self, conf, allowed_remote_exmods):"},{"line_number":53,"context_line":"        \"\"\"To be implemented.\"\"\""},{"line_number":54,"context_line":"        pass  # TODO(xiang-roger-wang): Implement __init__ method."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"54037f49_b8cda938","line":52,"in_reply_to":"8e182fc8_342a9ffc","updated":"2026-01-06 08:57:05.000000000","message":"Since the patches have been here for so long and there are other high priority issues to resolve, let me mark this one as \"resolved\" for now and maybe improve it later.","commit_id":"1422fc1f522ed2f7a2d9acc8e627128eb379d7b2"},{"author":{"_account_id":11583,"name":"Arnaud Morin","email":"arnaud.morin@gmail.com","username":"arnaudmorin"},"change_message_id":"0719e76e7b10d59cf99c0afaef7ef7c819440ce4","unresolved":true,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class HTTPDriver(base.BaseDriver):"},{"line_number":64,"context_line":"    def __init__(self, conf, url,"},{"line_number":65,"context_line":"                 default_exchange\u003dNone, allowed_remote_exmods\u003dNone,"},{"line_number":66,"context_line":"                 *args, **kwargs):"},{"line_number":67,"context_line":"        super().__init__(conf, url, default_exchange, allowed_remote_exmods)"}],"source_content_type":"text/x-python","patch_set":31,"id":"92a64915_22886433","line":64,"updated":"2025-09-24 21:43:52.000000000","message":"You may want to have a clean docstring here because this will be reflected in doc, see e.g. https://d91d6e9aa5357de7fdf6-27ba51e152f37c2c550101a1da9a359d.ssl.cf5.rackcdn.com/openstack/fc78563700f74a589dbad0c96ebd6da1/docs/admin/drivers.html#http","commit_id":"47e5936619b89a3105623d0d5a1ad489e19ee312"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"f4bd01759621866ce45ecd4c24f26c03a0fe5f37","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class HTTPDriver(base.BaseDriver):"},{"line_number":64,"context_line":"    def __init__(self, conf, url,"},{"line_number":65,"context_line":"                 default_exchange\u003dNone, allowed_remote_exmods\u003dNone,"},{"line_number":66,"context_line":"                 *args, **kwargs):"},{"line_number":67,"context_line":"        super().__init__(conf, url, default_exchange, allowed_remote_exmods)"}],"source_content_type":"text/x-python","patch_set":31,"id":"ea8f0aa5_56fee961","line":64,"in_reply_to":"92a64915_22886433","updated":"2025-12-26 09:26:52.000000000","message":"thank you. i added something like \n```\nSee :doc:`http` for details.\n```\ni also will add a doc accordingly as mentioned in the previous comment.","commit_id":"47e5936619b89a3105623d0d5a1ad489e19ee312"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"4141616a977265637d00dd5579e3ef9f73bbb260","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _send_call(self, topic, target, ctxt, message, timeout\u003dNone):"},{"line_number":127,"context_line":"        target_service \u003d self._select_target_service(target, ctxt, message)"},{"line_number":128,"context_line":"        log_msg \u003d \"CALL topic \u0027{topic}\u0027\".format(topic\u003dtopic)"},{"line_number":129,"context_line":"        LOG.debug(log_msg)"},{"line_number":130,"context_line":"        try:"},{"line_number":131,"context_line":"            resp \u003d self.http_client.call(target_service, message, timeout)"},{"line_number":132,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":31,"id":"38703caf_53c291ac","line":129,"range":{"start_line":128,"start_character":8,"end_line":129,"end_character":26},"updated":"2025-09-27 10:22:12.000000000","message":"Do not construct the string outside of logger call. This is redundant in case log level is \u003edebug. Please put the construction into the LOG.debug().\n\nPlease fix the same usage in different places.","commit_id":"47e5936619b89a3105623d0d5a1ad489e19ee312"},{"author":{"_account_id":36129,"name":"Xiang Wang","display_name":"Xiang(Roger) Wang","email":"rogerxiang.wang@gmail.com","username":"xiang-roger-wang"},"change_message_id":"f4bd01759621866ce45ecd4c24f26c03a0fe5f37","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _send_call(self, topic, target, ctxt, message, timeout\u003dNone):"},{"line_number":127,"context_line":"        target_service \u003d self._select_target_service(target, ctxt, message)"},{"line_number":128,"context_line":"        log_msg \u003d \"CALL topic \u0027{topic}\u0027\".format(topic\u003dtopic)"},{"line_number":129,"context_line":"        LOG.debug(log_msg)"},{"line_number":130,"context_line":"        try:"},{"line_number":131,"context_line":"            resp \u003d self.http_client.call(target_service, message, timeout)"},{"line_number":132,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":31,"id":"575de537_064a18d7","line":129,"range":{"start_line":128,"start_character":8,"end_line":129,"end_character":26},"in_reply_to":"38703caf_53c291ac","updated":"2025-12-26 09:26:52.000000000","message":"Thanks\u0026fixed","commit_id":"47e5936619b89a3105623d0d5a1ad489e19ee312"}]}
