)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bf0406fd8c04a26c77ab31ba0dc6e9164e3617eb","unresolved":false,"context_lines":[{"line_number":11,"context_line":"* Added replication_port to error messages"},{"line_number":12,"context_line":"* Have connection timeout of 5 sec and use http_timeout for read timeout"},{"line_number":13,"context_line":"* If REPLICATE command after rsync fail, count it as failure"},{"line_number":14,"context_line":"* Use user agent \"direct-client %(pid)\" instead of \"object-replicator %(pid)\""},{"line_number":15,"context_line":"* More checks for error logs in replicator unit tests"},{"line_number":16,"context_line":"* Allow to get all hashes in direct_client.direct_get_suffix_hashes"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ba5da102_d42646cd","line":14,"updated":"2016-10-31 23:29:45.000000000","message":"Hmm... I could see some value in knowing that this was the object-replicator in particular. I suppose direct_client doesn\u0027t currently offer a way to change the User-Agent, though :-/\n\nI don\u0027t think I care enough to hold this up over it.","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"2545f4380c2f5cb15e0b288f722feea59d805915","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Changes:"},{"line_number":10,"context_line":"* Use direct_client for getting remote hashes"},{"line_number":11,"context_line":"* Added replication_port to error messages"},{"line_number":12,"context_line":"* Have connection timeout of 5 sec and use http_timeout for read timeout"},{"line_number":13,"context_line":"* If REPLICATE command after rsync fail, count it as failure"},{"line_number":14,"context_line":"* Use user agent \"direct-client %(pid)\" instead of \"object-replicator %(pid)\""},{"line_number":15,"context_line":"* More checks for error logs in replicator unit tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a77a97e_a349e48d","line":12,"updated":"2016-11-15 11:43:21.000000000","message":"hmm I don\u0027t see the timeout of 5 sec in this change, am I missing something?","commit_id":"e95787cea755a0c303ebad67d7909189505dcd70"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"15373a62ce86a135c7c0a8e9921e587fe9304e56","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Changes:"},{"line_number":10,"context_line":"* Use direct_client for getting remote hashes"},{"line_number":11,"context_line":"* Added replication_port to error messages"},{"line_number":12,"context_line":"* Have connection timeout of 5 sec and use http_timeout for read timeout"},{"line_number":13,"context_line":"* If REPLICATE command after rsync fail, count it as failure"},{"line_number":14,"context_line":"* Use user agent \"direct-client %(pid)\" instead of \"object-replicator %(pid)\""},{"line_number":15,"context_line":"* More checks for error logs in replicator unit tests"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a77a97e_3460acce","line":12,"in_reply_to":"7a77a97e_a349e48d","updated":"2016-11-15 12:22:47.000000000","message":"def direct_get_suffix_hashes(node, part, suffixes, conn_timeout\u003d5, ...\n\nit\u0027s default in this function.","commit_id":"e95787cea755a0c303ebad67d7909189505dcd70"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"2545f4380c2f5cb15e0b288f722feea59d805915","unresolved":false,"context_lines":[{"line_number":13,"context_line":"* If REPLICATE command after rsync fail, count it as failure"},{"line_number":14,"context_line":"* Use user agent \"direct-client %(pid)\" instead of \"object-replicator %(pid)\""},{"line_number":15,"context_line":"* More checks for error logs in replicator unit tests"},{"line_number":16,"context_line":"* Allow to get all hashes in direct_client.direct_get_suffix_hashes"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Icb723ee9eada8728f14eca919b982492c98a24bb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7a77a97e_0e4c7f6f","line":16,"updated":"2016-11-15 11:43:21.000000000","message":"Maybe this could use the partial-bug tag for lp bug#1550565","commit_id":"e95787cea755a0c303ebad67d7909189505dcd70"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"cafea0f8530b8900844c8e9e78d0c6b187812062","unresolved":false,"context_lines":[{"line_number":11,"context_line":"* Added replication_port to error messages"},{"line_number":12,"context_line":"* Have connection timeout of 5 sec and use http_timeout for read timeout"},{"line_number":13,"context_line":"* If REPLICATE command after rsync fail, count it as failure"},{"line_number":14,"context_line":"* Use user agent \"direct-client %(pid)\" instead of \"object-replicator %(pid)\""},{"line_number":15,"context_line":"* More checks for error logs in replicator unit tests"},{"line_number":16,"context_line":"* Allow to get all hashes in direct_client.direct_get_suffix_hashes"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a77a97e_7600ba66","line":14,"updated":"2016-11-18 15:22:11.000000000","message":"I\u0027m not convinced that this is an improvement, it seems like a loss of useful information that is a side-effect of using direct_client. For example, with the similar proposed change to reconstructor [1] there will be no immediately obvious distinction in logs between REPLICATE requests from the replicator vs reconstructor.\n\n[1] https://review.openstack.org/#/c/394551/","commit_id":"fd80672b6e5acfa1bcbbd47d9c852d6f95b4c95d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef72df1642c374a949cb6320b8e9de71657639b3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"* Use direct_client for getting remote hashes"},{"line_number":12,"context_line":"* Added replication_port to error messages"},{"line_number":13,"context_line":"* Have global timeout in direct_client for getting hashes"},{"line_number":14,"context_line":"* If REPLICATE command after rsync fail, count it as failure"},{"line_number":15,"context_line":"* More checks for error logs in replicator unit tests"},{"line_number":16,"context_line":"* Allow to get all hashes in direct_client.direct_get_suffix_hashes"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7a77a97e_0d50e509","line":14,"updated":"2016-11-22 12:13:16.000000000","message":"^^ This change is arguably the most significant of the patch and more than just cleanup because it changes behaviour, to the extent that I wonder if the commit subject should indicate that","commit_id":"dd20585d224c7ec09db41794108e305f8c8e7fc6"}],"swift/common/direct_client.py":[{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"2545f4380c2f5cb15e0b288f722feea59d805915","unresolved":false,"context_lines":[{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    :param node: node dictionary from the ring"},{"line_number":490,"context_line":"    :param part: partition the container is on"},{"line_number":491,"context_line":"    :param suffixes: Suffixies list to get hashes for or None for all"},{"line_number":492,"context_line":"    :param conn_timeout: timeout in seconds for establishing the connection"},{"line_number":493,"context_line":"    :param response_timeout: timeout in seconds for getting the response"},{"line_number":494,"context_line":"    :param headers: dict to be passed into HTTPConnection headers"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a77a97e_83f3080a","line":491,"updated":"2016-11-15 11:43:21.000000000","message":"nit: s/Suffixies/suffixes","commit_id":"e95787cea755a0c303ebad67d7909189505dcd70"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"2bcc2880c821f4934dcdbbc6cfcad2e12f0fb8d9","unresolved":false,"context_lines":[{"line_number":481,"context_line":"              \u0027Object\u0027, conn_timeout, response_timeout)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"def direct_get_suffix_hashes(node, part, suffixes, timeout\u003d60,"},{"line_number":485,"context_line":"                             headers\u003dNone):"},{"line_number":486,"context_line":"    \"\"\""},{"line_number":487,"context_line":"    Get suffix hashes directly from the object server."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_f21f1307","line":484,"updated":"2016-11-22 08:34:19.000000000","message":"For other reviewers: have a look at my comments on patchset #7 in https://review.openstack.org/#/c/391617/7/swift/obj/replicator.py - this change is basically keeping the current behavior.","commit_id":"dd20585d224c7ec09db41794108e305f8c8e7fc6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef72df1642c374a949cb6320b8e9de71657639b3","unresolved":false,"context_lines":[{"line_number":481,"context_line":"              \u0027Object\u0027, conn_timeout, response_timeout)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"def direct_get_suffix_hashes(node, part, suffixes, timeout\u003d60,"},{"line_number":485,"context_line":"                             headers\u003dNone):"},{"line_number":486,"context_line":"    \"\"\""},{"line_number":487,"context_line":"    Get suffix hashes directly from the object server."}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_3469738c","line":484,"in_reply_to":"7a77a97e_f21f1307","updated":"2016-11-22 12:13:16.000000000","message":"ok. this func is currently only called from a probe test [1] so changing the timeout behaviour is fine IMO.\n\n[1] https://github.com/openstack/swift/blob/300d388825c228ae1f51cdb8abcdf4c76ec24637/test/probe/test_object_metadata_replication.py#L172-L172","commit_id":"dd20585d224c7ec09db41794108e305f8c8e7fc6"}],"swift/obj/replicator.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bf0406fd8c04a26c77ab31ba0dc6e9164e3617eb","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            elif not suffixes:"},{"line_number":352,"context_line":"                self.delete_partition(job[\u0027path\u0027])"},{"line_number":353,"context_line":"                handoff_partition_deleted \u003d True"},{"line_number":354,"context_line":"        except DirectClientException as e:"},{"line_number":355,"context_line":"            failure_devs_info.add((node[\u0027replication_ip\u0027],"},{"line_number":356,"context_line":"                                   node[\u0027device\u0027]))"},{"line_number":357,"context_line":"            if e.http_status \u003d\u003d HTTP_INSUFFICIENT_STORAGE:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_14e7deb0","line":354,"updated":"2016-10-31 23:29:45.000000000","message":"Interesting... so this case wasn\u0027t getting handled before?","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"187a2cc1423c469e0705641ad7be0eb254497c51","unresolved":false,"context_lines":[{"line_number":351,"context_line":"            elif not suffixes:"},{"line_number":352,"context_line":"                self.delete_partition(job[\u0027path\u0027])"},{"line_number":353,"context_line":"                handoff_partition_deleted \u003d True"},{"line_number":354,"context_line":"        except DirectClientException as e:"},{"line_number":355,"context_line":"            failure_devs_info.add((node[\u0027replication_ip\u0027],"},{"line_number":356,"context_line":"                                   node[\u0027device\u0027]))"},{"line_number":357,"context_line":"            if e.http_status \u003d\u003d HTTP_INSUFFICIENT_STORAGE:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_9710a550","line":354,"in_reply_to":"ba5da102_14e7deb0","updated":"2016-11-07 19:29:04.000000000","message":"no, error was ignored.","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4fae4fb846b37e8e80c69e05de5779d0aaf9efca","unresolved":false,"context_lines":[{"line_number":303,"context_line":"                        direct_get_suffix_hashes("},{"line_number":304,"context_line":"                            node,"},{"line_number":305,"context_line":"                            job[\u0027partition\u0027], suffixes,"},{"line_number":306,"context_line":"                            response_timeout\u003dself.http_timeout,"},{"line_number":307,"context_line":"                            headers\u003dheaders)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"                        if node[\u0027region\u0027] !\u003d job[\u0027region\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_4522f402","line":306,"updated":"2016-11-21 09:09:14.000000000","message":"This changes the behavior quite a bit.\n\nBefore this change there was a default timeout of 60 seconds for the whole request - that is connection setup and reading the response read. It didn\u0027t matter which part was slow; might be the connection setup that took 50 seconds and reading the response took only 5 seconds, or vice versa.\n\nWith this change applied, the connection setup time is hard limited to 5 seconds, and the response read itself is 60 seconds.\n\nThis might create problems with slow peers, and operators can\u0027t increase the 5 second conn_timeout setting. This sounds like possible trouble to me.\n\nI would prefer to keep the existing behavior, and because direct_get_suffix_hashes is only used in obj/replicator.py it should be fine to refactor that method a bit.","commit_id":"2f5e956e6be52791809a21dcee17f4e0f7eea5f9"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4fae4fb846b37e8e80c69e05de5779d0aaf9efca","unresolved":false,"context_lines":[{"line_number":440,"context_line":"                    remote_hash \u003d direct_get_suffix_hashes("},{"line_number":441,"context_line":"                        node,"},{"line_number":442,"context_line":"                        job[\u0027partition\u0027], None,"},{"line_number":443,"context_line":"                        response_timeout\u003dself.http_timeout, headers\u003dheaders)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"                    suffixes \u003d [suffix for suffix in local_hash if"},{"line_number":446,"context_line":"                                local_hash[suffix] !\u003d"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_e5e6a0af","line":443,"updated":"2016-11-21 09:09:14.000000000","message":"Same as above regarding the timeouts.","commit_id":"2f5e956e6be52791809a21dcee17f4e0f7eea5f9"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4fae4fb846b37e8e80c69e05de5779d0aaf9efca","unresolved":false,"context_lines":[{"line_number":460,"context_line":"                    self.stats[\u0027rsync\u0027] +\u003d 1"},{"line_number":461,"context_line":"                    success, _junk \u003d self.sync(node, job, suffixes)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"                    direct_get_suffix_hashes("},{"line_number":464,"context_line":"                        node,"},{"line_number":465,"context_line":"                        job[\u0027partition\u0027], suffixes,"},{"line_number":466,"context_line":"                        response_timeout\u003dself.http_timeout,"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_85f88c4b","line":463,"updated":"2016-11-21 09:09:14.000000000","message":"And another time.","commit_id":"2f5e956e6be52791809a21dcee17f4e0f7eea5f9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef72df1642c374a949cb6320b8e9de71657639b3","unresolved":false,"context_lines":[{"line_number":304,"context_line":"                            node,"},{"line_number":305,"context_line":"                            job[\u0027partition\u0027], suffixes,"},{"line_number":306,"context_line":"                            timeout\u003dself.http_timeout,"},{"line_number":307,"context_line":"                            headers\u003dheaders)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"                        if node[\u0027region\u0027] !\u003d job[\u0027region\u0027]:"},{"line_number":310,"context_line":"                            synced_remote_regions[node[\u0027region\u0027]] \u003d viewkeys("}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_81fda43d","line":307,"updated":"2016-11-22 12:13:16.000000000","message":"before we didn\u0027t care what the reponse code was of this REPLICATE, now if it is not 2xx we skip to the exception handler, which means we don\u0027t delete handoff objs.\n\nIf I wrap this in a try/except DirectClientException to suppress any exception (i.e. revert to old behaviour), then I see no unit tests failing :/ But the unit tests always mock http connection to return 200, so it seems we have no coverage for the exception case.","commit_id":"dd20585d224c7ec09db41794108e305f8c8e7fc6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef72df1642c374a949cb6320b8e9de71657639b3","unresolved":false,"context_lines":[{"line_number":440,"context_line":"                    remote_hash \u003d direct_get_suffix_hashes("},{"line_number":441,"context_line":"                        node,"},{"line_number":442,"context_line":"                        job[\u0027partition\u0027], None,"},{"line_number":443,"context_line":"                        timeout\u003dself.http_timeout, headers\u003dheaders)"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"                    suffixes \u003d [suffix for suffix in local_hash if"},{"line_number":446,"context_line":"                                local_hash[suffix] !\u003d"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_8191249d","line":443,"updated":"2016-11-22 12:13:16.000000000","message":"ok. before we handled bad responses here and then did continue\u0027d with loop, now we get an exception, handle at end of clause and continue with loop","commit_id":"dd20585d224c7ec09db41794108e305f8c8e7fc6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef72df1642c374a949cb6320b8e9de71657639b3","unresolved":false,"context_lines":[{"line_number":464,"context_line":"                        node,"},{"line_number":465,"context_line":"                        job[\u0027partition\u0027], suffixes,"},{"line_number":466,"context_line":"                        timeout\u003dself.http_timeout,"},{"line_number":467,"context_line":"                        headers\u003dheaders)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"                    if not success:"},{"line_number":470,"context_line":"                        failure_devs_info.add((node[\u0027replication_ip\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_e1b578d0","line":467,"updated":"2016-11-22 12:13:16.000000000","message":"hmmm, I\u0027m concerned about how this change impacts remote replication in particular...\n\nbefore, if resp !\u003d 2xx, we would proceed through lines 475-482, now we skip them and go to the exception handler, which means we do not update synced_remote_regions.\n\nSo, we successfully sync\u0027d object to remote region, but the follow-up REPLICATE failed (remote node may not have updated its hashes pickles) - do we really want to change behaviour so that now we will sync the objects again to another node in the remote region? I\u0027m not sure how that helps - the second REPLICATE to the second node in the remote region could also fail, so there\u0027s no guaranteed benefit to syncing to another node.","commit_id":"dd20585d224c7ec09db41794108e305f8c8e7fc6"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ef72df1642c374a949cb6320b8e9de71657639b3","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                                          {\u0027resp\u0027: e.http_status,"},{"line_number":489,"context_line":"                                           \u0027ip\u0027: node[\u0027replication_ip\u0027],"},{"line_number":490,"context_line":"                                           \u0027port\u0027: node[\u0027replication_port\u0027]})"},{"line_number":491,"context_line":"                except (Exception, Timeout):"},{"line_number":492,"context_line":"                    failure_devs_info.add((node[\u0027replication_ip\u0027],"},{"line_number":493,"context_line":"                                           node[\u0027device\u0027]))"},{"line_number":494,"context_line":"                    self.logger.exception(_(\"Error syncing with node: %s\") %"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_a1e7003f","line":491,"updated":"2016-11-22 12:13:16.000000000","message":"ok. Timeouts on REPLICATE still get handled here.","commit_id":"dd20585d224c7ec09db41794108e305f8c8e7fc6"}],"test/unit/obj/test_replicator.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bf0406fd8c04a26c77ab31ba0dc6e9164e3617eb","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        replicator \u003d object_replicator.ObjectReplicator(conf,"},{"line_number":291,"context_line":"                                                        logger\u003dself.logger)"},{"line_number":292,"context_line":"        was_connector \u003d direct_client.http_connect"},{"line_number":293,"context_line":"        direct_client.http_connect \u003d mock_http_connect(200)"},{"line_number":294,"context_line":"        cur_part \u003d \u00270\u0027"},{"line_number":295,"context_line":"        df \u003d self.df_mgr.get_diskfile(\u0027sda\u0027, cur_part, \u0027a\u0027, \u0027c\u0027, \u0027o\u0027,"},{"line_number":296,"context_line":"                                      policy\u003dPOLICIES[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_349062ec","line":293,"updated":"2016-10-31 23:29:45.000000000","message":"Since we\u0027re touching this anyway... mind changing this to use mock.patch? Currently if any part of this test fails, it will invalidate the results of any other test that touches direct_client.http_connect","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"187a2cc1423c469e0705641ad7be0eb254497c51","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        replicator \u003d object_replicator.ObjectReplicator(conf,"},{"line_number":291,"context_line":"                                                        logger\u003dself.logger)"},{"line_number":292,"context_line":"        was_connector \u003d direct_client.http_connect"},{"line_number":293,"context_line":"        direct_client.http_connect \u003d mock_http_connect(200)"},{"line_number":294,"context_line":"        cur_part \u003d \u00270\u0027"},{"line_number":295,"context_line":"        df \u003d self.df_mgr.get_diskfile(\u0027sda\u0027, cur_part, \u0027a\u0027, \u0027c\u0027, \u0027o\u0027,"},{"line_number":296,"context_line":"                                      policy\u003dPOLICIES[0])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_17cc9534","line":293,"in_reply_to":"ba5da102_349062ec","updated":"2016-11-07 19:29:04.000000000","message":"Done","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bf0406fd8c04a26c77ab31ba0dc6e9164e3617eb","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        replicator \u003d object_replicator.ObjectReplicator(conf,"},{"line_number":328,"context_line":"                                                        logger\u003dself.logger)"},{"line_number":329,"context_line":"        was_connector \u003d direct_client.http_connect"},{"line_number":330,"context_line":"        direct_client.http_connect \u003d mock_http_connect(200)"},{"line_number":331,"context_line":"        cur_part \u003d \u00270\u0027"},{"line_number":332,"context_line":"        df \u003d self.df_mgr.get_diskfile(\u0027sda\u0027, cur_part, \u0027a\u0027, \u0027c\u0027, \u0027o\u0027,"},{"line_number":333,"context_line":"                                      policy\u003dPOLICIES[1])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_14ac3e33","line":330,"updated":"2016-10-31 23:29:45.000000000","message":"... and here ...","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"187a2cc1423c469e0705641ad7be0eb254497c51","unresolved":false,"context_lines":[{"line_number":327,"context_line":"        replicator \u003d object_replicator.ObjectReplicator(conf,"},{"line_number":328,"context_line":"                                                        logger\u003dself.logger)"},{"line_number":329,"context_line":"        was_connector \u003d direct_client.http_connect"},{"line_number":330,"context_line":"        direct_client.http_connect \u003d mock_http_connect(200)"},{"line_number":331,"context_line":"        cur_part \u003d \u00270\u0027"},{"line_number":332,"context_line":"        df \u003d self.df_mgr.get_diskfile(\u0027sda\u0027, cur_part, \u0027a\u0027, \u0027c\u0027, \u0027o\u0027,"},{"line_number":333,"context_line":"                                      policy\u003dPOLICIES[1])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_d74bfdae","line":330,"in_reply_to":"ba5da102_14ac3e33","updated":"2016-11-07 19:29:04.000000000","message":"Done","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bf0406fd8c04a26c77ab31ba0dc6e9164e3617eb","unresolved":false,"context_lines":[{"line_number":1574,"context_line":"        replicator \u003d object_replicator.ObjectReplicator(conf)"},{"line_number":1575,"context_line":"        was_connector \u003d direct_client.http_connect"},{"line_number":1576,"context_line":"        try:"},{"line_number":1577,"context_line":"            direct_client.http_connect \u003d mock_http_connect(200)"},{"line_number":1578,"context_line":"            # Write some files into \u00271\u0027 and run replicate- they should be moved"},{"line_number":1579,"context_line":"            # to the other partitions and then node should get deleted."},{"line_number":1580,"context_line":"            cur_part \u003d \u00271\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_34a78250","line":1577,"updated":"2016-10-31 23:29:45.000000000","message":"This one\u0027s less bad, but may as well be consistent.","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"187a2cc1423c469e0705641ad7be0eb254497c51","unresolved":false,"context_lines":[{"line_number":1574,"context_line":"        replicator \u003d object_replicator.ObjectReplicator(conf)"},{"line_number":1575,"context_line":"        was_connector \u003d direct_client.http_connect"},{"line_number":1576,"context_line":"        try:"},{"line_number":1577,"context_line":"            direct_client.http_connect \u003d mock_http_connect(200)"},{"line_number":1578,"context_line":"            # Write some files into \u00271\u0027 and run replicate- they should be moved"},{"line_number":1579,"context_line":"            # to the other partitions and then node should get deleted."},{"line_number":1580,"context_line":"            cur_part \u003d \u00271\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_7754f153","line":1577,"in_reply_to":"ba5da102_34a78250","updated":"2016-11-07 19:29:04.000000000","message":"Done","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"bf0406fd8c04a26c77ab31ba0dc6e9164e3617eb","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                    bind_ips\u003d_ips()[0],"},{"line_number":1620,"context_line":"                    mount_check\u003d\u0027false\u0027, timeout\u003d\u0027300\u0027, stats_interval\u003d\u00271\u0027)"},{"line_number":1621,"context_line":"        replicator \u003d object_replicator.ObjectReplicator(conf)"},{"line_number":1622,"context_line":"        was_connector \u003d direct_client.http_connect"},{"line_number":1623,"context_line":"        was_get_hashes \u003d object_replicator.DiskFileManager._get_hashes"},{"line_number":1624,"context_line":"        was_execute \u003d tpool.execute"},{"line_number":1625,"context_line":"        self.get_hash_count \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba5da102_b4bab26c","line":1622,"updated":"2016-10-31 23:29:45.000000000","message":"... and here ...","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":16896,"name":"Ondřej Nový","email":"novy@ondrej.org","username":"onovy"},"change_message_id":"187a2cc1423c469e0705641ad7be0eb254497c51","unresolved":false,"context_lines":[{"line_number":1619,"context_line":"                    bind_ips\u003d_ips()[0],"},{"line_number":1620,"context_line":"                    mount_check\u003d\u0027false\u0027, timeout\u003d\u0027300\u0027, stats_interval\u003d\u00271\u0027)"},{"line_number":1621,"context_line":"        replicator \u003d object_replicator.ObjectReplicator(conf)"},{"line_number":1622,"context_line":"        was_connector \u003d direct_client.http_connect"},{"line_number":1623,"context_line":"        was_get_hashes \u003d object_replicator.DiskFileManager._get_hashes"},{"line_number":1624,"context_line":"        was_execute \u003d tpool.execute"},{"line_number":1625,"context_line":"        self.get_hash_count \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a629dbe_575fed71","line":1622,"in_reply_to":"ba5da102_b4bab26c","updated":"2016-11-07 19:29:04.000000000","message":"Done","commit_id":"c00d86a80ebc55fbe38eb960e15a11d319ce8683"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4fae4fb846b37e8e80c69e05de5779d0aaf9efca","unresolved":false,"context_lines":[{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":"    def test_run_once_recover_from_timeout(self):"},{"line_number":1614,"context_line":"        def fake_get_hashes(*args, **kwargs):"},{"line_number":1615,"context_line":"                self.get_hash_count +\u003d 1"},{"line_number":1616,"context_line":"                if self.get_hash_count \u003d\u003d 3:"},{"line_number":1617,"context_line":"                    # raise timeout on last call to get hashes"},{"line_number":1618,"context_line":"                    raise Timeout()"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a77a97e_85c40c60","line":1615,"updated":"2016-11-21 09:09:14.000000000","message":"minor nit: intendation should be only 4 spaces?","commit_id":"2f5e956e6be52791809a21dcee17f4e0f7eea5f9"}]}
