)]}'
{"doc/source/admin_guide.rst":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"4a24c8f7d57b5feaf0686f1e2036038ca9e80dcf","unresolved":false,"context_lines":[{"line_number":756,"context_line":"`object-server.PUT.timeouts`             Count of object PUTs which exceeded max_upload_time."},{"line_number":757,"context_line":"`object-server.PUT.timing`               Timing data for each PUT request not resulting in an"},{"line_number":758,"context_line":"                                         error."},{"line_number":759,"context_line":"`object-server.PUT.\u003cdevice\u003e.timing`      Timing data per KB transfered (ms/KB) for each PUT "},{"line_number":760,"context_line":"                                         request on each device. Monitoring problematic "},{"line_number":761,"context_line":"                                         devices, higher is bad. "},{"line_number":762,"context_line":"`object-server.GET.errors.timing`        Timing data for GET request errors: bad request,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"AAAAM3%2F%2Bjkc%3D","line":759,"updated":"2013-02-27 15:59:25.000000000","message":"Could you change the \"KB\" to \"kB\".  The former is more ambiguous as someone might think you meant \"KiB\" instead of \"kB\" (see http://en.wikipedia.org/wiki/Kibibyte).  Yes, I\u0027m one of those kibi-pedantic people, sorry.\n\nIn this context, the bytes should definitely be powers-of-10, so the code is correct.","commit_id":"54e788a4d12456a77cf1bb9eb8a2d1d1abc6bbca"},{"author":{"_account_id":6655,"name":"Jian Zhang","email":"jian.zhang@intel.com","username":"jian-zhang"},"change_message_id":"31f1b56e240e0eeaa32eb2e0bc0bab91fe0d2a02","unresolved":false,"context_lines":[{"line_number":756,"context_line":"`object-server.PUT.timeouts`             Count of object PUTs which exceeded max_upload_time."},{"line_number":757,"context_line":"`object-server.PUT.timing`               Timing data for each PUT request not resulting in an"},{"line_number":758,"context_line":"                                         error."},{"line_number":759,"context_line":"`object-server.PUT.\u003cdevice\u003e.timing`      Timing data per KB transfered (ms/KB) for each PUT "},{"line_number":760,"context_line":"                                         request on each device. Monitoring problematic "},{"line_number":761,"context_line":"                                         devices, higher is bad. "},{"line_number":762,"context_line":"`object-server.GET.errors.timing`        Timing data for GET request errors: bad request,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"AAAANH%2F%2F%2Fns%3D","line":759,"in_reply_to":"AAAAM3%2F%2Bjkc%3D","updated":"2013-02-28 03:10:03.000000000","message":"Done.\nThx","commit_id":"54e788a4d12456a77cf1bb9eb8a2d1d1abc6bbca"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"4a24c8f7d57b5feaf0686f1e2036038ca9e80dcf","unresolved":false,"context_lines":[{"line_number":757,"context_line":"`object-server.PUT.timing`               Timing data for each PUT request not resulting in an"},{"line_number":758,"context_line":"                                         error."},{"line_number":759,"context_line":"`object-server.PUT.\u003cdevice\u003e.timing`      Timing data per KB transfered (ms/KB) for each PUT "},{"line_number":760,"context_line":"                                         request on each device. Monitoring problematic "},{"line_number":761,"context_line":"                                         devices, higher is bad. "},{"line_number":762,"context_line":"`object-server.GET.errors.timing`        Timing data for GET request errors: bad request,"},{"line_number":763,"context_line":"                                         not mounted, header timestamps before the epoch,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"AAAAM3%2F%2Bjis%3D","line":760,"updated":"2013-02-27 15:59:25.000000000","message":"Might be worth mentioning that zero-byte files are excluded from this metric (for obvious reasons).  Like:\n\n  ...for each non-zero-byte PUT request on each device.","commit_id":"54e788a4d12456a77cf1bb9eb8a2d1d1abc6bbca"},{"author":{"_account_id":6655,"name":"Jian Zhang","email":"jian.zhang@intel.com","username":"jian-zhang"},"change_message_id":"31f1b56e240e0eeaa32eb2e0bc0bab91fe0d2a02","unresolved":false,"context_lines":[{"line_number":757,"context_line":"`object-server.PUT.timing`               Timing data for each PUT request not resulting in an"},{"line_number":758,"context_line":"                                         error."},{"line_number":759,"context_line":"`object-server.PUT.\u003cdevice\u003e.timing`      Timing data per KB transfered (ms/KB) for each PUT "},{"line_number":760,"context_line":"                                         request on each device. Monitoring problematic "},{"line_number":761,"context_line":"                                         devices, higher is bad. "},{"line_number":762,"context_line":"`object-server.GET.errors.timing`        Timing data for GET request errors: bad request,"},{"line_number":763,"context_line":"                                         not mounted, header timestamps before the epoch,"}],"source_content_type":"text/x-rst","patch_set":8,"id":"AAAANH%2F%2F%2Fno%3D","line":760,"in_reply_to":"AAAAM3%2F%2Bjis%3D","updated":"2013-02-28 03:10:03.000000000","message":"Done.\nThx","commit_id":"54e788a4d12456a77cf1bb9eb8a2d1d1abc6bbca"}],"swift/common/utils.py":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"4a24c8f7d57b5feaf0686f1e2036038ca9e80dcf","unresolved":false,"context_lines":[{"line_number":509,"context_line":"                           sample_rate)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def transfer_rate(self, metric, orig_time, byte_xfer, sample_rate\u003dNone):"},{"line_number":512,"context_line":"        return self.timing(metric,"},{"line_number":513,"context_line":"                           (time.time() - orig_time) * 1000 / byte_xfer * 1000,"},{"line_number":514,"context_line":"                           sample_rate)"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2BjjY%3D","line":512,"updated":"2013-02-27 15:59:25.000000000","message":"Can you make this robust to byte_xfer \u003d\u003d 0?  Just returning in that case should be fine.","commit_id":"54e788a4d12456a77cf1bb9eb8a2d1d1abc6bbca"},{"author":{"_account_id":6655,"name":"Jian Zhang","email":"jian.zhang@intel.com","username":"jian-zhang"},"change_message_id":"31f1b56e240e0eeaa32eb2e0bc0bab91fe0d2a02","unresolved":false,"context_lines":[{"line_number":509,"context_line":"                           sample_rate)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def transfer_rate(self, metric, orig_time, byte_xfer, sample_rate\u003dNone):"},{"line_number":512,"context_line":"        return self.timing(metric,"},{"line_number":513,"context_line":"                           (time.time() - orig_time) * 1000 / byte_xfer * 1000,"},{"line_number":514,"context_line":"                           sample_rate)"},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAANH%2F%2F%2Fnk%3D","line":512,"in_reply_to":"AAAAM3%2F%2BjjY%3D","updated":"2013-02-28 03:10:03.000000000","message":"Done","commit_id":"54e788a4d12456a77cf1bb9eb8a2d1d1abc6bbca"}],"swift/obj/server.py":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"b4945d227fef98e9aa8f4d810a86d51972fb046a","unresolved":false,"context_lines":[{"line_number":708,"context_line":"                 \u0027x-trans-id\u0027: request.headers.get(\u0027x-trans-id\u0027, \u0027-\u0027)},"},{"line_number":709,"context_line":"                device)"},{"line_number":710,"context_line":"        resp \u003d HTTPCreated(request\u003drequest, etag\u003detag)"},{"line_number":711,"context_line":"        self.logger.timing_since(\u0027PUT.\u0027 + device, start_time)"},{"line_number":712,"context_line":"        return resp"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    @public"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BoZM%3D","line":711,"updated":"2013-02-25 04:57:39.000000000","message":"Can you make the metric name:\n\n  \u0027PUT.\u0027 + device + \u0027.timing\u0027\n\nto follow the convention of timing metrics ending with \".timing\"","commit_id":"93f5bf655c2319e38ad37ec01a58463651ac4b23"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"99ab8fac6c254f9a0002d472de5b48e1bae9f65d","unresolved":false,"context_lines":[{"line_number":711,"context_line":"        if upload_size:"},{"line_number":712,"context_line":"            transfer_rate \u003d (time.time() - start_time) * 1000 / upload_size"},{"line_number":713,"context_line":"            self.logger.timing_since("},{"line_number":714,"context_line":"                \u0027PUT.\u0027 + device + \u0027.timing\u0027, transfer_rate)"},{"line_number":715,"context_line":"        return resp"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":"    @public"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAM3%2F%2Bk28%3D","line":714,"updated":"2013-02-26 22:58:01.000000000","message":"You\u0027re feeding the transfer rate into .timing_since(); this is almost certainly not what you want to do.\n\nThis call is equivalent to:\n\n    self.logger.timing(\u0027PUT.\u0027 + device + \u0027.timing\u0027, time.time() - transfer_rate)\n\nYou can see there that this code is subtracting a transfer rate from the current time, which does not make sense.","commit_id":"660f83709cf86a640cdd4795fb436c7c27b3b915"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"d2f2c945c4f25fe945e9306df2b459fa1e397318","unresolved":false,"context_lines":[{"line_number":615,"context_line":"    @timing_stats()"},{"line_number":616,"context_line":"    def PUT(self, request):"},{"line_number":617,"context_line":"        \"\"\"Handle HTTP PUT requests for the Swift Object Server.\"\"\""},{"line_number":618,"context_line":"        start_time \u003d time.time()"},{"line_number":619,"context_line":"        try:"},{"line_number":620,"context_line":"            device, partition, account, container, obj \u003d \\"},{"line_number":621,"context_line":"                split_path(unquote(request.path), 5, 5, True)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2Bkc0%3D","line":618,"updated":"2013-02-27 02:22:07.000000000","message":"If we start the timer here, won\u0027t we potentially time a slow client as well?\n\nShould be timing the individual write system calls and fsync calls?\n\nSeems like we might want to consider refactoring DiskFile to hide this from PUT, where PUT queries the DiskFile object for the information at the end.\n\nPerhaps I am not understanding how this is supposed to work, though...","commit_id":"a3c700596c1c908bea70bca3dd2535f0fcb51ab0"},{"author":{"_account_id":6655,"name":"Jian Zhang","email":"jian.zhang@intel.com","username":"jian-zhang"},"change_message_id":"da8a3c9807c5e417d45ec61df717468b74aa0469","unresolved":false,"context_lines":[{"line_number":615,"context_line":"    @timing_stats()"},{"line_number":616,"context_line":"    def PUT(self, request):"},{"line_number":617,"context_line":"        \"\"\"Handle HTTP PUT requests for the Swift Object Server.\"\"\""},{"line_number":618,"context_line":"        start_time \u003d time.time()"},{"line_number":619,"context_line":"        try:"},{"line_number":620,"context_line":"            device, partition, account, container, obj \u003d \\"},{"line_number":621,"context_line":"                split_path(unquote(request.path), 5, 5, True)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAM3%2F%2Bkb4%3D","line":618,"in_reply_to":"AAAAM3%2F%2Bkc0%3D","updated":"2013-02-27 03:29:01.000000000","message":"Make sense, this is more accurate, althought rest part only cosumes little time.","commit_id":"a3c700596c1c908bea70bca3dd2535f0fcb51ab0"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"ba4a0f48d2b7a50ae456becdb6cb6b67c076b261","unresolved":false,"context_lines":[{"line_number":635,"context_line":"        if new_delete_at and new_delete_at \u003c time.time():"},{"line_number":636,"context_line":"            return HTTPBadRequest(body\u003d\u0027X-Delete-At in past\u0027, request\u003drequest,"},{"line_number":637,"context_line":"                                  content_type\u003d\u0027text/plain\u0027)"},{"line_number":638,"context_line":"        start_time \u003d time.time()"},{"line_number":639,"context_line":"        file \u003d DiskFile(self.devices, device, partition, account, container,"},{"line_number":640,"context_line":"                        obj, self.logger, disk_chunk_size\u003dself.disk_chunk_size)"},{"line_number":641,"context_line":"        orig_timestamp \u003d file.metadata.get(\u0027X-Timestamp\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAANH%2F%2F%2Fkk%3D","line":638,"updated":"2013-02-28 04:00:57.000000000","message":"Seems like a slow reader will still skew these results. Timing the write and fsync calls directly should be sufficient to overcome that, no?","commit_id":"c8dd5e9b81a24d070d16309d03c7ea252f8c293d"}]}
