)]}'
{"doc/manpages/object-server.conf.5":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b283c6205d92265d65785a7e477cc33c1de7e3a4","unresolved":false,"context_lines":[{"line_number":130,"context_line":".IP \\fBconn_timeout\\fR"},{"line_number":131,"context_line":"Connection timeout to external services. The default is 0.5 seconds."},{"line_number":132,"context_line":".IP \\fBcontainer_update_timeout\\fR"},{"line_number":133,"context_line":"Request timeout to do a container update on an object update. The default is 1 second."},{"line_number":134,"context_line":".RE"},{"line_number":135,"context_line":".PD"},{"line_number":136,"context_line":""}],"source_content_type":"text/troff","patch_set":9,"id":"3a50d1a3_6eb3d80a","line":133,"updated":"2015-07-23 02:29:48.000000000","message":"idk, it\u0027s not really the request that\u0027s timing out - just how long... w/e - thanks for getting the man page!","commit_id":"2289137164231d7872731c2cf3d81b86f34f01a4"}],"doc/source/deployment_guide.rst":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b283c6205d92265d65785a7e477cc33c1de7e3a4","unresolved":false,"context_lines":[{"line_number":482,"context_line":"network_chunk_size       65536       Size of chunks to read/write over the"},{"line_number":483,"context_line":"                                     network"},{"line_number":484,"context_line":"disk_chunk_size          65536       Size of chunks to read/write to disk"},{"line_number":485,"context_line":"container_update_timeout 1           Time to wait while sending a container"},{"line_number":486,"context_line":"                                     update on object update."},{"line_number":487,"context_line":"\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\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":488,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"3a50d1a3_ae15609c","line":485,"updated":"2015-07-23 02:29:48.000000000","message":"I experimented with different values and I think this is a good trade off between nice even latency when containers are stupid and consistently being able to list an object in the container successfully in a stable system.\n\nI think we could recommend as low as 0.5, and probably don\u0027t need to be higher than 1.  This is a huge improvement over the random 3.0s PUT requests when a couple container dbs decide to swallow .pendings at the same time.\n\nI\u0027ve occasionally heard people complain that the default 0.5 connection timeout can be a bit troublesome [1], for those folks I think I\u0027d recommend starting by tuning down container_update_timeout to 200ms or so before lowering the connect timeout.  Having this option is pretty cool!\n\n1. https://bugs.launchpad.net/swift/+bug/1434262","commit_id":"2289137164231d7872731c2cf3d81b86f34f01a4"}],"etc/object-server.conf-sample":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b283c6205d92265d65785a7e477cc33c1de7e3a4","unresolved":false,"context_lines":[{"line_number":59,"context_line":"# Time to wait while attempting to connect to another backend node."},{"line_number":60,"context_line":"# conn_timeout \u003d 0.5"},{"line_number":61,"context_line":"# Time to wait while sending each chunk of data to another backend node."},{"line_number":62,"context_line":"# node_timeout \u003d 3"},{"line_number":63,"context_line":"# Time to wait while receiving each chunk of data from a client or another"},{"line_number":64,"context_line":"# backend node."},{"line_number":65,"context_line":"# client_timeout \u003d 60"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"3a50d1a3_ce18ecd5","side":"PARENT","line":62,"updated":"2015-07-23 02:29:48.000000000","message":"you can float node_timeout now right?","commit_id":"c3cc98b2c918476f1b54924e0c54e4c746eba4ac"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"e341de059d6c4b193f494c64e275e7444353197e","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            try:"},{"line_number":94,"context_line":"                gt.wait()"},{"line_number":95,"context_line":"            except:  # noqa"},{"line_number":96,"context_line":"                pass  # real spawn_n won\u0027t do anything but polute logs"},{"line_number":97,"context_line":"        object_server.spawn_n \u003d orig"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1af86dd1_73882723","line":96,"updated":"2015-06-12 18:55:05.000000000","message":"nit: \"pollute\"","commit_id":"312e9559c77f6da0837df3f82c6d9dd794df37d2"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b283c6205d92265d65785a7e477cc33c1de7e3a4","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    Spawn and capture the result so we can later wait on it. This means we can"},{"line_number":75,"context_line":"    test code executing in a greenthread but still wait() on the result to"},{"line_number":76,"context_line":"    ensure that the method has completed."},{"line_number":77,"context_line":"    \"\"\""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    orig \u003d object_server.spawn"},{"line_number":80,"context_line":"    greenlets \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_2e763070","line":77,"updated":"2015-07-23 02:29:48.000000000","message":"I think this works well and is applied effectively.  I tried passing in a config with \u0027container_update_timeout\u0027 of 0.0 and test failed as expected when I pulled out the forced gt wait.  Or with the forced wait pulled out and a \u0027container_update_timeout\u0027 of 1.0 things pass even when the waits are pulled out.\n\nTo keep us honest I think we might set the default container_update_timeout config for the tests\u0027s ObjectControllers to 0 and let the context guy here do its thing.  Might help people wrap their test code in fake_spawn when it needs to be?","commit_id":"2289137164231d7872731c2cf3d81b86f34f01a4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b283c6205d92265d65785a7e477cc33c1de7e3a4","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                gt.wait()"},{"line_number":95,"context_line":"            except:  # noqa"},{"line_number":96,"context_line":"                pass  # real spawn won\u0027t do anything but pollute logs"},{"line_number":97,"context_line":"        object_server.spawn \u003d orig"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"@patch_policies(test_policies)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_abf1d26c","line":97,"updated":"2015-07-23 02:29:48.000000000","message":"old school patch - nice\n\nI think the kids will just:\n\n    with mock.patch(\u0027swift.obj.server.spawn\u0027, _inner_fake_spawn):","commit_id":"2289137164231d7872731c2cf3d81b86f34f01a4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b283c6205d92265d65785a7e477cc33c1de7e3a4","unresolved":false,"context_lines":[{"line_number":420,"context_line":"                     \u0027X-Container-Timestamp\u0027: \u00271\u0027,"},{"line_number":421,"context_line":"                     \u0027Content-Type\u0027: \u0027application/new1\u0027})"},{"line_number":422,"context_line":"        with mock.patch.object(object_server, \u0027http_connect\u0027,"},{"line_number":423,"context_line":"                               mock_http_connect(202)):"},{"line_number":424,"context_line":"            resp \u003d req.get_response(self.object_controller)"},{"line_number":425,"context_line":"        self.assertEquals(resp.status_int, 202)"},{"line_number":426,"context_line":"        req \u003d Request.blank("}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_6b9e6a08","line":423,"updated":"2015-07-23 02:29:48.000000000","message":"heh, random new-skewlifcation - I like!","commit_id":"2289137164231d7872731c2cf3d81b86f34f01a4"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"b283c6205d92265d65785a7e477cc33c1de7e3a4","unresolved":false,"context_lines":[{"line_number":2439,"context_line":"        with mocked_http_conn("},{"line_number":2440,"context_line":"                200, give_connect\u003dcapture_updates) as fake_conn:"},{"line_number":2441,"context_line":"            with fake_spawn():"},{"line_number":2442,"context_line":"                resp \u003d req.get_response(self.object_controller)"},{"line_number":2443,"context_line":"            self.assertRaises(StopIteration, fake_conn.code_iter.next)"},{"line_number":2444,"context_line":"        self.assertEqual(resp.status_int, 201)"},{"line_number":2445,"context_line":"        self.assertEquals(1, len(container_updates))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a50d1a3_ce054c11","line":2442,"updated":"2015-07-23 02:29:48.000000000","message":"I think the kids are using the py2.7 syntax for multiple context managers\n\n    with A() as a, B() as b:\n        ...","commit_id":"2289137164231d7872731c2cf3d81b86f34f01a4"}]}
