)]}'
{"swift/obj/updater.py":[{"author":{"_account_id":15090,"name":"Elvis Teixeira","email":"elvis.teixeira@lsbd.ufc.br","username":"ElvisTeixeira"},"change_message_id":"63890326d866408ebee42084f53abce12fb14049","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            with Timeout(self.node_timeout):"},{"line_number":267,"context_line":"                resp \u003d conn.getresponse()"},{"line_number":268,"context_line":"                resp.read()"},{"line_number":269,"context_line":"                success \u003d (is_success(resp.status) or"},{"line_number":270,"context_line":"                           resp.status \u003d\u003d HTTP_NOT_FOUND)"},{"line_number":271,"context_line":"                return (success, node[\u0027id\u0027])"},{"line_number":272,"context_line":"        except (Exception, Timeout):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_4b6460b8","side":"PARENT","line":269,"updated":"2015-02-26 17:02:46.000000000","message":"Have you checked if 404 doesn\u0027t mean the container was deleted? I have no expertise about tombstone files and the like but right now it looks inadequate for me. Look for the answer and tell us, I\u0027ll wait before +1.","commit_id":"308c6a5e73ad8f9c1c669d7406b7f55bf46e1af0"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"9d47cca6de8ae2a61bcb837f8728204975d98685","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            with Timeout(self.node_timeout):"},{"line_number":267,"context_line":"                resp \u003d conn.getresponse()"},{"line_number":268,"context_line":"                resp.read()"},{"line_number":269,"context_line":"                success \u003d (is_success(resp.status) or"},{"line_number":270,"context_line":"                           resp.status \u003d\u003d HTTP_NOT_FOUND)"},{"line_number":271,"context_line":"                return (success, node[\u0027id\u0027])"},{"line_number":272,"context_line":"        except (Exception, Timeout):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba7be1f8_69071082","side":"PARENT","line":269,"in_reply_to":"ba7be1f8_4b6460b8","updated":"2015-03-02 01:32:43.000000000","message":"Here, 404 doesn\u0027t mean the container is deleted but It means the container is missing. \n\nIf the container db exists and is marked as deleted, container-server returns 201.","commit_id":"308c6a5e73ad8f9c1c669d7406b7f55bf46e1af0"},{"author":{"_account_id":16233,"name":"Mauricio Lima","email":"mauriciolimab@gmail.com","username":"limamauricio"},"change_message_id":"af61bb21586b68fba9ab83b802959aa404ce7fc3","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        except (Exception, Timeout):"},{"line_number":271,"context_line":"            self.logger.exception(_(\u0027ERROR with remote server \u0027"},{"line_number":272,"context_line":"                                    \u0027%(ip)s:%(port)s/%(device)s\u0027), node)"},{"line_number":273,"context_line":"        return HTTP_INTERNAL_SERVER_ERROR, node[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a0c5dc1_0c488e86","line":273,"updated":"2015-05-13 14:27:44.000000000","message":"Are not you checking which HTTP status is returned? Why? In cases of error 404 and 201 is returned an internal error?","commit_id":"cfd30acde1ac39d268e1881b891009120b1cd8bb"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"81661ae29e76b04a91f9d4fb0ffeb8ee84e8b6ee","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        except (Exception, Timeout):"},{"line_number":271,"context_line":"            self.logger.exception(_(\u0027ERROR with remote server \u0027"},{"line_number":272,"context_line":"                                    \u0027%(ip)s:%(port)s/%(device)s\u0027), node)"},{"line_number":273,"context_line":"        return HTTP_INTERNAL_SERVER_ERROR, node[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_11ecf98d","line":273,"in_reply_to":"9a0c5dc1_0c488e86","updated":"2015-05-18 22:29:25.000000000","message":"Done","commit_id":"cfd30acde1ac39d268e1881b891009120b1cd8bb"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"ac3d46476d9a12cf4aafe56485fd3c5f06ba2e77","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        except (Exception, Timeout):"},{"line_number":271,"context_line":"            self.logger.exception(_(\u0027ERROR with remote server \u0027"},{"line_number":272,"context_line":"                                    \u0027%(ip)s:%(port)s/%(device)s\u0027), node)"},{"line_number":273,"context_line":"        return HTTP_INTERNAL_SERVER_ERROR, node[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_46108e4e","line":273,"in_reply_to":"9a0c5dc1_0c488e86","updated":"2015-05-17 11:45:06.000000000","message":"It doesn\u0027t return 201 here, but at line 269.\nI think I should check error 404, so I\u0027m going to add some returning.","commit_id":"cfd30acde1ac39d268e1881b891009120b1cd8bb"},{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"470b872ff989742461c18759bac717129e1e975b","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            with Timeout(self.node_timeout):"},{"line_number":267,"context_line":"                resp \u003d conn.getresponse()"},{"line_number":268,"context_line":"                resp.read()"},{"line_number":269,"context_line":"                if(is_success(resp.status)):"},{"line_number":270,"context_line":"                    return True, node[\u0027id\u0027]"},{"line_number":271,"context_line":"                else:"},{"line_number":272,"context_line":"                    self.logger.error("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_a41ee55c","line":269,"updated":"2015-05-20 01:32:27.000000000","message":"Don\u0027t need those extra parens here:\n\n  if is_success(resp.status):","commit_id":"28e31b7dd09b80f898d207e9051c6cffeb2ff867"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"866ce61560815ae14cb95fbd213fec56f1e2b738","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            with Timeout(self.node_timeout):"},{"line_number":267,"context_line":"                resp \u003d conn.getresponse()"},{"line_number":268,"context_line":"                resp.read()"},{"line_number":269,"context_line":"                if(is_success(resp.status)):"},{"line_number":270,"context_line":"                    return True, node[\u0027id\u0027]"},{"line_number":271,"context_line":"                else:"},{"line_number":272,"context_line":"                    self.logger.error("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a016987_951e755d","line":269,"in_reply_to":"7a016987_a41ee55c","updated":"2015-05-20 07:09:39.000000000","message":"Done","commit_id":"28e31b7dd09b80f898d207e9051c6cffeb2ff867"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0cc8112431147448dd14793c0ca1e44a265271fc","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                        {\u0027status\u0027: resp.status,"},{"line_number":279,"context_line":"                         \u0027ip\u0027: node[\u0027ip\u0027], \u0027port\u0027: node[\u0027port\u0027],"},{"line_number":280,"context_line":"                         \u0027device\u0027: node[\u0027device\u0027]})"},{"line_number":281,"context_line":"                    return resp.status, node[\u0027id\u0027]"},{"line_number":282,"context_line":"        except (Exception, Timeout):"},{"line_number":283,"context_line":"            self.logger.exception(_(\u0027ERROR with remote server \u0027"},{"line_number":284,"context_line":"                                    \u0027%(ip)s:%(port)s/%(device)s\u0027), node)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a98d1f4_30b87be5","line":281,"range":{"start_line":281,"start_character":27,"end_line":281,"end_character":38},"updated":"2016-09-29 17:50:40.000000000","message":"We should not return status here. DONE.","commit_id":"bcf059c6e109ebb2822bbf746c13fafd4c193764"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7ea9d8d426b72bd7807c47366d8271c77f82cc72","unresolved":false,"context_lines":[{"line_number":245,"context_line":"            self.failures +\u003d 1"},{"line_number":246,"context_line":"            self.logger.increment(\u0027failures\u0027)"},{"line_number":247,"context_line":"            self.logger.debug(\u0027Update failed for %(obj)s %(path)s\u0027,"},{"line_number":248,"context_line":"                              {\u0027obj\u0027: obj, \u0027path\u0027: update_path})"},{"line_number":249,"context_line":"            if new_successes:"},{"line_number":250,"context_line":"                update[\u0027successes\u0027] \u003d successes"},{"line_number":251,"context_line":"                write_pickle(update, update_path, os.path.join("}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_9020b74b","line":248,"updated":"2016-12-01 15:28:42.000000000","message":"maybe we could update this log line to have more info about the individual requests... like when the proxy says:\n\n    Account GET returning 503 for (404, 503, 503)\n\nor whatever it does...","commit_id":"ede42c77f1e04ab571c21b1d6342e662c7eced53"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7ea9d8d426b72bd7807c47366d8271c77f82cc72","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                        _(\u0027Error code %(status)d is returned from remote \u0027"},{"line_number":275,"context_line":"                          \u0027server %(ip)s: %(port)s / %(device)s\u0027),"},{"line_number":276,"context_line":"                        {\u0027status\u0027: resp.status, \u0027ip\u0027: node[\u0027ip\u0027],"},{"line_number":277,"context_line":"                         \u0027port\u0027: node[\u0027port\u0027], \u0027device\u0027: node[\u0027device\u0027]})"},{"line_number":278,"context_line":"                return (success, node[\u0027id\u0027])"},{"line_number":279,"context_line":"        except (Exception, Timeout):"},{"line_number":280,"context_line":"            self.logger.exception(_(\u0027ERROR with remote server \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_30d52343","line":277,"updated":"2016-12-01 15:28:42.000000000","message":"I\u0027d probably like to see these at debug or warning maybe - but I can live with this\n\n\tDec  1 15:04:28 saio object-6010: Error code 404 is returned from remote server 127.0.0.1: 6021 / sdb2\n\tDec  1 15:04:28 saio object-6010: Error code 404 is returned from remote server 127.0.0.1: 6041 / sdb4\n\tDec  1 15:04:28 saio object-6010: Error code 404 is returned from remote server 127.0.0.1: 6031 / sdb3\n\tDec  1 15:04:28 saio object-6010: Update failed for /AUTH_test/container-4c9bc5b6-aa9e-433b-adbf-69de9e97e0e3/object-bfac00a6-0cc2-4737-9e3d-c483457e00ed /srv/node1/sdb1/async_pending/245/7e5368d3b6ea7bd9e9a1623b7e4bf245-1480604666.03663","commit_id":"ede42c77f1e04ab571c21b1d6342e662c7eced53"}],"test/probe/test_object_async_update.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1d427f9c113bc121f7bf4ee0475e9f5d1f610ba","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        # Kill all primary container servers"},{"line_number":74,"context_line":"        for cnode in cnodes:"},{"line_number":75,"context_line":"            kill_server((cnode[\u0027ip\u0027], cnode[\u0027port\u0027]),"},{"line_number":76,"context_line":"                        self.ipport2server, self.pids)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        # Create container, and all of its replicas are placed"},{"line_number":79,"context_line":"        # at handoff devices"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_151c1469","line":76,"range":{"start_line":76,"start_character":42,"end_line":76,"end_character":53},"updated":"2016-07-06 01:45:53.000000000","message":"Needs a rebase. self.pids wasn\u0027t used, and so isn\u0027t defined any more. I think this was part of the crypto work?","commit_id":"bcf059c6e109ebb2822bbf746c13fafd4c193764"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0cc8112431147448dd14793c0ca1e44a265271fc","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        # Kill all primary container servers"},{"line_number":74,"context_line":"        for cnode in cnodes:"},{"line_number":75,"context_line":"            kill_server((cnode[\u0027ip\u0027], cnode[\u0027port\u0027]),"},{"line_number":76,"context_line":"                        self.ipport2server, self.pids)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        # Create container, and all of its replicas are placed"},{"line_number":79,"context_line":"        # at handoff devices"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a98d1f4_f02ff33b","line":76,"range":{"start_line":76,"start_character":42,"end_line":76,"end_character":53},"in_reply_to":"1aa78d24_151c1469","updated":"2016-09-29 17:50:40.000000000","message":"Done","commit_id":"bcf059c6e109ebb2822bbf746c13fafd4c193764"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1d427f9c113bc121f7bf4ee0475e9f5d1f610ba","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        for cnode in cnodes:"},{"line_number":120,"context_line":"            objs \u003d [o[\u0027name\u0027] for o in direct_client.direct_get_container("},{"line_number":121,"context_line":"                    cnode, cpart, self.account, container)[1]]"},{"line_number":122,"context_line":"            self.assertTrue(obj in objs)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class TestUpdateOverrides(ReplProbeTest):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_2f510137","line":122,"updated":"2016-07-06 01:45:53.000000000","message":"nit: could use assertIn.","commit_id":"bcf059c6e109ebb2822bbf746c13fafd4c193764"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0cc8112431147448dd14793c0ca1e44a265271fc","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        for cnode in cnodes:"},{"line_number":120,"context_line":"            objs \u003d [o[\u0027name\u0027] for o in direct_client.direct_get_container("},{"line_number":121,"context_line":"                    cnode, cpart, self.account, container)[1]]"},{"line_number":122,"context_line":"            self.assertTrue(obj in objs)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class TestUpdateOverrides(ReplProbeTest):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a98d1f4_302a3b2d","line":122,"in_reply_to":"1aa78d24_2f510137","updated":"2016-09-29 17:50:40.000000000","message":"Done","commit_id":"bcf059c6e109ebb2822bbf746c13fafd4c193764"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"f21a838645d5ac7ac906bbd3016cc7596f253996","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        # In this test, we need to put container at handoff devices, so we"},{"line_number":66,"context_line":"        # need container devices more than replica count"},{"line_number":67,"context_line":"        if len(self.container_ring.devs) \u003c\u003d self.container_ring.replica_count:"},{"line_number":68,"context_line":"            raise SkipTest(\u0027Need devices more that replica count\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        container \u003d \u0027container-%s\u0027 % uuid4()"},{"line_number":71,"context_line":"        cpart, cnodes \u003d self.container_ring.get_nodes(self.account, container)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_f73ca5e2","line":68,"range":{"start_line":68,"start_character":49,"end_line":68,"end_character":50},"updated":"2016-10-17 13:01:49.000000000","message":"s/that/than/","commit_id":"babc2df5e08e63174e54c9d37e9ec64c1740f32d"},{"author":{"_account_id":12261,"name":"Mahati","email":"mahati.chamarthy@gmail.com","username":"Mahati"},"change_message_id":"8e77ec8d22fa5a231cc74df633d6c90e2ba6a83e","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # replicator don\u0027t know about the object"},{"line_number":108,"context_line":"        for cnode in cnodes:"},{"line_number":109,"context_line":"            self.assertFalse(direct_client.direct_get_container("},{"line_number":110,"context_line":"                cnode, cpart, self.account, container)[1])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Re-run the object-updaters and now container replicas in primary"},{"line_number":113,"context_line":"        # container servers should get updated"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_e9077ac7","line":110,"updated":"2016-10-17 05:03:22.000000000","message":"This test fails on this line for a 4 devices, 3 replica SAIO.","commit_id":"babc2df5e08e63174e54c9d37e9ec64c1740f32d"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"f21a838645d5ac7ac906bbd3016cc7596f253996","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # replicator don\u0027t know about the object"},{"line_number":108,"context_line":"        for cnode in cnodes:"},{"line_number":109,"context_line":"            self.assertFalse(direct_client.direct_get_container("},{"line_number":110,"context_line":"                cnode, cpart, self.account, container)[1])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Re-run the object-updaters and now container replicas in primary"},{"line_number":113,"context_line":"        # container servers should get updated"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa6399be_b2523b11","line":110,"in_reply_to":"fa6399be_e9077ac7","updated":"2016-10-17 13:01:49.000000000","message":"As far as I tested with my SAIO env, with 4 devices and 3 replicas, this test passes without any errors when rebasing the patch. I\u0027ll check it again.\n\nCan I ask you to tell me more detail about the reason of that failure. I\u0027m expecting the following two can be possible reasons.\n\n1. The object is already included in container listing\n\n2. Some of the container replicas are not placed at primary nodes","commit_id":"babc2df5e08e63174e54c9d37e9ec64c1740f32d"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7ea9d8d426b72bd7807c47366d8271c77f82cc72","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # replicator don\u0027t know about the object"},{"line_number":108,"context_line":"        for cnode in cnodes:"},{"line_number":109,"context_line":"            self.assertFalse(direct_client.direct_get_container("},{"line_number":110,"context_line":"                cnode, cpart, self.account, container)[1])"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Re-run the object-updaters and now container replicas in primary"},{"line_number":113,"context_line":"        # container servers should get updated"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_0d2bb4ec","line":110,"updated":"2016-12-01 15:28:42.000000000","message":"success here is just that there\u0027s no exception, the assertFalse looks weird - but I guess it\u0027s just saying it doesn\u0027t have objects in it?\n\nprobably like\n\n    objs \u003d direct_get(*args)[1]\n    self.assertEqual(0, len(objs)\n\n... would be more clear","commit_id":"ede42c77f1e04ab571c21b1d6342e662c7eced53"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7ea9d8d426b72bd7807c47366d8271c77f82cc72","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        # Re-run the object-updaters and now container replicas in primary"},{"line_number":113,"context_line":"        # container servers should get updated"},{"line_number":114,"context_line":"        Manager([\u0027object-updater\u0027]).once()"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # Assert all primary container servers know about container/obj"},{"line_number":117,"context_line":"        for cnode in cnodes:"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_c3e7cb3e","line":114,"updated":"2016-12-01 15:28:42.000000000","message":"before we roll this over I think it would help clarify the behavior of when revivifying containers if we deleted it first:\n\n\tdiff --git a/test/probe/test_object_async_update.py b/test/probe/test_object_async_update.py\n\tindex 42a11d9..cc924c9 100644\n\t--- a/test/probe/test_object_async_update.py\n\t+++ b/test/probe/test_object_async_update.py\n\t@@ -109,6 +109,9 @@ class TestObjectAsyncUpdate(ReplProbeTest):\n\t\t     self.assertFalse(direct_client.direct_get_container(\n\t\t\t cnode, cpart, self.account, container)[1])\n\t \n\t+        # since the container is empty - we can delete it!\n\t+        client.delete_container(self.url, self.token, container)\n\t+\n\t\t # Re-run the object-updaters and now container replicas in primary\n\t\t # container servers should get updated\n\t\t Manager([\u0027object-updater\u0027]).once()","commit_id":"ede42c77f1e04ab571c21b1d6342e662c7eced53"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7ea9d8d426b72bd7807c47366d8271c77f82cc72","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        for cnode in cnodes:"},{"line_number":118,"context_line":"            objs \u003d [o[\u0027name\u0027] for o in direct_client.direct_get_container("},{"line_number":119,"context_line":"                    cnode, cpart, self.account, container)[1]]"},{"line_number":120,"context_line":"            self.assertIn(obj, objs)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"class TestUpdateOverrides(ReplProbeTest):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_2dccf034","line":120,"updated":"2016-12-01 15:28:42.000000000","message":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\nFAIL: test_missing_container (test.probe.test_object_async_update.TestObjectAsyncUpdate)\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"/home/ubuntu/swift/test/probe/test_object_async_update.py\", line 120, in test_missing_container\n    self.assertIn(obj, objs)\nAssertionError: \u0027object-2ea59d37-bbc6-4408-a539-f9ebcd64e18c\u0027 not found in []\n\n\nthat\u0027s a pretty good failure assertion when I break the change.  KUDOS","commit_id":"ede42c77f1e04ab571c21b1d6342e662c7eced53"}],"test/unit/obj/test_updater.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"a1d427f9c113bc121f7bf4ee0475e9f5d1f610ba","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        self.assertEqual([0],"},{"line_number":363,"context_line":"                         pickle.load(open(op_path)).get(\u0027successes\u0027))"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        event \u003d spawn(accept, [404, 500])"},{"line_number":366,"context_line":"        cu.logger._clear()"},{"line_number":367,"context_line":"        cu.run_once()"},{"line_number":368,"context_line":"        err \u003d event.wait()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_af7691d4","line":365,"updated":"2016-07-06 01:45:53.000000000","message":"I think this is the only place that verifies that a follow-up update that partly succeeds will update the pickle. So if I apply\n\n diff --git a/swift/obj/updater.py b/swift/obj/updater.py\n index 3d670ec..777f16c 100644\n --- a/swift/obj/updater.py\n +++ b/swift/obj/updater.py\n @@ -246,7 +246,7 @@ class ObjectUpdater(Daemon):\n              self.logger.increment(\u0027failures\u0027)\n              self.logger.debug(\u0027Update failed for %(obj)s %(path)s\u0027,\n                                {\u0027obj\u0027: obj, \u0027path\u0027: update_path})\n -            if new_successes:\n +            if new_successes and len(events) \u003d\u003d len(nodes):\n                  update[\u0027successes\u0027] \u003d successes\n                  write_pickle(update, update_path, os.path.join(\n                      device, get_tmp_dir(policy)))\n\nthe tests still pass. Should we maybe have the 500 become a 201 here to preserve that? Something like http://paste.openstack.org/show/526113/ should do it.","commit_id":"bcf059c6e109ebb2822bbf746c13fafd4c193764"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"0cc8112431147448dd14793c0ca1e44a265271fc","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        self.assertEqual([0],"},{"line_number":363,"context_line":"                         pickle.load(open(op_path)).get(\u0027successes\u0027))"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"        event \u003d spawn(accept, [404, 500])"},{"line_number":366,"context_line":"        cu.logger._clear()"},{"line_number":367,"context_line":"        cu.run_once()"},{"line_number":368,"context_line":"        err \u003d event.wait()"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a98d1f4_d0d3d736","line":365,"in_reply_to":"1aa78d24_af7691d4","updated":"2016-09-29 17:50:40.000000000","message":"Done","commit_id":"bcf059c6e109ebb2822bbf746c13fafd4c193764"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7ea9d8d426b72bd7807c47366d8271c77f82cc72","unresolved":false,"context_lines":[{"line_number":368,"context_line":"        err \u003d event.wait()"},{"line_number":369,"context_line":"        if err:"},{"line_number":370,"context_line":"            raise err"},{"line_number":371,"context_line":"        self.assertTrue(os.path.exists(op_path))"},{"line_number":372,"context_line":"        self.assertEqual(cu.logger.get_increment_counts(),"},{"line_number":373,"context_line":"                         {\u0027failures\u0027: 1})"},{"line_number":374,"context_line":"        self.assertEqual([0, 1],"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_3bb989ea","side":"PARENT","line":371,"updated":"2016-12-01 15:28:42.000000000","message":"so this test does fail with the patch reverted... but why is that obviously correct?\n\n\tubuntu@saio:~$ nosetests swift/test/unit/obj/test_updater.py\n\t......F.\n\t\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\tFAIL: test_run_once (test.unit.obj.test_updater.TestObjectUpdater)\n\t----------------------------------------------------------------------\n\tTraceback (most recent call last):\n\t  File \"/usr/local/lib/python2.7/dist-packages/mock/mock.py\", line 1305, in patched\n\t    return func(*args, **keywargs)\n\t  File \"/home/ubuntu/swift/test/unit/obj/test_updater.py\", line 371, in test_run_once\n\t    self.assertTrue(os.path.exists(op_path))\n\tAssertionError: False is not true\n\noic, previously the 404 was the \"success\" - now the 201 is the success","commit_id":"ebcc3ac8fad7f79ed73da7870ff8078f3ec884b3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"7ea9d8d426b72bd7807c47366d8271c77f82cc72","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        self.assertTrue(os.path.exists(op_path))"},{"line_number":372,"context_line":"        self.assertEqual(cu.logger.get_increment_counts(),"},{"line_number":373,"context_line":"                         {\u0027failures\u0027: 1})"},{"line_number":374,"context_line":"        self.assertEqual([0, 2],"},{"line_number":375,"context_line":"                         pickle.load(open(op_path)).get(\u0027successes\u0027))"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"        event \u003d spawn(accept, [201])"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a71b18c_1b9f6d04","line":374,"updated":"2016-12-01 15:28:42.000000000","message":"... and these are device_ids obviously","commit_id":"ede42c77f1e04ab571c21b1d6342e662c7eced53"}]}
