)]}'
{"swift/common/middleware/slo.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"c28517e8454a0a1e207fe69be25e00ce957feaab","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                if sub_resp.is_success:"},{"line_number":343,"context_line":"                    if not config_true_value("},{"line_number":344,"context_line":"                            sub_resp.headers.get(\u0027X-Static-Large-Object\u0027)):"},{"line_number":345,"context_line":"                        raise HTTPBadRequest(\u0027Not an SLO manifest: %s\u0027 %"},{"line_number":346,"context_line":"                                             new_env[\u0027PATH_INFO\u0027])"},{"line_number":347,"context_line":"                    try:"},{"line_number":348,"context_line":"                        sub_segments.extend(json.loads(sub_resp.body))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fkdc%3D","line":345,"updated":"2013-05-30 13:12:38.000000000","message":"Should that be \"a\" instead of \"an\"?\n\nAnd why is the request \"bad\" if the one of the subs not a SLO manifest?  What did the user do wrong?","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},"change_message_id":"fc9bea5fd33d13ddaf4877d2867639e28ea8ca58","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                if sub_resp.is_success:"},{"line_number":343,"context_line":"                    if not config_true_value("},{"line_number":344,"context_line":"                            sub_resp.headers.get(\u0027X-Static-Large-Object\u0027)):"},{"line_number":345,"context_line":"                        raise HTTPBadRequest(\u0027Not an SLO manifest: %s\u0027 %"},{"line_number":346,"context_line":"                                             new_env[\u0027PATH_INFO\u0027])"},{"line_number":347,"context_line":"                    try:"},{"line_number":348,"context_line":"                        sub_segments.extend(json.loads(sub_resp.body))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F7w0%3D","line":345,"in_reply_to":"AAAAPH%2F%2Fkdc%3D","updated":"2013-06-17 22:47:11.000000000","message":"I put this because when the parent was made this segment was an slo and now it isn\u0027t.  I think I\u0027ll change it to not raise an error but just to not treat it like an SLO and to just delete it.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"308e853a4b7578d9ef43eaded7caa9041bce43be","unresolved":false,"context_lines":[{"line_number":342,"context_line":"                if sub_resp.is_success:"},{"line_number":343,"context_line":"                    if not config_true_value("},{"line_number":344,"context_line":"                            sub_resp.headers.get(\u0027X-Static-Large-Object\u0027)):"},{"line_number":345,"context_line":"                        raise HTTPBadRequest(\u0027Not an SLO manifest: %s\u0027 %"},{"line_number":346,"context_line":"                                             new_env[\u0027PATH_INFO\u0027])"},{"line_number":347,"context_line":"                    try:"},{"line_number":348,"context_line":"                        sub_segments.extend(json.loads(sub_resp.body))"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj%2FI%3D","line":345,"in_reply_to":"AAAAPH%2F%2Fkdc%3D","updated":"2013-05-30 14:34:57.000000000","message":"a vs an? I guess it depends if you pronounce the next word slow or es-el-oh. But, really, do we care that much?\n\nI\u0027ll look into the return codes though. Looks like some of these might be quick placeholders that didn\u0027t get resolved later.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"c28517e8454a0a1e207fe69be25e00ce957feaab","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                    try:"},{"line_number":348,"context_line":"                        sub_segments.extend(json.loads(sub_resp.body))"},{"line_number":349,"context_line":"                    except ValueError:"},{"line_number":350,"context_line":"                        raise HTTPServerError(\u0027Unable to load SLO manifest\u0027)"},{"line_number":351,"context_line":"                    # add sub-manifest back to be deleted after sub segments"},{"line_number":352,"context_line":"                    seg_data[\u0027sub_slo\u0027] \u003d False"},{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fkc8%3D","line":350,"updated":"2013-05-30 13:12:38.000000000","message":"If there is one by SLO segment, will this effectively all sub-SLOs before this to be deleted, but after this not?\n\nIs this an internal server error because the code screwed up?  Can\u0027t the user mess this up?","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"1325f74ab7d5f5eba9410b2a2938f43c070e22f3","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                    try:"},{"line_number":348,"context_line":"                        sub_segments.extend(json.loads(sub_resp.body))"},{"line_number":349,"context_line":"                    except ValueError:"},{"line_number":350,"context_line":"                        raise HTTPServerError(\u0027Unable to load SLO manifest\u0027)"},{"line_number":351,"context_line":"                    # add sub-manifest back to be deleted after sub segments"},{"line_number":352,"context_line":"                    seg_data[\u0027sub_slo\u0027] \u003d False"},{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FjzI%3D","line":350,"in_reply_to":"AAAAPH%2F%2Fj3U%3D","updated":"2013-05-30 15:20:34.000000000","message":"No problem, I thought that might be what you meant. And yes, that\u0027s true. It bails on the first failure. That isn\u0027t true on bulk deletes, so I\u0027ll look into why he did things differently here. It\u0027s probably because these are virtually unlimited whereas bulk deletes have a cap. Not completely certain though.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"308e853a4b7578d9ef43eaded7caa9041bce43be","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                    try:"},{"line_number":348,"context_line":"                        sub_segments.extend(json.loads(sub_resp.body))"},{"line_number":349,"context_line":"                    except ValueError:"},{"line_number":350,"context_line":"                        raise HTTPServerError(\u0027Unable to load SLO manifest\u0027)"},{"line_number":351,"context_line":"                    # add sub-manifest back to be deleted after sub segments"},{"line_number":352,"context_line":"                    seg_data[\u0027sub_slo\u0027] \u003d False"},{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj98%3D","line":350,"in_reply_to":"AAAAPH%2F%2Fkc8%3D","updated":"2013-05-30 14:34:57.000000000","message":"Can you reword that first question? I\u0027m having trouble understanding.\n\nAnd I\u0027ll check on the return codes.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"5df531293de3bec48aab7ebb42cffa36054765ef","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                    try:"},{"line_number":348,"context_line":"                        sub_segments.extend(json.loads(sub_resp.body))"},{"line_number":349,"context_line":"                    except ValueError:"},{"line_number":350,"context_line":"                        raise HTTPServerError(\u0027Unable to load SLO manifest\u0027)"},{"line_number":351,"context_line":"                    # add sub-manifest back to be deleted after sub segments"},{"line_number":352,"context_line":"                    seg_data[\u0027sub_slo\u0027] \u003d False"},{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj3U%3D","line":350,"in_reply_to":"AAAAPH%2F%2Fkc8%3D","updated":"2013-05-30 15:02:20.000000000","message":"If there is one *bad* SLO segment, will this effectively allow sub-SLOs before this to be deleted, but those after will not be deleted?\n\nSorry for my poor writing. :(","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"c28517e8454a0a1e207fe69be25e00ce957feaab","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"},{"line_number":354,"context_line":"                elif sub_resp.status_int !\u003d HTTP_NOT_FOUND:"},{"line_number":355,"context_line":"                    # on deletes treat not found as success"},{"line_number":356,"context_line":"                    raise HTTPServerError(\u0027Sub SLO unable to load.\u0027)"},{"line_number":357,"context_line":"            else:"},{"line_number":358,"context_line":"                yield seg_data[\u0027name\u0027].encode(\u0027utf-8\u0027)"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fkco%3D","line":356,"updated":"2013-05-30 13:12:38.000000000","message":"If you have a lot of objects, does this expose this request to all the possible errors of other requests? Should we re-try on 503s or something?","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"5df531293de3bec48aab7ebb42cffa36054765ef","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"},{"line_number":354,"context_line":"                elif sub_resp.status_int !\u003d HTTP_NOT_FOUND:"},{"line_number":355,"context_line":"                    # on deletes treat not found as success"},{"line_number":356,"context_line":"                    raise HTTPServerError(\u0027Sub SLO unable to load.\u0027)"},{"line_number":357,"context_line":"            else:"},{"line_number":358,"context_line":"                yield seg_data[\u0027name\u0027].encode(\u0027utf-8\u0027)"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj2I%3D","line":356,"in_reply_to":"AAAAPH%2F%2Fj%2BM%3D","updated":"2013-05-30 15:02:20.000000000","message":"I am wondering if performing the DELETEs directly is even worth it. Didn\u0027t the client PUT all the pieces in directly? So what if DELETEing an SLO object involves just a response that says, \"... and here is all the segments that need to be DELETEd, Mr. Client, have at it?\"\n\nBy handling all this internally, but still exposing all the errors that can happen that end up killing the request, it seems like this will be a source of head-aches.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"1325f74ab7d5f5eba9410b2a2938f43c070e22f3","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"},{"line_number":354,"context_line":"                elif sub_resp.status_int !\u003d HTTP_NOT_FOUND:"},{"line_number":355,"context_line":"                    # on deletes treat not found as success"},{"line_number":356,"context_line":"                    raise HTTPServerError(\u0027Sub SLO unable to load.\u0027)"},{"line_number":357,"context_line":"            else:"},{"line_number":358,"context_line":"                yield seg_data[\u0027name\u0027].encode(\u0027utf-8\u0027)"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fjys%3D","line":356,"in_reply_to":"AAAAPH%2F%2Fj2I%3D","updated":"2013-05-30 15:20:34.000000000","message":"I agree on that. I think it was added just as a convenience, like bulk deletes. But, DLOs don\u0027t have a cascading delete feature, so... I\u0027ll have to think on it some. Might have to wait until David gets back to resolve completely.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},"change_message_id":"fc9bea5fd33d13ddaf4877d2867639e28ea8ca58","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"},{"line_number":354,"context_line":"                elif sub_resp.status_int !\u003d HTTP_NOT_FOUND:"},{"line_number":355,"context_line":"                    # on deletes treat not found as success"},{"line_number":356,"context_line":"                    raise HTTPServerError(\u0027Sub SLO unable to load.\u0027)"},{"line_number":357,"context_line":"            else:"},{"line_number":358,"context_line":"                yield seg_data[\u0027name\u0027].encode(\u0027utf-8\u0027)"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F7w8%3D","line":356,"in_reply_to":"AAAAPH%2F%2Fjys%3D","updated":"2013-06-17 22:47:11.000000000","message":"So the code isn\u0027t entirely clear on what it does (i\u0027m going to refactor it a little) but its important to see the the manifest only gets deleted if none of the sub-calls 5xx. If it does 5xx early (which will only happen when there is a sub-manifest that doesn\u0027t load properly) the user will still have the manifest to reference so it shouldn\u0027t put the user in a worse situation.\n\nAlso I need to load the manifests as you go so that there is no limit on the size of the slo.\n\nThe deletes are a convenience feature but I do think they are worth having. First off its a big convenience, also if there were some thing in swift that made these SLOs automagically (i have a couple ideas i\u0027m playing around with) then being able to delete them in a single call will be very useful.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"308e853a4b7578d9ef43eaded7caa9041bce43be","unresolved":false,"context_lines":[{"line_number":353,"context_line":"                    sub_segments.append(seg_data)"},{"line_number":354,"context_line":"                elif sub_resp.status_int !\u003d HTTP_NOT_FOUND:"},{"line_number":355,"context_line":"                    # on deletes treat not found as success"},{"line_number":356,"context_line":"                    raise HTTPServerError(\u0027Sub SLO unable to load.\u0027)"},{"line_number":357,"context_line":"            else:"},{"line_number":358,"context_line":"                yield seg_data[\u0027name\u0027].encode(\u0027utf-8\u0027)"},{"line_number":359,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj%2BM%3D","line":356,"in_reply_to":"AAAAPH%2F%2Fkco%3D","updated":"2013-05-30 14:34:57.000000000","message":"Yes and we have that with other large object / bulk delete support. If it fails, the client can retry if desired. I\u0027ll look into it, but I\u0027m not sure we\u0027d want to reimplement any more client functionality in here like retries. I think it\u0027s bad enough we have cascading deletes. ;-)","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"c28517e8454a0a1e207fe69be25e00ce957feaab","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    \u0027 %(status)s\u0027) % {\u0027path\u0027: path, \u0027status\u0027: resp.status_int})"},{"line_number":187,"context_line":"            if self.is_slo:"},{"line_number":188,"context_line":"                if \u0027X-Static-Large-Object\u0027 in resp.headers:"},{"line_number":189,"context_line":"                    # this segment is and nested slo object. read in the body"},{"line_number":190,"context_line":"                    # and add its segments into this slo."},{"line_number":191,"context_line":"                    try:"},{"line_number":192,"context_line":"                        sub_manifest \u003d json.loads(resp.body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FkcQ%3D","line":189,"updated":"2013-05-30 13:12:38.000000000","message":"\"is and nested\" -\u003e \"is a nested\"","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"deeead3a7edb7ed2d87df3726d917623edd0b1ef","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    \u0027 %(status)s\u0027) % {\u0027path\u0027: path, \u0027status\u0027: resp.status_int})"},{"line_number":187,"context_line":"            if self.is_slo:"},{"line_number":188,"context_line":"                if \u0027X-Static-Large-Object\u0027 in resp.headers:"},{"line_number":189,"context_line":"                    # this segment is and nested slo object. read in the body"},{"line_number":190,"context_line":"                    # and add its segments into this slo."},{"line_number":191,"context_line":"                    try:"},{"line_number":192,"context_line":"                        sub_manifest \u003d json.loads(resp.body)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPX%2F%2Fm0o%3D","line":189,"in_reply_to":"AAAAPH%2F%2FkcQ%3D","updated":"2013-06-14 14:40:48.000000000","message":"Done","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"c28517e8454a0a1e207fe69be25e00ce957feaab","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                # chunk to our wsgi.py because it loads the first segment to"},{"line_number":267,"context_line":"                # force start_response to be called.  This yielded space will"},{"line_number":268,"context_line":"                # be thrown away because I am directly afterwards raising an"},{"line_number":269,"context_line":"                # unhandled exception to force eventlet to hang up."},{"line_number":270,"context_line":"                yield \u0027 \u0027"},{"line_number":271,"context_line":"            raise"},{"line_number":272,"context_line":"        except (Exception, Timeout), err:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FkLA%3D","line":269,"updated":"2013-05-30 13:12:38.000000000","message":"Why not do this on the other exceptions as well? Why do you need to force the connection to hang up?","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"deeead3a7edb7ed2d87df3726d917623edd0b1ef","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                # chunk to our wsgi.py because it loads the first segment to"},{"line_number":267,"context_line":"                # force start_response to be called.  This yielded space will"},{"line_number":268,"context_line":"                # be thrown away because I am directly afterwards raising an"},{"line_number":269,"context_line":"                # unhandled exception to force eventlet to hang up."},{"line_number":270,"context_line":"                yield \u0027 \u0027"},{"line_number":271,"context_line":"            raise"},{"line_number":272,"context_line":"        except (Exception, Timeout), err:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPX%2F%2Fmz4%3D","line":269,"in_reply_to":"AAAAPH%2F%2FiNo%3D","updated":"2013-06-14 14:40:48.000000000","message":"I\u0027ll try to reword this code comment and see if that helps.\n\nOther exceptions will cause 5xxs if not self.have_yielded_data and will hang-up if self.have_yielded_data. For SloSegmentErrors in particular, we want hang ups for both conditions and don\u0027t ever want a 5xx because the user deleted their own segment out from under their own segmented object.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"18ffa34ba93ae6a6ce7c695390b57bb8a2a8f1b6","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                # chunk to our wsgi.py because it loads the first segment to"},{"line_number":267,"context_line":"                # force start_response to be called.  This yielded space will"},{"line_number":268,"context_line":"                # be thrown away because I am directly afterwards raising an"},{"line_number":269,"context_line":"                # unhandled exception to force eventlet to hang up."},{"line_number":270,"context_line":"                yield \u0027 \u0027"},{"line_number":271,"context_line":"            raise"},{"line_number":272,"context_line":"        except (Exception, Timeout), err:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FiNo%3D","line":269,"in_reply_to":"AAAAPH%2F%2Fj8U%3D","updated":"2013-05-31 02:29:43.000000000","message":"So if you placed, \"assert self.have_yielded_data\" in all the other exceptions, it is guaranteed to never fire under any circumstances?","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":1216,"name":"gholt","email":"z-launchpad@brim.net","username":"gholt"},"change_message_id":"308e853a4b7578d9ef43eaded7caa9041bce43be","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                # chunk to our wsgi.py because it loads the first segment to"},{"line_number":267,"context_line":"                # force start_response to be called.  This yielded space will"},{"line_number":268,"context_line":"                # be thrown away because I am directly afterwards raising an"},{"line_number":269,"context_line":"                # unhandled exception to force eventlet to hang up."},{"line_number":270,"context_line":"                yield \u0027 \u0027"},{"line_number":271,"context_line":"            raise"},{"line_number":272,"context_line":"        except (Exception, Timeout), err:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fj8U%3D","line":269,"in_reply_to":"AAAAPH%2F%2FkLA%3D","updated":"2013-05-30 14:34:57.000000000","message":"It already hangs up on other exceptions because other exceptions are ones that have yielded data already.\n\nIf you raise an exception before yielding data, Eventlet will send a 5xx response; this forces Eventlet to send our response, and then hang up.\n\nA little subtle, but it\u0027s a 5xx in the logs versus an early hang up. 5xx usually indicates server error and in this case it\u0027s a user-misconfigured-slo error.\n\nI\u0027ll try to update the comment without making it too much larger.","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"},{"author":{"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},"change_message_id":"fc9bea5fd33d13ddaf4877d2867639e28ea8ca58","unresolved":false,"context_lines":[{"line_number":266,"context_line":"                # chunk to our wsgi.py because it loads the first segment to"},{"line_number":267,"context_line":"                # force start_response to be called.  This yielded space will"},{"line_number":268,"context_line":"                # be thrown away because I am directly afterwards raising an"},{"line_number":269,"context_line":"                # unhandled exception to force eventlet to hang up."},{"line_number":270,"context_line":"                yield \u0027 \u0027"},{"line_number":271,"context_line":"            raise"},{"line_number":272,"context_line":"        except (Exception, Timeout), err:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPn%2F%2F7vM%3D","line":269,"in_reply_to":"AAAAPX%2F%2Fmz4%3D","updated":"2013-06-17 22:47:11.000000000","message":"reworded this to what gholt said","commit_id":"6925f1f09d6fc37965f5f52a15ffc0211c414fe2"}]}
