)]}'
{"swift/obj/diskfile.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"83ee0a44e20ef94a77104d4bda7819f788a48ff8","unresolved":false,"context_lines":[{"line_number":751,"context_line":"            rv \u003d \u0027%s%s\u0027 % (rv, ext)"},{"line_number":752,"context_line":"        return rv"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"    def parse_on_disk_filename(self, filename, policy\u003dNone):"},{"line_number":755,"context_line":"        \"\"\""},{"line_number":756,"context_line":"        Parse an on disk file name."},{"line_number":757,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_91295984","line":754,"updated":"2018-11-06 22:27:35.000000000","message":"I\u0027d be okay with using a positional parameter here. In fact, maybe even call it \"policy_unused\". Or, omit completely, because ... (see line 3224)","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"637a4aefb05bb5f0f59c5da3b63258351dc09f7a","unresolved":false,"context_lines":[{"line_number":751,"context_line":"            rv \u003d \u0027%s%s\u0027 % (rv, ext)"},{"line_number":752,"context_line":"        return rv"},{"line_number":753,"context_line":""},{"line_number":754,"context_line":"    def parse_on_disk_filename(self, filename, policy\u003dNone):"},{"line_number":755,"context_line":"        \"\"\""},{"line_number":756,"context_line":"        Parse an on disk file name."},{"line_number":757,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_cc8f3a74","line":754,"in_reply_to":"3f79a3b5_91295984","updated":"2018-11-07 00:33:43.000000000","message":"Can\u0027t omit -- L920 will complain \"TypeError: parse_on_disk_filename() got an unexpected keyword argument \u0027policy\u0027\" (or some similar message if we switch to a positional param).\n\nDidn\u0027t really want to make it required since there are a few tests that weren\u0027t passing policy... but w/e, I already have to fix up a bunch of tests...","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"83ee0a44e20ef94a77104d4bda7819f788a48ff8","unresolved":false,"context_lines":[{"line_number":862,"context_line":"        return self._split_list("},{"line_number":863,"context_line":"            file_info_list, lambda x: x[\u0027timestamp\u0027] \u003e\u003d timestamp)"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def get_ondisk_files(self, files, datadir, verify\u003dTrue, **kwargs):"},{"line_number":866,"context_line":"        \"\"\""},{"line_number":867,"context_line":"        Given a simple list of files names, determine the files that constitute"},{"line_number":868,"context_line":"        a valid fileset i.e. a set of files that defines the state of an"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_3674fb03","line":865,"updated":"2018-11-06 22:27:35.000000000","message":"You know, adding policy\u003dNone here would remove the need to do kwargs.get() below. Or did you do it because you didn\u0027t want to add :param policy: comment?","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"637a4aefb05bb5f0f59c5da3b63258351dc09f7a","unresolved":false,"context_lines":[{"line_number":862,"context_line":"        return self._split_list("},{"line_number":863,"context_line":"            file_info_list, lambda x: x[\u0027timestamp\u0027] \u003e\u003d timestamp)"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def get_ondisk_files(self, files, datadir, verify\u003dTrue, **kwargs):"},{"line_number":866,"context_line":"        \"\"\""},{"line_number":867,"context_line":"        Given a simple list of files names, determine the files that constitute"},{"line_number":868,"context_line":"        a valid fileset i.e. a set of files that defines the state of an"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6c95c63d","line":865,"in_reply_to":"3f79a3b5_3674fb03","updated":"2018-11-07 00:33:43.000000000","message":"Done","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"637a4aefb05bb5f0f59c5da3b63258351dc09f7a","unresolved":false,"context_lines":[{"line_number":920,"context_line":"                    afile, policy\u003dkwargs.get(\u0027policy\u0027))"},{"line_number":921,"context_line":"                file_info[\u0027filename\u0027] \u003d afile"},{"line_number":922,"context_line":"                exts[file_info[\u0027ext\u0027]].append(file_info)"},{"line_number":923,"context_line":"            except DiskFileError as e:"},{"line_number":924,"context_line":"                file_path \u003d os.path.join(datadir or \u0027\u0027, afile)"},{"line_number":925,"context_line":"                results.setdefault(\u0027unexpected\u0027, []).append(file_path)"},{"line_number":926,"context_line":"                # log warnings if it\u0027s not a rsync temp file"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_ccd2dacf","line":923,"updated":"2018-11-07 00:33:43.000000000","message":"Oh yeah, and while the crux of the change is down in ECDiskFileManager.validate_fragment_index, the *desired effect* is that we drop into this block and log \"Unexpected file ...\"","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"83ee0a44e20ef94a77104d4bda7819f788a48ff8","unresolved":false,"context_lines":[{"line_number":2981,"context_line":"            # sure that the fragment index is included in object sysmeta."},{"line_number":2982,"context_line":"            fi \u003d metadata.setdefault(\u0027X-Object-Sysmeta-Ec-Frag-Index\u0027,"},{"line_number":2983,"context_line":"                                     self._diskfile._frag_index)"},{"line_number":2984,"context_line":"            fi \u003d self.manager.validate_fragment_index(fi)"},{"line_number":2985,"context_line":"            self._diskfile._frag_index \u003d fi"},{"line_number":2986,"context_line":"            # defer cleanup until commit() writes makes diskfile durable"},{"line_number":2987,"context_line":"            cleanup \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_b639eb40","line":2984,"updated":"2018-11-06 22:27:35.000000000","message":"You don\u0027t want to use self._diskfile.policy here?","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"637a4aefb05bb5f0f59c5da3b63258351dc09f7a","unresolved":false,"context_lines":[{"line_number":2981,"context_line":"            # sure that the fragment index is included in object sysmeta."},{"line_number":2982,"context_line":"            fi \u003d metadata.setdefault(\u0027X-Object-Sysmeta-Ec-Frag-Index\u0027,"},{"line_number":2983,"context_line":"                                     self._diskfile._frag_index)"},{"line_number":2984,"context_line":"            fi \u003d self.manager.validate_fragment_index(fi)"},{"line_number":2985,"context_line":"            self._diskfile._frag_index \u003d fi"},{"line_number":2986,"context_line":"            # defer cleanup until commit() writes makes diskfile durable"},{"line_number":2987,"context_line":"            cleanup \u003d False"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_0c6c52cd","line":2984,"in_reply_to":"3f79a3b5_b639eb40","updated":"2018-11-07 00:33:43.000000000","message":"Done","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ff5ed6e645b91f814f7eda5211a3e87c4044bc78","unresolved":false,"context_lines":[{"line_number":3137,"context_line":"            msg \u003d \u0027Fragment index must be less than %d for a %d+%d policy: %s\u0027"},{"line_number":3138,"context_line":"            raise DiskFileError(msg % ("},{"line_number":3139,"context_line":"                policy.ec_ndata + policy.ec_nparity,"},{"line_number":3140,"context_line":"                policy.ec_ndata, policy.ec_nparity, frag_index))"},{"line_number":3141,"context_line":"        return frag_index"},{"line_number":3142,"context_line":""},{"line_number":3143,"context_line":"    def make_on_disk_filename(self, timestamp, ext\u003dNone, frag_index\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_e0f1dd97","line":3140,"updated":"2018-11-06 20:24:00.000000000","message":"This here\u0027s the key; all the rest is just plumbing :-/\n\nMaybe could get cleaned up better?","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"83ee0a44e20ef94a77104d4bda7819f788a48ff8","unresolved":false,"context_lines":[{"line_number":3222,"context_line":"                \u0027durable\u0027: durable"},{"line_number":3223,"context_line":"            }"},{"line_number":3224,"context_line":"        rv \u003d super(ECDiskFileManager, self).parse_on_disk_filename("},{"line_number":3225,"context_line":"            filename, policy)"},{"line_number":3226,"context_line":"        rv[\u0027frag_index\u0027] \u003d None"},{"line_number":3227,"context_line":"        return rv"},{"line_number":3228,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_514d016f","line":3225,"updated":"2018-11-06 22:27:35.000000000","message":"... because it is unnecessary to pass policy up, isn\u0027t it? I presume you meant to maintain the uniformity, but then the frag_index is not passed, so why?","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"637a4aefb05bb5f0f59c5da3b63258351dc09f7a","unresolved":false,"context_lines":[{"line_number":3222,"context_line":"                \u0027durable\u0027: durable"},{"line_number":3223,"context_line":"            }"},{"line_number":3224,"context_line":"        rv \u003d super(ECDiskFileManager, self).parse_on_disk_filename("},{"line_number":3225,"context_line":"            filename, policy)"},{"line_number":3226,"context_line":"        rv[\u0027frag_index\u0027] \u003d None"},{"line_number":3227,"context_line":"        return rv"},{"line_number":3228,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_4c9b2ac7","line":3225,"in_reply_to":"3f79a3b5_514d016f","updated":"2018-11-07 00:33:43.000000000","message":"Ya, this is for uniformity. I could drop it -- it just feels a little weird. Probably worth thinking about what an out-of-tree diskfile (like swift-on-file) should be expected to implement...","commit_id":"cfddb07a0c4ea64fb24d15d1347ddefb42cd1666"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"895485d16df059879773a78fcc8982ebd53fe57a","unresolved":false,"context_lines":[{"line_number":748,"context_line":"            rv \u003d \u0027%s%s\u0027 % (rv, ext)"},{"line_number":749,"context_line":"        return rv"},{"line_number":750,"context_line":""},{"line_number":751,"context_line":"    def parse_on_disk_filename(self, filename, policy):"},{"line_number":752,"context_line":"        \"\"\""},{"line_number":753,"context_line":"        Parse an on disk file name."},{"line_number":754,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_8e6476b5","line":751,"updated":"2018-11-12 18:46:34.000000000","message":"Need the unused arg for replicated so we can include it as an arg in get_ondisk_files (which is used for both replicated and EC).","commit_id":"0d9c5eee80918e3442e7f8a198c6f2a9c44ce773"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3a329e05b98d9f7e6cac5eda78cefebc041ec2e4","unresolved":false,"context_lines":[{"line_number":3210,"context_line":"        Return int representation of frag_index, or raise a DiskFileError if"},{"line_number":3211,"context_line":"        frag_index is not a whole number."},{"line_number":3212,"context_line":""},{"line_number":3213,"context_line":"        :param frag_index: a fragment archive index"},{"line_number":3214,"context_line":"        \"\"\""},{"line_number":3215,"context_line":"        try:"},{"line_number":3216,"context_line":"            frag_index \u003d int(str(frag_index))"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_37a7b2be","line":3213,"updated":"2018-11-14 04:16:31.000000000","message":":param policy: ...","commit_id":"0d9c5eee80918e3442e7f8a198c6f2a9c44ce773"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3a329e05b98d9f7e6cac5eda78cefebc041ec2e4","unresolved":false,"context_lines":[{"line_number":3264,"context_line":"        and possibly a durable marker, both of which which must be stripped off"},{"line_number":3265,"context_line":"        to retrieve the timestamp."},{"line_number":3266,"context_line":""},{"line_number":3267,"context_line":"        :param filename: the file name including extension"},{"line_number":3268,"context_line":"        :returns: a dict, with keys for timestamp, frag_index, durable, ext and"},{"line_number":3269,"context_line":"                  ctype_timestamp:"},{"line_number":3270,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_dd8bff20","line":3267,"updated":"2018-11-14 04:16:31.000000000","message":"policy param\n\nOK so quite a few of these. Maybe a diff would be better :)","commit_id":"0d9c5eee80918e3442e7f8a198c6f2a9c44ce773"}],"test/unit/obj/test_diskfile.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8cafb332daa6881e41263d9f76a625b89786e4ee","unresolved":false,"context_lines":[{"line_number":2597,"context_line":"            # .data requires a frag_index kwarg"},{"line_number":2598,"context_line":"            mgr.make_on_disk_filename(ts, \u0027.data\u0027)"},{"line_number":2599,"context_line":""},{"line_number":2600,"context_line":"        for frag in (None, \u0027foo\u0027, \u00271.314\u0027, 1.314, -2, \u0027-2\u0027):"},{"line_number":2601,"context_line":"            with self.assertRaises(DiskFileError):"},{"line_number":2602,"context_line":"                mgr.make_on_disk_filename(ts, \u0027.data\u0027, frag_index\u003dfrag)"},{"line_number":2603,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ec3c76eb","line":2600,"updated":"2018-11-07 00:37:19.000000000","message":"Unfortunately, make_on_disk_filename doesn\u0027t have a policy in hand to do the extra validation, or we could add 14 here :-/","commit_id":"3dd4909434d4de8af4a4a8352100be10299c0704"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8cafb332daa6881e41263d9f76a625b89786e4ee","unresolved":false,"context_lines":[{"line_number":5366,"context_line":"    def test_data_file_errors_bad_frag_index(self):"},{"line_number":5367,"context_line":"        policy \u003d POLICIES.default"},{"line_number":5368,"context_line":"        df_mgr \u003d self.df_router[policy]"},{"line_number":5369,"context_line":"        for bad_value in (\u0027foo\u0027, \u0027-2\u0027, -2, \u00273.14\u0027, 3.14, \u002714\u0027, 14, \u0027999\u0027):"},{"line_number":5370,"context_line":"            # check that bad frag_index set by constructor arg raises error"},{"line_number":5371,"context_line":"            # as soon as diskfile is constructed, before data is written"},{"line_number":5372,"context_line":"            self.assertRaises(DiskFileError, self._simple_get_diskfile,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ec31d60a","line":5369,"updated":"2018-11-07 00:37:19.000000000","message":"Some proof of the new error.","commit_id":"3dd4909434d4de8af4a4a8352100be10299c0704"}]}
