)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"00c3fa8daab4630a6c9a7cf97e02dc1b20457df9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"This commit depends on the commit of Ondřej Nový"},{"line_number":16,"context_line":"at"},{"line_number":17,"context_line":"Oct 29 6:16 PM"},{"line_number":18,"context_line":"Closes-Bug: 1550565"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Change-Id: If5bd096efa08c48bdecb2e1d749f886347e14e99"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a77a97e_ef79fd30","line":18,"updated":"2016-11-15 12:53:12.000000000","message":"Could use a partial-bug tag and also use \u0027Related Change\u0027 tag pointing it to Ondřej Nový\u0027s change. That way it\u0027s more relevant that mentioning the date and time.","commit_id":"e12d1b1ff5fdb64eb6769d64ef29c1ff69e7ad24"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d89c0d83bfa3857fdfb1eaac8274548cc91b10ed","unresolved":false,"context_lines":[{"line_number":13,"context_line":"will be written as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1550565"},{"line_number":16,"context_line":"Partial-Bug: 1550565"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: If5bd096efa08c48bdecb2e1d749f886347e14e99"},{"line_number":19,"context_line":"Related-Change: Icb723ee9eada8728f14eca919b982492c98a24bb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"7a77a97e_02e02495","line":16,"updated":"2016-11-18 15:25:21.000000000","message":"please choose one or the other tag - I think it should be Partial since this patch does not touch the replicator?","commit_id":"baba4bf425cf4aaf308127e7221feafdc27d5506"}],"swift/obj/reconstructor.py":[{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"b82a6d6cb1fef8e88ddaa81bf9a51be1977ba1d9","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                    _(\u0027%s responded as unmounted\u0027),"},{"line_number":492,"context_line":"                    self._full_path(node, job[\u0027partition\u0027], \u0027\u0027,"},{"line_number":493,"context_line":"                                    job[\u0027policy\u0027]))"},{"line_number":494,"context_line":"            elif resp_status !\u003d HTTP_OK:"},{"line_number":495,"context_line":"                full_path \u003d self._full_path(node, job[\u0027partition\u0027], \u0027\u0027,"},{"line_number":496,"context_line":"                                            job[\u0027policy\u0027])"},{"line_number":497,"context_line":"                self.logger.error("}],"source_content_type":"text/x-python","patch_set":2,"id":"9a629dbe_fc30e609","line":494,"updated":"2016-11-07 19:08:17.000000000","message":"else:\n\nBecause I can\u0027t imagine situation, when DricetClientException can be thrown and and response status is not HTTP_OK","commit_id":"42fad00b8a31a26a0eef76c12c477eb0fc30179a"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"00c3fa8daab4630a6c9a7cf97e02dc1b20457df9","unresolved":false,"context_lines":[{"line_number":458,"context_line":"            direct_get_suffix_hashes(node, job[\u0027partition\u0027], suffixes,"},{"line_number":459,"context_line":"                                     response_timeout\u003dself.http_timeout,"},{"line_number":460,"context_line":"                                     headers\u003dself.headers)"},{"line_number":461,"context_line":"        except DirectClientException:"},{"line_number":462,"context_line":"            self.logger.exception("},{"line_number":463,"context_line":"                _(\"Error syncing with node: %s\") % node)"},{"line_number":464,"context_line":"        except (Exception, Timeout):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a77a97e_8f26c966","line":461,"updated":"2016-11-15 12:53:12.000000000","message":"Why not catch specific HTTP_INSUFFICIENT_STORAGE exception and an else clause like below line#488? Would also have to modify the associated test accordingly.","commit_id":"e12d1b1ff5fdb64eb6769d64ef29c1ff69e7ad24"},{"author":{"_account_id":18334,"name":"Nandini Tata","email":"nandini.tata@intel.com","username":"ntata"},"change_message_id":"5cc9d9ce4b76efde784dc5fda28fb0cf3e497d6f","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                                     headers\u003dself.headers)"},{"line_number":461,"context_line":"        except DirectClientException as ex:"},{"line_number":462,"context_line":"            resp_status \u003d ex.http_status"},{"line_number":463,"context_line":"            if resp_status \u003d\u003d HTTP_INSUFFICIENT_STORAGE:"},{"line_number":464,"context_line":"                self.logger.error("},{"line_number":465,"context_line":"                    _(\u0027%s responded as unmounted\u0027),"},{"line_number":466,"context_line":"                    self._full_path(node, job[\u0027partition\u0027], \u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_c1a6bc52","line":463,"updated":"2016-11-16 14:58:42.000000000","message":"I\u0027m only trying to understand here - which case of rehash_remote can throw a HTTP_INSUFFICIENT_STORAGE?","commit_id":"baba4bf425cf4aaf308127e7221feafdc27d5506"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d89c0d83bfa3857fdfb1eaac8274548cc91b10ed","unresolved":false,"context_lines":[{"line_number":507,"context_line":"                                            job[\u0027policy\u0027])"},{"line_number":508,"context_line":"                self.logger.error("},{"line_number":509,"context_line":"                    _(\"Invalid response %(resp)s from %(full_path)s\"),"},{"line_number":510,"context_line":"                    {\u0027resp\u0027: resp_status, \u0027full_path\u0027: full_path})"},{"line_number":511,"context_line":"        except (Exception, Timeout):"},{"line_number":512,"context_line":"            # exceptions with traceback are logged here"},{"line_number":513,"context_line":"            # so that our caller can safely catch"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a77a97e_85435e12","line":510,"updated":"2016-11-18 15:25:21.000000000","message":"lines 494-510 are almost identical to lines 458-473, the only difference being passing None for suffixes, so there could be a single method _get_remote_suffix_hashes that is called from here and from rehash_hashes.","commit_id":"baba4bf425cf4aaf308127e7221feafdc27d5506"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a86794c768969e76ea6a5662b1a702553d1b2b59","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    def _get_remote_suffix_hashes(self, node, job, suffixes):"},{"line_number":227,"context_line":"        \"\"\""},{"line_number":228,"context_line":"        Helper method for calling the direct_get_suffix_hashes function"},{"line_number":229,"context_line":"        with error handling. Only DirectClientExceptions will be catched."},{"line_number":230,"context_line":"        Timeout or Base Exceptions should be handled by the caller."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :param node: the remote node dict"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a77a97e_8a20504b","line":229,"updated":"2016-11-22 14:52:10.000000000","message":"nit s/catched/caught/","commit_id":"867e4abacf6d29a8335e428ab0a4881d18d33b1c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a86794c768969e76ea6a5662b1a702553d1b2b59","unresolved":false,"context_lines":[{"line_number":492,"context_line":""},{"line_number":493,"context_line":"    def rehash_remote(self, node, job, suffixes):"},{"line_number":494,"context_line":"        try:"},{"line_number":495,"context_line":"            self._get_remote_suffix_hashes(node, job, sorted(suffixes))"},{"line_number":496,"context_line":"        except (Exception, Timeout):"},{"line_number":497,"context_line":"            self.logger.exception("},{"line_number":498,"context_line":"                _(\"Trying to sync suffixes with %s\") % self._full_path("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a77a97e_2f1bce81","line":495,"updated":"2016-11-22 14:52:10.000000000","message":"this will now log an error is response status !\u003d 2xx, before there would be no log. I think it\u0027s ok to add the log message but the problem is that it will appear exactly the same as the one logged that could be logged at line 516, which could make it hard to debug.\n\nI made a diff to suggest how the two could be differentiated:\n\nhttps://gist.github.com/alistairncoles/728e53fb71952b30dd7557da0f8d0616","commit_id":"867e4abacf6d29a8335e428ab0a4881d18d33b1c"}]}
