)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"1fd2d4491748b3a68c93cd752223191bf43871bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f9d6afb1_0f775f0f","updated":"2023-09-02 05:56:57.000000000","message":"Rather than using getfqdn to get the hostname, what if we changed it to get the hostname of the host from the recon middleware and show it to user?","commit_id":"953a5929de417e0bb198742b9e5843adf7f25d15"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3c1ef2866cffca4b11f72ce5e9972fa7a087af2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5d0b76e9_67b4a754","updated":"2023-10-06 18:40:44.000000000","message":"This is coming along nicely! I think I\u0027d like to see some tests around the middleware actually sending `X-Backend-Hostname`, though, since it\u0027s a key part of the change.","commit_id":"74a83a116856e64dfdc266e283dc62300419566c"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"f6c06eb8_929d86b4","updated":"2023-11-16 03:38:56.000000000","message":"All modifications have been applied😊","commit_id":"570b41667f946ec29424a672656f51643a8007ea"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8518d3a30957b505db1336c9b62c8690c5f77889","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"aa5fb2b4_c07a0cca","updated":"2023-11-27 22:11:35.000000000","message":"Sorry for the long wait between reviews! Just one little thing for the `get_formatted_hostname` docstring.","commit_id":"570b41667f946ec29424a672656f51643a8007ea"}],"swift/cli/recon.py":[{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"3d8968d9839fc5c27b281a675e7869290c6c9706","unresolved":true,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            response \u003d urllib2.urlopen(url, timeout\u003dself.timeout)"},{"line_number":90,"context_line":"            headers \u003d response.info()"},{"line_number":91,"context_line":"            hostname \u003d headers.get(\"X-Hostname\", \"Unknown\")"},{"line_number":92,"context_line":"            body \u003d response.read()"},{"line_number":93,"context_line":"            if six.PY3 and isinstance(body, six.binary_type):"},{"line_number":94,"context_line":"                body \u003d body.decode(\u0027utf8\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"99d6dbe6_6ea4905f","line":91,"updated":"2023-09-18 14:25:48.000000000","message":"If there are an exception from gethostname in backend, X-Hostname(or X-Backend-Hostname) header is not in response header. \n\nSo, Unknown string will be just None .","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            response \u003d urllib2.urlopen(url, timeout\u003dself.timeout)"},{"line_number":90,"context_line":"            headers \u003d response.info()"},{"line_number":91,"context_line":"            hostname \u003d headers.get(\"X-Hostname\", \"Unknown\")"},{"line_number":92,"context_line":"            body \u003d response.read()"},{"line_number":93,"context_line":"            if six.PY3 and isinstance(body, six.binary_type):"},{"line_number":94,"context_line":"                body \u003d body.decode(\u0027utf8\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"81b8ba3f_268d04b3","line":91,"in_reply_to":"99d6dbe6_6ea4905f","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"0783bcbb11a10ac444a2a5c2a15cb05fdda7dcc7","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        try:"},{"line_number":89,"context_line":"            response \u003d urllib2.urlopen(url, timeout\u003dself.timeout)"},{"line_number":90,"context_line":"            headers \u003d response.info()"},{"line_number":91,"context_line":"            hostname \u003d headers.get(\"X-Hostname\", \"Unknown\")"},{"line_number":92,"context_line":"            body \u003d response.read()"},{"line_number":93,"context_line":"            if six.PY3 and isinstance(body, six.binary_type):"},{"line_number":94,"context_line":"                body \u003d body.decode(\u0027utf8\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"d61b292b_69209ec2","line":91,"in_reply_to":"99d6dbe6_6ea4905f","updated":"2023-10-01 07:58:12.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"3d8968d9839fc5c27b281a675e7869290c6c9706","unresolved":true,"context_lines":[{"line_number":364,"context_line":"                      self.timeout)"},{"line_number":365,"context_line":"        print(\"[%s] Getting unmounted drives from %s hosts...\" %"},{"line_number":366,"context_line":"              (self._ptime(), len(hosts)))"},{"line_number":367,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":368,"context_line":"                recon.scout, hosts):"},{"line_number":369,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":370,"context_line":"            if status \u003d\u003d 200:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1349d794_d3ab83d8","line":367,"range":{"start_line":367,"start_character":35,"end_line":367,"end_character":40},"updated":"2023-09-18 14:25:48.000000000","message":"revert to original var name","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":364,"context_line":"                      self.timeout)"},{"line_number":365,"context_line":"        print(\"[%s] Getting unmounted drives from %s hosts...\" %"},{"line_number":366,"context_line":"              (self._ptime(), len(hosts)))"},{"line_number":367,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":368,"context_line":"                recon.scout, hosts):"},{"line_number":369,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":370,"context_line":"            if status \u003d\u003d 200:"}],"source_content_type":"text/x-python","patch_set":3,"id":"33c60550_3d45f597","line":367,"range":{"start_line":367,"start_character":35,"end_line":367,"end_character":40},"in_reply_to":"1349d794_d3ab83d8","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"0783bcbb11a10ac444a2a5c2a15cb05fdda7dcc7","unresolved":false,"context_lines":[{"line_number":364,"context_line":"                      self.timeout)"},{"line_number":365,"context_line":"        print(\"[%s] Getting unmounted drives from %s hosts...\" %"},{"line_number":366,"context_line":"              (self._ptime(), len(hosts)))"},{"line_number":367,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":368,"context_line":"                recon.scout, hosts):"},{"line_number":369,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":370,"context_line":"            if status \u003d\u003d 200:"}],"source_content_type":"text/x-python","patch_set":3,"id":"b8804fb9_1dc4f0a9","line":367,"range":{"start_line":367,"start_character":35,"end_line":367,"end_character":40},"in_reply_to":"1349d794_d3ab83d8","updated":"2023-10-01 07:58:12.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"3d8968d9839fc5c27b281a675e7869290c6c9706","unresolved":true,"context_lines":[{"line_number":366,"context_line":"              (self._ptime(), len(hosts)))"},{"line_number":367,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":368,"context_line":"                recon.scout, hosts):"},{"line_number":369,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":370,"context_line":"            if status \u003d\u003d 200:"},{"line_number":371,"context_line":"                unmounted[url] \u003d []"},{"line_number":372,"context_line":"                errors[url] \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"612af770_cc320b92","line":369,"range":{"start_line":369,"start_character":29,"end_line":369,"end_character":37},"updated":"2023-09-18 14:25:48.000000000","message":"If hostname is None, The hostname will be just url","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":366,"context_line":"              (self._ptime(), len(hosts)))"},{"line_number":367,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":368,"context_line":"                recon.scout, hosts):"},{"line_number":369,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":370,"context_line":"            if status \u003d\u003d 200:"},{"line_number":371,"context_line":"                unmounted[url] \u003d []"},{"line_number":372,"context_line":"                errors[url] \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"6a37e62d_08615e8c","line":369,"range":{"start_line":369,"start_character":29,"end_line":369,"end_character":37},"in_reply_to":"612af770_cc320b92","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"0783bcbb11a10ac444a2a5c2a15cb05fdda7dcc7","unresolved":false,"context_lines":[{"line_number":366,"context_line":"              (self._ptime(), len(hosts)))"},{"line_number":367,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":368,"context_line":"                recon.scout, hosts):"},{"line_number":369,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":370,"context_line":"            if status \u003d\u003d 200:"},{"line_number":371,"context_line":"                unmounted[url] \u003d []"},{"line_number":372,"context_line":"                errors[url] \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"d59cc2da_3cb7afc0","line":369,"range":{"start_line":369,"start_character":29,"end_line":369,"end_character":37},"in_reply_to":"612af770_cc320b92","updated":"2023-10-01 07:58:12.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"3d8968d9839fc5c27b281a675e7869290c6c9706","unresolved":true,"context_lines":[{"line_number":911,"context_line":"        # appears only once in filtered_hosts."},{"line_number":912,"context_line":"        filtered_hosts \u003d set(dict(hosts).items())"},{"line_number":913,"context_line":"        print(\"[%s] Checking disk usage now\" % self._ptime())"},{"line_number":914,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":915,"context_line":"                recon.scout, filtered_hosts):"},{"line_number":916,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":917,"context_line":"            if status \u003d\u003d 200:"}],"source_content_type":"text/x-python","patch_set":3,"id":"2178823f_8e9c83ff","line":914,"range":{"start_line":914,"start_character":35,"end_line":914,"end_character":39},"updated":"2023-09-18 14:25:48.000000000","message":"revert this to original var name","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"0783bcbb11a10ac444a2a5c2a15cb05fdda7dcc7","unresolved":false,"context_lines":[{"line_number":911,"context_line":"        # appears only once in filtered_hosts."},{"line_number":912,"context_line":"        filtered_hosts \u003d set(dict(hosts).items())"},{"line_number":913,"context_line":"        print(\"[%s] Checking disk usage now\" % self._ptime())"},{"line_number":914,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":915,"context_line":"                recon.scout, filtered_hosts):"},{"line_number":916,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":917,"context_line":"            if status \u003d\u003d 200:"}],"source_content_type":"text/x-python","patch_set":3,"id":"2011cf07_8183ee09","line":914,"range":{"start_line":914,"start_character":35,"end_line":914,"end_character":39},"in_reply_to":"2178823f_8e9c83ff","updated":"2023-10-01 07:58:12.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":911,"context_line":"        # appears only once in filtered_hosts."},{"line_number":912,"context_line":"        filtered_hosts \u003d set(dict(hosts).items())"},{"line_number":913,"context_line":"        print(\"[%s] Checking disk usage now\" % self._ptime())"},{"line_number":914,"context_line":"        for url, response, status, _, _, hostname in self.pool.imap("},{"line_number":915,"context_line":"                recon.scout, filtered_hosts):"},{"line_number":916,"context_line":"            hostnames[url] \u003d hostname"},{"line_number":917,"context_line":"            if status \u003d\u003d 200:"}],"source_content_type":"text/x-python","patch_set":3,"id":"a6060953_96c0be01","line":914,"range":{"start_line":914,"start_character":35,"end_line":914,"end_character":39},"in_reply_to":"2178823f_8e9c83ff","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"0783bcbb11a10ac444a2a5c2a15cb05fdda7dcc7","unresolved":true,"context_lines":[{"line_number":90,"context_line":"            response \u003d urllib2.urlopen(url, timeout\u003dself.timeout)"},{"line_number":91,"context_line":"            headers \u003d response.info()"},{"line_number":92,"context_line":"            hostname \u003d headers.get(\"X-Backend-Hostname\", None)"},{"line_number":93,"context_line":"            if urlparse(url).netloc \u003d\u003d \u0027127.0.0.2:6220\u0027:"},{"line_number":94,"context_line":"                hostname \u003d None"},{"line_number":95,"context_line":"            body \u003d response.read()"},{"line_number":96,"context_line":"            if six.PY3 and isinstance(body, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ea6fbd5b_bd0f190e","line":93,"range":{"start_line":93,"start_character":40,"end_line":93,"end_character":49},"updated":"2023-10-01 07:58:12.000000000","message":"I think, This code is only for your test env. What is this code for?","commit_id":"70cc503d1a5ac486e288fc9fbe731bd7a1d3a381"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            response \u003d urllib2.urlopen(url, timeout\u003dself.timeout)"},{"line_number":91,"context_line":"            headers \u003d response.info()"},{"line_number":92,"context_line":"            hostname \u003d headers.get(\"X-Backend-Hostname\", None)"},{"line_number":93,"context_line":"            if urlparse(url).netloc \u003d\u003d \u0027127.0.0.2:6220\u0027:"},{"line_number":94,"context_line":"                hostname \u003d None"},{"line_number":95,"context_line":"            body \u003d response.read()"},{"line_number":96,"context_line":"            if six.PY3 and isinstance(body, six.binary_type):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3e5958ba_e7e912fb","line":93,"range":{"start_line":93,"start_character":40,"end_line":93,"end_character":49},"in_reply_to":"ea6fbd5b_bd0f190e","updated":"2023-11-16 03:38:56.000000000","message":"Oops.. It was for my local test.I forgot to remove it.. I\u0027ll remove it in the next patch.","commit_id":"70cc503d1a5ac486e288fc9fbe731bd7a1d3a381"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":223,"context_line":"            devs \u003d [d for d in devs if d[\u0027zone\u0027] \u003d\u003d zone_filter]"},{"line_number":224,"context_line":"        return set((d[\u0027ip\u0027], d[\u0027port\u0027]) for d in devs)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    def get_formatted_hostname(self, url, hostname, include_port\u003dFalse):"},{"line_number":227,"context_line":"        \"\"\""},{"line_number":228,"context_line":"        Get the formatted hostname string based on the given hostname."},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"8c3266c7_1027095e","line":226,"range":{"start_line":226,"start_character":52,"end_line":226,"end_character":64},"updated":"2023-11-16 03:38:56.000000000","message":"This is my mistake. I will change this var name to exclude_port in next patch.","commit_id":"70cc503d1a5ac486e288fc9fbe731bd7a1d3a381"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8518d3a30957b505db1336c9b62c8690c5f77889","unresolved":true,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param url: The URL used to request"},{"line_number":229,"context_line":"        :param hostname: The original hostname to be formatted"},{"line_number":230,"context_line":"        :param include_port: A flag to indicate whether to include the port"},{"line_number":231,"context_line":"        :returns: A formatted hostname string"},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        parsed_url \u003d urlparse(url).netloc"}],"source_content_type":"text/x-python","patch_set":11,"id":"db12afaf_931c778c","line":230,"range":{"start_line":230,"start_character":15,"end_line":230,"end_character":27},"updated":"2023-11-27 22:11:35.000000000","message":"`include_port`, or `exclude_port`?\n\nDo we ever use this param? Or it is intended for future patches as we fully close out the bug?","commit_id":"570b41667f946ec29424a672656f51643a8007ea"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"cbca68c4518c9dcacb22d8b246d9f9158816adc6","unresolved":true,"context_lines":[{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param url: The URL used to request"},{"line_number":229,"context_line":"        :param hostname: The original hostname to be formatted"},{"line_number":230,"context_line":"        :param include_port: A flag to indicate whether to include the port"},{"line_number":231,"context_line":"        :returns: A formatted hostname string"},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        parsed_url \u003d urlparse(url).netloc"}],"source_content_type":"text/x-python","patch_set":11,"id":"f7970a56_c323ff63","line":230,"range":{"start_line":230,"start_character":15,"end_line":230,"end_character":27},"in_reply_to":"db12afaf_931c778c","updated":"2023-12-06 02:32:42.000000000","message":"Oops, it\u0027s actually `exclude_port` – my bad!😅 This parameter was added to support cases where we output the IP without the port, like in the `disk_usage` function, for example. In the `disk_usage` function, we\u0027re using this parameter as True.","commit_id":"570b41667f946ec29424a672656f51643a8007ea"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8518d3a30957b505db1336c9b62c8690c5f77889","unresolved":true,"context_lines":[{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        parsed_url \u003d urlparse(url).netloc"},{"line_number":234,"context_line":"        if exclude_port:"},{"line_number":235,"context_line":"            parsed_url \u003d parsed_url.split(\u0027:\u0027)[0]"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if hostname is None:"},{"line_number":238,"context_line":"            hostname \u003d parsed_url"}],"source_content_type":"text/x-python","patch_set":11,"id":"2ecb6b7d_47c0a2e6","line":235,"updated":"2023-11-27 22:11:35.000000000","message":"Alternatively,\n```\nparsed_url \u003d urlparse(url)\nparsed_url \u003d parsed_url.hostname if exclude_port else parsed_url.netloc\n```","commit_id":"570b41667f946ec29424a672656f51643a8007ea"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"cbca68c4518c9dcacb22d8b246d9f9158816adc6","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":"        parsed_url \u003d urlparse(url).netloc"},{"line_number":234,"context_line":"        if exclude_port:"},{"line_number":235,"context_line":"            parsed_url \u003d parsed_url.split(\u0027:\u0027)[0]"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        if hostname is None:"},{"line_number":238,"context_line":"            hostname \u003d parsed_url"}],"source_content_type":"text/x-python","patch_set":11,"id":"a6bb18d1_5727d3d9","line":235,"in_reply_to":"2ecb6b7d_47c0a2e6","updated":"2023-12-06 02:32:42.000000000","message":"Done","commit_id":"570b41667f946ec29424a672656f51643a8007ea"}],"swift/common/middleware/recon.py":[{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"3d8968d9839fc5c27b281a675e7869290c6c9706","unresolved":true,"context_lines":[{"line_number":368,"context_line":"            return hostname"},{"line_number":369,"context_line":"        except socket.error:"},{"line_number":370,"context_line":"            self.logger.exception(_(\u0027Error fetching hostname\u0027))"},{"line_number":371,"context_line":"            return \u0027Unknown\u0027"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def GET(self, req):"},{"line_number":374,"context_line":"        root, rcheck, rtype \u003d req.split_path(1, 3, True)"}],"source_content_type":"text/x-python","patch_set":3,"id":"51283cd9_a617dfd2","line":371,"range":{"start_line":371,"start_character":20,"end_line":371,"end_character":27},"updated":"2023-09-18 14:25:48.000000000","message":"I have no idea the case of failure to gethostname. But, I think this exception handling is good to prevent unexpected 500 error.\n\nI\u0027d like to change the default value of hostname but don\u0027t have a good idea.\nHow about change this value to None?","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"0783bcbb11a10ac444a2a5c2a15cb05fdda7dcc7","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            return hostname"},{"line_number":369,"context_line":"        except socket.error:"},{"line_number":370,"context_line":"            self.logger.exception(_(\u0027Error fetching hostname\u0027))"},{"line_number":371,"context_line":"            return \u0027Unknown\u0027"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def GET(self, req):"},{"line_number":374,"context_line":"        root, rcheck, rtype \u003d req.split_path(1, 3, True)"}],"source_content_type":"text/x-python","patch_set":3,"id":"0decbe5d_534fdfda","line":371,"range":{"start_line":371,"start_character":20,"end_line":371,"end_character":27},"in_reply_to":"51283cd9_a617dfd2","updated":"2023-10-01 07:58:12.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":368,"context_line":"            return hostname"},{"line_number":369,"context_line":"        except socket.error:"},{"line_number":370,"context_line":"            self.logger.exception(_(\u0027Error fetching hostname\u0027))"},{"line_number":371,"context_line":"            return \u0027Unknown\u0027"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"    def GET(self, req):"},{"line_number":374,"context_line":"        root, rcheck, rtype \u003d req.split_path(1, 3, True)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ea7b5891_d084e0e1","line":371,"range":{"start_line":371,"start_character":20,"end_line":371,"end_character":27},"in_reply_to":"51283cd9_a617dfd2","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"3d8968d9839fc5c27b281a675e7869290c6c9706","unresolved":true,"context_lines":[{"line_number":425,"context_line":"                            body\u003dcontent, content_type\u003d\"text/plain\")"},{"line_number":426,"context_line":"        if content is not None:"},{"line_number":427,"context_line":"            return Response(request\u003dreq, body\u003djson.dumps(content),"},{"line_number":428,"context_line":"                            headers\u003d[(\u0027X-Hostname\u0027, hostname)],"},{"line_number":429,"context_line":"                            content_type\u003d\"application/json\")"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            return Response(request\u003dreq, status\u003d\"500 Server Error\","}],"source_content_type":"text/x-python","patch_set":3,"id":"688bc324_fe648879","line":428,"range":{"start_line":428,"start_character":41,"end_line":428,"end_character":49},"updated":"2023-09-18 14:25:48.000000000","message":"How about change this header name to \"X-Backend-Hostname\"?\n\nAnd If hostname is None, not to include this Header in response header.","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"0783bcbb11a10ac444a2a5c2a15cb05fdda7dcc7","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                            body\u003dcontent, content_type\u003d\"text/plain\")"},{"line_number":426,"context_line":"        if content is not None:"},{"line_number":427,"context_line":"            return Response(request\u003dreq, body\u003djson.dumps(content),"},{"line_number":428,"context_line":"                            headers\u003d[(\u0027X-Hostname\u0027, hostname)],"},{"line_number":429,"context_line":"                            content_type\u003d\"application/json\")"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            return Response(request\u003dreq, status\u003d\"500 Server Error\","}],"source_content_type":"text/x-python","patch_set":3,"id":"7d621c86_30943a7d","line":428,"range":{"start_line":428,"start_character":41,"end_line":428,"end_character":49},"in_reply_to":"688bc324_fe648879","updated":"2023-10-01 07:58:12.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":425,"context_line":"                            body\u003dcontent, content_type\u003d\"text/plain\")"},{"line_number":426,"context_line":"        if content is not None:"},{"line_number":427,"context_line":"            return Response(request\u003dreq, body\u003djson.dumps(content),"},{"line_number":428,"context_line":"                            headers\u003d[(\u0027X-Hostname\u0027, hostname)],"},{"line_number":429,"context_line":"                            content_type\u003d\"application/json\")"},{"line_number":430,"context_line":"        else:"},{"line_number":431,"context_line":"            return Response(request\u003dreq, status\u003d\"500 Server Error\","}],"source_content_type":"text/x-python","patch_set":3,"id":"7da68190_454884be","line":428,"range":{"start_line":428,"start_character":41,"end_line":428,"end_character":49},"in_reply_to":"688bc324_fe648879","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"1e33285612048ee63c44f60a5fd4f6a6f1d18c9b"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3c1ef2866cffca4b11f72ce5e9972fa7a087af2","unresolved":true,"context_lines":[{"line_number":376,"context_line":"        hostname \u003d self.get_hostname()"},{"line_number":377,"context_line":"        headers \u003d []"},{"line_number":378,"context_line":"        if hostname is not None:"},{"line_number":379,"context_line":"            headers.append((\u0027X-Backend-Hostname\u0027, hostname))"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        if rcheck \u003d\u003d \"mem\":"},{"line_number":382,"context_line":"            content \u003d self.get_mem()"}],"source_content_type":"text/x-python","patch_set":9,"id":"8dd5b72f_619a89b1","line":379,"updated":"2023-10-06 18:40:44.000000000","message":"Oh, interesting! We should probably call out this change in the commit message.\n\nIn general, though, I rather like the idea of including more info in recon response headers -- for example, including a `Server` header that looks at `sys.argv[0]` and `swift.__version__` (already imported here as `swiftver`).","commit_id":"74a83a116856e64dfdc266e283dc62300419566c"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        hostname \u003d self.get_hostname()"},{"line_number":377,"context_line":"        headers \u003d []"},{"line_number":378,"context_line":"        if hostname is not None:"},{"line_number":379,"context_line":"            headers.append((\u0027X-Backend-Hostname\u0027, hostname))"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        if rcheck \u003d\u003d \"mem\":"},{"line_number":382,"context_line":"            content \u003d self.get_mem()"}],"source_content_type":"text/x-python","patch_set":9,"id":"6c2b0a62_7b75b192","line":379,"in_reply_to":"8dd5b72f_619a89b1","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"74a83a116856e64dfdc266e283dc62300419566c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3c1ef2866cffca4b11f72ce5e9972fa7a087af2","unresolved":true,"context_lines":[{"line_number":434,"context_line":"        else:"},{"line_number":435,"context_line":"            return Response(request\u003dreq, status\u003d\"500 Server Error\","},{"line_number":436,"context_line":"                            body\u003d\"Internal server error.\","},{"line_number":437,"context_line":"                            content_type\u003d\"text/plain\")"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def __call__(self, env, start_response):"},{"line_number":440,"context_line":"        req \u003d Request(env)"}],"source_content_type":"text/x-python","patch_set":9,"id":"6f8c430f_b5332304","line":437,"updated":"2023-10-06 18:40:44.000000000","message":"Should we include this header in error responses, too?","commit_id":"74a83a116856e64dfdc266e283dc62300419566c"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        else:"},{"line_number":435,"context_line":"            return Response(request\u003dreq, status\u003d\"500 Server Error\","},{"line_number":436,"context_line":"                            body\u003d\"Internal server error.\","},{"line_number":437,"context_line":"                            content_type\u003d\"text/plain\")"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def __call__(self, env, start_response):"},{"line_number":440,"context_line":"        req \u003d Request(env)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bcdbc257_cef580fd","line":437,"in_reply_to":"6f8c430f_b5332304","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"74a83a116856e64dfdc266e283dc62300419566c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6af689a1fc333290d6397c37c5ed9c96bbf31631","unresolved":true,"context_lines":[{"line_number":374,"context_line":"    def GET(self, req):"},{"line_number":375,"context_line":"        root, rcheck, rtype \u003d req.split_path(1, 3, True)"},{"line_number":376,"context_line":"        all_rtypes \u003d [\u0027account\u0027, \u0027container\u0027, \u0027object\u0027]"},{"line_number":377,"context_line":"        headers \u003d [(\u0027Server\u0027, \u0027%s/%s\u0027 % (sys.argv[0], swiftver))]"},{"line_number":378,"context_line":"        headers.append((\u0027X-Backend-Hostname\u0027, self.get_hostname()))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        if rcheck \u003d\u003d \"mem\":"}],"source_content_type":"text/x-python","patch_set":10,"id":"86a5615b_785ba2e8","line":377,"updated":"2023-10-17 15:53:35.000000000","message":"Oh, thanks! I didn\u0027t actually mean that it had to be part of *this* change, but I\u0027ll take it 😊\n\nI think we\u0027ll want to  just send back `os.path.basename(sys.argv[0])` though -- the whole path shouldn\u0027t be necessary.","commit_id":"889f5ac13b5831a98ca25a5f872f6e2ec40d44c9"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    def GET(self, req):"},{"line_number":375,"context_line":"        root, rcheck, rtype \u003d req.split_path(1, 3, True)"},{"line_number":376,"context_line":"        all_rtypes \u003d [\u0027account\u0027, \u0027container\u0027, \u0027object\u0027]"},{"line_number":377,"context_line":"        headers \u003d [(\u0027Server\u0027, \u0027%s/%s\u0027 % (sys.argv[0], swiftver))]"},{"line_number":378,"context_line":"        headers.append((\u0027X-Backend-Hostname\u0027, self.get_hostname()))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        if rcheck \u003d\u003d \"mem\":"}],"source_content_type":"text/x-python","patch_set":10,"id":"f6233b8b_c13ad2eb","line":377,"in_reply_to":"86a5615b_785ba2e8","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"889f5ac13b5831a98ca25a5f872f6e2ec40d44c9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6af689a1fc333290d6397c37c5ed9c96bbf31631","unresolved":true,"context_lines":[{"line_number":375,"context_line":"        root, rcheck, rtype \u003d req.split_path(1, 3, True)"},{"line_number":376,"context_line":"        all_rtypes \u003d [\u0027account\u0027, \u0027container\u0027, \u0027object\u0027]"},{"line_number":377,"context_line":"        headers \u003d [(\u0027Server\u0027, \u0027%s/%s\u0027 % (sys.argv[0], swiftver))]"},{"line_number":378,"context_line":"        headers.append((\u0027X-Backend-Hostname\u0027, self.get_hostname()))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        if rcheck \u003d\u003d \"mem\":"},{"line_number":381,"context_line":"            content \u003d self.get_mem()"}],"source_content_type":"text/x-python","patch_set":10,"id":"7d52a3c6_6d5130b6","line":378,"updated":"2023-10-17 15:53:35.000000000","message":"We lost the `if hostname is not None:`; was that intentional? I\u0027m fine with the idea of it only being returned if the server can get its own hostname.","commit_id":"889f5ac13b5831a98ca25a5f872f6e2ec40d44c9"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        root, rcheck, rtype \u003d req.split_path(1, 3, True)"},{"line_number":376,"context_line":"        all_rtypes \u003d [\u0027account\u0027, \u0027container\u0027, \u0027object\u0027]"},{"line_number":377,"context_line":"        headers \u003d [(\u0027Server\u0027, \u0027%s/%s\u0027 % (sys.argv[0], swiftver))]"},{"line_number":378,"context_line":"        headers.append((\u0027X-Backend-Hostname\u0027, self.get_hostname()))"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        if rcheck \u003d\u003d \"mem\":"},{"line_number":381,"context_line":"            content \u003d self.get_mem()"}],"source_content_type":"text/x-python","patch_set":10,"id":"0097230c_c0c1d854","line":378,"in_reply_to":"7d52a3c6_6d5130b6","updated":"2023-11-16 03:38:56.000000000","message":"The test code has been modified to always check the hostname header; I made this change accordingly. If the previous code is preferred, I will revert it!","commit_id":"889f5ac13b5831a98ca25a5f872f6e2ec40d44c9"}],"test/unit/common/middleware/test_recon.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f3c1ef2866cffca4b11f72ce5e9972fa7a087af2","unresolved":true,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def start_response(*args):"},{"line_number":59,"context_line":"    pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class FakeFromCache(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"c473b68b_f029b1d1","line":59,"updated":"2023-10-06 18:40:44.000000000","message":"I think we\u0027ll want to have this start capturing headers (or rework how we exercise the middleware in some other way), so we can make assertions on `X-Backend-Hostname` actually making it out to the `swift-recon` client.","commit_id":"74a83a116856e64dfdc266e283dc62300419566c"},{"author":{"_account_id":36192,"name":"kim nuri","display_name":"kim nuri","email":"knr524m@gmail.com","username":"k-nr"},"change_message_id":"bd796325ad9de00c4f4b0e2e550924607c83da03","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def start_response(*args):"},{"line_number":59,"context_line":"    pass"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class FakeFromCache(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"c9551736_64f1ca5f","line":59,"in_reply_to":"c473b68b_f029b1d1","updated":"2023-11-16 03:38:56.000000000","message":"Done","commit_id":"74a83a116856e64dfdc266e283dc62300419566c"}]}
