)]}'
{"swift/obj/diskfile.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"785226288ca21679032960edbd78cf75ad3c402b","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    :params datadir: directory name files are from for convenience"},{"line_number":230,"context_line":"    :returns: a tuple of data, meta and ts (tombstone) files, in one of"},{"line_number":231,"context_line":"              two states: (note that the last tuple element is"},{"line_number":232,"context_line":"              always None as it is used by EC only"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    * ts_file is not None, data_file is None, meta_file is None"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_a8c5db8e","line":232,"updated":"2015-07-21 00:38:47.000000000","message":"if we\u0027re going to change the return signature - how about we return a dictionary instead of a fixed length tuple","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a99f3e00a3461a9872449148a709fff6c8fdaaf1","unresolved":false,"context_lines":[{"line_number":229,"context_line":"    :params datadir: directory name files are from for convenience"},{"line_number":230,"context_line":"    :returns: a tuple of data, meta and ts (tombstone) files, in one of"},{"line_number":231,"context_line":"              two states: (note that the last tuple element is"},{"line_number":232,"context_line":"              always None as it is used by EC only"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    * ts_file is not None, data_file is None, meta_file is None"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_2e9c73bf","line":232,"in_reply_to":"3a50d1a3_a8c5db8e","updated":"2015-07-21 01:02:25.000000000","message":"cool, will do","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    :params files: simple set of files as a python list"},{"line_number":230,"context_line":"    :params datadir: directory name files are from for convenience"},{"line_number":231,"context_line":"    :returns: dict of files to use"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"    * ts_file is not None, data_file is None, meta_file is None"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_e0eb65a2","line":231,"updated":"2015-07-29 16:46:26.000000000","message":"yes!","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":238,"context_line":""},{"line_number":239,"context_line":"      object exists, and optionally has fast-POST metadata"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    * extra_frags can be None or valid if there are"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"      other fragment archive indexes available that match"},{"line_number":244,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_c8fbe079","line":241,"updated":"2015-07-29 16:46:26.000000000","message":"s/valid/a list/","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    * extra_frags can be None or valid if there are"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"      other fragment archive indexes available that match"},{"line_number":244,"context_line":"    \"\"\""},{"line_number":245,"context_line":"    files.sort(reverse\u003dTrue)"},{"line_number":246,"context_line":"    data_file \u003d meta_file \u003d ts_file \u003d None"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_e37fdd14","line":243,"updated":"2015-07-29 16:46:26.000000000","message":"It ought to be possible to only have the extra_frags key in the dict when extra_frags exist i.e. in the ECDiskFileManager version. That would save a bunch of places that set extra_frags\u003dNone e.g. line 275","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    return dict(data_file\u003ddata_file,"},{"line_number":273,"context_line":"                meta_file\u003dmeta_file,"},{"line_number":274,"context_line":"                ts_file\u003dts_file,"},{"line_number":275,"context_line":"                extra_frags\u003dNone)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def hash_cleanup_listdir(hsh_path, reclaim_age\u003dONE_WEEK):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_fe83f2c8","line":275,"updated":"2015-07-29 16:46:26.000000000","message":"small thing but could we use alt_frags everywhere for consistency, instead of extra_frags?\n\nor is there a distinction that i am missing ? could well be... :)","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":1411,"context_line":"        if not data_file:"},{"line_number":1412,"context_line":"            raise self._construct_exception_from_ts_file(ts_file)"},{"line_number":1413,"context_line":"        if extra_frags:"},{"line_number":1414,"context_line":"            self._alt_frags \u003d str(extra_frags).strip(\u0027[]\u0027)"},{"line_number":1415,"context_line":"        self._fp \u003d self._construct_from_data_file("},{"line_number":1416,"context_line":"            data_file, meta_file)"},{"line_number":1417,"context_line":"        # This method must populate the internal _metadata attribute."}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_a851b463","line":1414,"updated":"2015-07-29 16:46:26.000000000","message":"use \u0027.\u0027.join(extra_frags)\n\nbut actually, i would suggest that self._alt_flags should be the raw list, and the obj server converts this to a comma separated string when setting the header value. Its a small thing, but that way we still have a list available in diskfile if we ever need it for some other reason.\n\n(see patch)","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":1483,"context_line":""},{"line_number":1484,"context_line":"          object exists, and optionally has fast-POST metadata"},{"line_number":1485,"context_line":""},{"line_number":1486,"context_line":"        * extra_frags can be None or valid if there are"},{"line_number":1487,"context_line":""},{"line_number":1488,"context_line":"          other fragment archive indexes available that match"},{"line_number":1489,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_a8ff7432","line":1486,"updated":"2015-07-29 16:46:26.000000000","message":"s/valid/a list/","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":2098,"context_line":"                        # back up to the proxy in case it needs one of them"},{"line_number":2099,"context_line":"                    # keep searching for a .data file to match frag_index"},{"line_number":2100,"context_line":"                    context.setdefault(\u0027fragments\u0027, []).append(filename)"},{"line_number":2101,"context_line":"                    context.setdefault(\u0027extra_frags\u0027, []).append(fi)"},{"line_number":2102,"context_line":"                    context[\u0027extra_frags\u0027].sort()"},{"line_number":2103,"context_line":"            else:"},{"line_number":2104,"context_line":"                # there can no longer be a matching .data file so mark what has"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_08df880d","line":2101,"updated":"2015-07-29 16:46:26.000000000","message":"we could just make use of existing fragment list - see patch","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"}],"swift/obj/server.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":689,"context_line":"            \u0027X-Auth-Token\u0027 not in request.headers and"},{"line_number":690,"context_line":"            \u0027X-Storage-Token\u0027 not in request.headers)"},{"line_number":691,"context_line":"        frag_index \u003d request.headers.get(\u0027X-Backend-Preferred-Frag-Index\u0027,"},{"line_number":692,"context_line":"                                         None)"},{"line_number":693,"context_line":"        try:"},{"line_number":694,"context_line":"            disk_file \u003d self.get_diskfile("},{"line_number":695,"context_line":"                device, partition, account, container, obj,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_33fc4571","line":692,"updated":"2015-07-29 16:46:26.000000000","message":"nit: the None default isn\u0027t necessary - get() will return None if the key is not found","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":719,"context_line":"                            key.lower() in self.allowed_headers:"},{"line_number":720,"context_line":"                        response.headers[key] \u003d value"},{"line_number":721,"context_line":"                response.etag \u003d metadata[\u0027ETag\u0027]"},{"line_number":722,"context_line":"                # diskfile tells us about additional FI\u0027s that are avaiable"},{"line_number":723,"context_line":"                # upcon request, communicate those back via response header"},{"line_number":724,"context_line":"                if disk_file.alt_frags:"},{"line_number":725,"context_line":"                    response.headers[\u0027X-Backend-Obj-Alt-Frag-Index\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_5358f130","line":722,"updated":"2015-07-29 16:46:26.000000000","message":"s/avaiable/available/","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":720,"context_line":"                        response.headers[key] \u003d value"},{"line_number":721,"context_line":"                response.etag \u003d metadata[\u0027ETag\u0027]"},{"line_number":722,"context_line":"                # diskfile tells us about additional FI\u0027s that are avaiable"},{"line_number":723,"context_line":"                # upcon request, communicate those back via response header"},{"line_number":724,"context_line":"                if disk_file.alt_frags:"},{"line_number":725,"context_line":"                    response.headers[\u0027X-Backend-Obj-Alt-Frag-Index\u0027] \u003d \\"},{"line_number":726,"context_line":"                        disk_file.alt_frags"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_b3493562","line":723,"updated":"2015-07-29 16:46:26.000000000","message":"typo: upcon?","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3c3dbc68a9a6e01594f40c559a284b266213609c","unresolved":false,"context_lines":[{"line_number":722,"context_line":"                # diskfile tells us about additional FI\u0027s that are avaiable"},{"line_number":723,"context_line":"                # upcon request, communicate those back via response header"},{"line_number":724,"context_line":"                if disk_file.alt_frags:"},{"line_number":725,"context_line":"                    response.headers[\u0027X-Backend-Obj-Alt-Frag-Index\u0027] \u003d \\"},{"line_number":726,"context_line":"                        disk_file.alt_frags"},{"line_number":727,"context_line":"                response.last_modified \u003d math.ceil(float(file_x_ts))"},{"line_number":728,"context_line":"                response.content_length \u003d obj_size"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a50d1a3_93875960","line":725,"updated":"2015-07-29 16:46:26.000000000","message":"nit: the \u0027-Obj-\u0027 of the header name part seems superfluous and inconsistent with for example \u0027X-Backend-Preferred-Frag-Index\u0027 which doesn\u0027t have -Obj-","commit_id":"940b07916611da4d3c2ad54a21912b108c336ed8"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"9c3be722867499bbb57715f6f727a64849cdbd21","unresolved":false,"context_lines":[{"line_number":2153,"context_line":"                    gets \u003d list(pile)"},{"line_number":2154,"context_line":"                    for get, parts_iter in gets:"},{"line_number":2155,"context_line":"                        if is_success(get.last_status):"},{"line_number":2156,"context_line":"                            # only add nodes w/unique frag indexes to the list"},{"line_number":2157,"context_line":"                            fi \u003d HeaderKeyDict("},{"line_number":2158,"context_line":"                                get.last_headers)[\u0027X-Object-Sysmeta-Ec\u0027"},{"line_number":2159,"context_line":"                                                  \u0027-Frag-Index\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_96a308b2","line":2156,"updated":"2015-07-14 20:43:54.000000000","message":"todo:  delete this comment","commit_id":"d43deb5e6616ebe90415d633496af0a2331c6553"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"785226288ca21679032960edbd78cf75ad3c402b","unresolved":false,"context_lines":[{"line_number":2140,"context_line":"            # tuple of (frag_index, getter)"},{"line_number":2141,"context_line":"            alts_available \u003d 0"},{"line_number":2142,"context_line":"            gets_needed \u003d policy.ec_ndata"},{"line_number":2143,"context_line":"            gets_to_spawn \u003d gets_needed"},{"line_number":2144,"context_line":"            parity_to_try \u003d policy.ec_nparity"},{"line_number":2145,"context_line":"            first_pass \u003d True"},{"line_number":2146,"context_line":"            etag_buckets \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_635614d4","line":2143,"updated":"2015-07-21 00:38:47.000000000","message":"is having two other different names for policy.ec_ndata really helping readability?","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a99f3e00a3461a9872449148a709fff6c8fdaaf1","unresolved":false,"context_lines":[{"line_number":2140,"context_line":"            # tuple of (frag_index, getter)"},{"line_number":2141,"context_line":"            alts_available \u003d 0"},{"line_number":2142,"context_line":"            gets_needed \u003d policy.ec_ndata"},{"line_number":2143,"context_line":"            gets_to_spawn \u003d gets_needed"},{"line_number":2144,"context_line":"            parity_to_try \u003d policy.ec_nparity"},{"line_number":2145,"context_line":"            first_pass \u003d True"},{"line_number":2146,"context_line":"            etag_buckets \u003d {}"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_4e869f66","line":2143,"in_reply_to":"3a50d1a3_635614d4","updated":"2015-07-21 01:02:25.000000000","message":"you mean the one that is parity and the one that is data?  It is in this implementation for sure however with some refactoring/breaking out of things the flag-ridden logic to exit the while loop may get simplified (well I hope so) and one of these might go away","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"785226288ca21679032960edbd78cf75ad3c402b","unresolved":false,"context_lines":[{"line_number":2144,"context_line":"            parity_to_try \u003d policy.ec_nparity"},{"line_number":2145,"context_line":"            first_pass \u003d True"},{"line_number":2146,"context_line":"            etag_buckets \u003d {}"},{"line_number":2147,"context_line":"            etag_to_use \u003d -1"},{"line_number":2148,"context_line":"            node_iter \u003d GreenthreadSafeIterator(node_iter)"},{"line_number":2149,"context_line":"            # loop to build up \u0027getters\u0027 using alternate indexes"},{"line_number":2150,"context_line":"            # if they are available and needed.  Getters are grouped"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_433bd89c","line":2147,"updated":"2015-07-21 00:38:47.000000000","message":"is *all* of this state *needed* to actually resolve failure conditions or is some of it just hear for debugging?","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a99f3e00a3461a9872449148a709fff6c8fdaaf1","unresolved":false,"context_lines":[{"line_number":2144,"context_line":"            parity_to_try \u003d policy.ec_nparity"},{"line_number":2145,"context_line":"            first_pass \u003d True"},{"line_number":2146,"context_line":"            etag_buckets \u003d {}"},{"line_number":2147,"context_line":"            etag_to_use \u003d -1"},{"line_number":2148,"context_line":"            node_iter \u003d GreenthreadSafeIterator(node_iter)"},{"line_number":2149,"context_line":"            # loop to build up \u0027getters\u0027 using alternate indexes"},{"line_number":2150,"context_line":"            # if they are available and needed.  Getters are grouped"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_ce92af9f","line":2147,"in_reply_to":"3a50d1a3_433bd89c","updated":"2015-07-21 01:02:25.000000000","message":"currently its all used but that\u0027s why I said its a little hacky now, too many variables and I\u0027m sure I can simplify but wanted to share what\u0027s working \"as is\"","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"785226288ca21679032960edbd78cf75ad3c402b","unresolved":false,"context_lines":[{"line_number":2258,"context_line":"                    else:"},{"line_number":2259,"context_line":"                        gets_to_spawn \u003d parity_to_try"},{"line_number":2260,"context_line":"                        parity_to_try \u003d 0"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"            # a valid set of FA\u0027s has been found with this etag"},{"line_number":2263,"context_line":"            if etag_to_use !\u003d -1:"},{"line_number":2264,"context_line":"                req.range \u003d orig_range"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_e3ca24a1","line":2261,"updated":"2015-07-21 00:38:47.000000000","message":"please try to pull some of this out into separate methods with docstrings","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a99f3e00a3461a9872449148a709fff6c8fdaaf1","unresolved":false,"context_lines":[{"line_number":2258,"context_line":"                    else:"},{"line_number":2259,"context_line":"                        gets_to_spawn \u003d parity_to_try"},{"line_number":2260,"context_line":"                        parity_to_try \u003d 0"},{"line_number":2261,"context_line":""},{"line_number":2262,"context_line":"            # a valid set of FA\u0027s has been found with this etag"},{"line_number":2263,"context_line":"            if etag_to_use !\u003d -1:"},{"line_number":2264,"context_line":"                req.range \u003d orig_range"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_2eea3310","line":2261,"in_reply_to":"3a50d1a3_e3ca24a1","updated":"2015-07-21 01:02:25.000000000","message":"yep","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"785226288ca21679032960edbd78cf75ad3c402b","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"                    req.swift_entity_path,"},{"line_number":2277,"context_line":"                    policy,"},{"line_number":2278,"context_line":"                    [iterator for fi, getter, iterator in"},{"line_number":2279,"context_line":"                     etag_buckets[etag_to_use]],"},{"line_number":2280,"context_line":"                    range_specs, fa_length, obj_length,"},{"line_number":2281,"context_line":"                    self.app.logger)"},{"line_number":2282,"context_line":"                resp \u003d Response("}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_03863013","line":2279,"updated":"2015-07-21 00:38:47.000000000","message":"so I don\u0027t think we\u0027re being particularly aggressive about actually closing down the unneeded backend connections...","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a99f3e00a3461a9872449148a709fff6c8fdaaf1","unresolved":false,"context_lines":[{"line_number":2276,"context_line":"                    req.swift_entity_path,"},{"line_number":2277,"context_line":"                    policy,"},{"line_number":2278,"context_line":"                    [iterator for fi, getter, iterator in"},{"line_number":2279,"context_line":"                     etag_buckets[etag_to_use]],"},{"line_number":2280,"context_line":"                    range_specs, fa_length, obj_length,"},{"line_number":2281,"context_line":"                    self.app.logger)"},{"line_number":2282,"context_line":"                resp \u003d Response("}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_6ee83b11","line":2279,"in_reply_to":"3a50d1a3_03863013","updated":"2015-07-21 01:02:25.000000000","message":"not sure I understand the comment, can you expand on that a bit?","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"}],"test/unit/proxy/controllers/test_obj.py":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"9c3be722867499bbb57715f6f727a64849cdbd21","unresolved":false,"context_lines":[{"line_number":945,"context_line":"        req \u003d swift.common.swob.Request.blank(\u0027/v1/a/c/o\u0027,"},{"line_number":946,"context_line":"                                              headers\u003d{\u0027X-Newest\u0027: \u0027true\u0027})"},{"line_number":947,"context_line":"        codes \u003d [200] * self.policy.ec_ndata"},{"line_number":948,"context_line":"        req \u003d swift.common.swob.Request.blank(\u0027/v1/a/c/o\u0027)"},{"line_number":949,"context_line":"        headers \u003d []"},{"line_number":950,"context_line":"        for i in range(self.policy.ec_ndata):"},{"line_number":951,"context_line":"            headers.append({\u0027X-Object-Sysmeta-Ec-Frag-Index\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_36f9dcc7","line":948,"updated":"2015-07-14 20:43:54.000000000","message":"doh, need to delete this line","commit_id":"d43deb5e6616ebe90415d633496af0a2331c6553"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"9c3be722867499bbb57715f6f727a64849cdbd21","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"        etag \u003d md5(test_data).hexdigest()"},{"line_number":1429,"context_line":"        ec_archive_bodies \u003d self._make_ec_archive_bodies(test_data)"},{"line_number":1430,"context_line":"        headers \u003d []"},{"line_number":1431,"context_line":"        fi \u003d 0"},{"line_number":1432,"context_line":"        for body in ec_archive_bodies:"},{"line_number":1433,"context_line":"            headers.append({\u0027X-Object-Sysmeta-Ec-Etag\u0027: etag,"},{"line_number":1434,"context_line":"                           \u0027X-Object-Sysmeta-Ec-Frag-Index\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a41bdd9_16d13823","line":1431,"updated":"2015-07-14 20:43:54.000000000","message":"note to self: use index \u0026 enumerate here and also below","commit_id":"d43deb5e6616ebe90415d633496af0a2331c6553"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"785226288ca21679032960edbd78cf75ad3c402b","unresolved":false,"context_lines":[{"line_number":6704,"context_line":"                                headers\u003d{\"X-Auth-Token\": \"t\"})"},{"line_number":6705,"context_line":"        resp \u003d get_req.get_response(prosrv)"},{"line_number":6706,"context_line":"        self.assertEqual(resp.status_int, 200)"},{"line_number":6707,"context_line":"        self.assertEqual(resp.body, obj_txt)"},{"line_number":6708,"context_line":""},{"line_number":6709,"context_line":""},{"line_number":6710,"context_line":"class TestObjectECRangedGET(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_833000ea","line":6707,"updated":"2015-07-21 00:38:47.000000000","message":"cool test!","commit_id":"064234d82c7dd788afee1d2f7d142cc8edd03521"}]}
