)]}'
{"swift/obj/diskfile.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"6b8a758931009c700bfd2d14cff64db839558e02","unresolved":false,"context_lines":[{"line_number":1816,"context_line":"            deleter.put({\u0027X-Timestamp\u0027: timestamp.internal})"},{"line_number":1817,"context_line":""},{"line_number":1818,"context_line":""},{"line_number":1819,"context_line":"# TODO: move DiskFileManager definition down here"},{"line_number":1820,"context_line":"DiskFileManager.diskfile_cls \u003d DiskFile"},{"line_number":1821,"context_line":""},{"line_number":1822,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_56c1d57e","line":1819,"updated":"2015-03-19 02:10:03.000000000","message":"Do you want to move the DiskFileManager down here, so we can remove this TODO? We either do it in this patch or in the dependant one. Maybe the dependant one makes sense, but if we do it there then this will require a rebase on it, cause you touch the same code.","commit_id":"8f8c2a78d39f36940e9f334c1c92513a8a3ce5ad"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"483dc6a1bc3a014afab7db9635ed48273be0f30d","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                  name and \u003cqualifier\u003e is any policy-specific qualifying string"},{"line_number":799,"context_line":"                  found in the filename. \u003cqualifier\u003e may be None."},{"line_number":800,"context_line":"        \"\"\""},{"line_number":801,"context_line":"        return splitext(fname)[0], \u0027\u0027"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def yield_hashes(self, device, partition, policy, suffixes\u003dNone):"},{"line_number":804,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_8de858e3","line":801,"updated":"2015-03-20 10:24:13.000000000","message":"who in the replicated implementation calls fname_to_ts - can we revert that change and just it do what it was doing before?","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                  name and \u003cqualifier\u003e is any policy-specific qualifying string"},{"line_number":799,"context_line":"                  found in the filename. \u003cqualifier\u003e may be None."},{"line_number":800,"context_line":"        \"\"\""},{"line_number":801,"context_line":"        return splitext(fname)[0], \u0027\u0027"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def yield_hashes(self, device, partition, policy, suffixes\u003dNone):"},{"line_number":804,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_9a88876c","line":801,"in_reply_to":"9a80dd14_8de858e3","updated":"2015-03-20 13:14:00.000000000","message":"Removed. hangover, i thought maybe it was being called from reconstructor but if it is then we\u0027ll find out.","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"21b7fab128fc7bce9d40b4de66e06c931a68b5a4","unresolved":false,"context_lines":[{"line_number":798,"context_line":"                  name and \u003cqualifier\u003e is any policy-specific qualifying string"},{"line_number":799,"context_line":"                  found in the filename. \u003cqualifier\u003e may be None."},{"line_number":800,"context_line":"        \"\"\""},{"line_number":801,"context_line":"        return splitext(fname)[0], \u0027\u0027"},{"line_number":802,"context_line":""},{"line_number":803,"context_line":"    def yield_hashes(self, device, partition, policy, suffixes\u003dNone):"},{"line_number":804,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_ab5fbfe3","line":801,"in_reply_to":"9a80dd14_9a88876c","updated":"2015-03-20 13:25:36.000000000","message":"Argh. I was right to start with - its called in a dependent patch - https://review.openstack.org/#/c/165188/2/swift/obj/diskfile.py\n\nNow, still not sure it needs to be that way but leaving it there for now :/","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":858,"context_line":"    :param threadpool: internal thread pool to use for disk operations"},{"line_number":859,"context_line":"    \"\"\""},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    # provides override point for subclasses to modify call to invalidate_hash"},{"line_number":862,"context_line":"    def invalidate_hash(self, suffix_dir):"},{"line_number":863,"context_line":"        return self._diskfile._mgr.invalidate_hash(suffix_dir)"},{"line_number":864,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_45d9d481","line":861,"updated":"2015-03-20 13:14:00.000000000","message":"Ditto Clay\u0027s comment at line 801, This could (at point of this patch) just attached to the module function. BUT dependent patches no use this hook to redirect to a manager specific implementation so I\u0027m going to leave this untouched.","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"15e0f1a46afec98ccc65390c73e9edbd93c700f2","unresolved":false,"context_lines":[{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    # provides override point for subclasses to modify call to invalidate_hash"},{"line_number":862,"context_line":"    def invalidate_hash(self, suffix_dir):"},{"line_number":863,"context_line":"        return self._diskfile._mgr.invalidate_hash(suffix_dir)"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def __init__(self, name, datadir, fd, tmppath, bytes_per_sync, threadpool,"},{"line_number":866,"context_line":"                 diskfile):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_28b4c780","line":863,"updated":"2015-03-20 04:22:36.000000000","message":"It would be nicer to create a manager property or a DiskFile helper method that reaches into the _mgr and calls invalidate_hash rather then accessing the protected (private) variable _mgr\n\nSeeing as you do it again on line 936 but to a different manager method, maybe a readonly property is required.","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":860,"context_line":""},{"line_number":861,"context_line":"    # provides override point for subclasses to modify call to invalidate_hash"},{"line_number":862,"context_line":"    def invalidate_hash(self, suffix_dir):"},{"line_number":863,"context_line":"        return self._diskfile._mgr.invalidate_hash(suffix_dir)"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"    def __init__(self, name, datadir, fd, tmppath, bytes_per_sync, threadpool,"},{"line_number":866,"context_line":"                 diskfile):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_25730081","line":863,"in_reply_to":"9a80dd14_28b4c780","updated":"2015-03-20 13:14:00.000000000","message":"Done","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"483dc6a1bc3a014afab7db9635ed48273be0f30d","unresolved":false,"context_lines":[{"line_number":1296,"context_line":"        \"\"\""},{"line_number":1297,"context_line":"        Provides an override point to customize call to get_ondisk_files."},{"line_number":1298,"context_line":"        \"\"\""},{"line_number":1299,"context_line":"        return self._mgr.get_ondisk_files(files, datadir)"},{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"    def __init__(self, mgr, device_path, threadpool, partition,"},{"line_number":1302,"context_line":"                 account\u003dNone, container\u003dNone, obj\u003dNone, _datadir\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_2d94cc35","line":1299,"updated":"2015-03-20 10:24:13.000000000","message":"I\u0027m sorta down on more than one \u0027def get_ondisk_files\u0027 in this file unless it\u0027s two different diskfile implementations - all the aliases just mean I bounce around trying to find where it\u0027s really implemented.\n\n... could just be a personal workflow issue.","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":1296,"context_line":"        \"\"\""},{"line_number":1297,"context_line":"        Provides an override point to customize call to get_ondisk_files."},{"line_number":1298,"context_line":"        \"\"\""},{"line_number":1299,"context_line":"        return self._mgr.get_ondisk_files(files, datadir)"},{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"    def __init__(self, mgr, device_path, threadpool, partition,"},{"line_number":1302,"context_line":"                 account\u003dNone, container\u003dNone, obj\u003dNone, _datadir\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_9ac0874b","line":1299,"in_reply_to":"9a80dd14_2d94cc35","updated":"2015-03-20 13:14:00.000000000","message":"Done.\n\nYeah, sorry, just got myself in a tangle with all these refactors.\n\nI *do* want _get_ondisk_file to call self.get_ondisk_files (emphasis on self) so that in subclass the DiskFile instance can override get_ondisk_files to (a) add some kwargs and (b) direct to its manager-specific implementaiton.\n\nBut here it is fine to attach direct to the module level legacy impl.","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"15e0f1a46afec98ccc65390c73e9edbd93c700f2","unresolved":false,"context_lines":[{"line_number":1361,"context_line":"    @property"},{"line_number":1362,"context_line":"    def timestamp(self):"},{"line_number":1363,"context_line":"        if self._metadata is None:"},{"line_number":1364,"context_line":"            raise DiskFileNotOpen()"},{"line_number":1365,"context_line":"        return Timestamp(self._metadata.get(\u0027X-Timestamp\u0027))"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_7314f043","line":1364,"updated":"2015-03-20 04:22:36.000000000","message":"Add a manager property so other classes can successfully access the manager object (As mentioned above):\n\n  @property\n  def manager(self):\n      return self._mgr","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":1361,"context_line":"    @property"},{"line_number":1362,"context_line":"    def timestamp(self):"},{"line_number":1363,"context_line":"        if self._metadata is None:"},{"line_number":1364,"context_line":"            raise DiskFileNotOpen()"},{"line_number":1365,"context_line":"        return Timestamp(self._metadata.get(\u0027X-Timestamp\u0027))"},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_e55568c2","line":1364,"in_reply_to":"9a80dd14_7314f043","updated":"2015-03-20 13:14:00.000000000","message":"Done","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"15e0f1a46afec98ccc65390c73e9edbd93c700f2","unresolved":false,"context_lines":[{"line_number":1779,"context_line":"        fi \u003d metadata.get(\u0027X-Object-Sysmeta-Ec-Archive-Index\u0027)"},{"line_number":1780,"context_line":"        timestamp \u003d Timestamp(metadata[\u0027X-Timestamp\u0027]).internal"},{"line_number":1781,"context_line":"        return self._diskfile._mgr.ts_to_fname(timestamp, self._extension,"},{"line_number":1782,"context_line":"                                               frag_index\u003dfi)"},{"line_number":1783,"context_line":""},{"line_number":1784,"context_line":""},{"line_number":1785,"context_line":"class ECDiskFile(DiskFile):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_1379f492","line":1782,"updated":"2015-03-20 04:22:36.000000000","message":"Use self._diskfile.manager... notation once property has been created.","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":1779,"context_line":"        fi \u003d metadata.get(\u0027X-Object-Sysmeta-Ec-Archive-Index\u0027)"},{"line_number":1780,"context_line":"        timestamp \u003d Timestamp(metadata[\u0027X-Timestamp\u0027]).internal"},{"line_number":1781,"context_line":"        return self._diskfile._mgr.ts_to_fname(timestamp, self._extension,"},{"line_number":1782,"context_line":"                                               frag_index\u003dfi)"},{"line_number":1783,"context_line":""},{"line_number":1784,"context_line":""},{"line_number":1785,"context_line":"class ECDiskFile(DiskFile):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_6569788b","line":1782,"in_reply_to":"9a80dd14_1379f492","updated":"2015-03-20 13:14:00.000000000","message":"Done","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"15e0f1a46afec98ccc65390c73e9edbd93c700f2","unresolved":false,"context_lines":[{"line_number":1874,"context_line":"        :returns: True if a valid file set has been found, False otherwise"},{"line_number":1875,"context_line":"        \"\"\""},{"line_number":1876,"context_line":""},{"line_number":1877,"context_line":"        accept_first \u003d lambda: context.setdefault(ext, filename) \u003d\u003d filename"},{"line_number":1878,"context_line":"        discard \u003d lambda: context.setdefault(\u0027obsolete\u0027, []).append(filename)"},{"line_number":1879,"context_line":"        set_valid_fileset \u003d lambda: context.setdefault(\u0027found_valid\u0027, True)"},{"line_number":1880,"context_line":"        have_valid_fileset \u003d lambda: context.get(\u0027found_valid\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_4eb583eb","line":1877,"updated":"2015-03-20 04:22:36.000000000","message":"Took me a lot longer then it should to understand how this was working, think it\u0027s getting to the point I need another coffee or something to re-jumpstart my brain :P","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":1874,"context_line":"        :returns: True if a valid file set has been found, False otherwise"},{"line_number":1875,"context_line":"        \"\"\""},{"line_number":1876,"context_line":""},{"line_number":1877,"context_line":"        accept_first \u003d lambda: context.setdefault(ext, filename) \u003d\u003d filename"},{"line_number":1878,"context_line":"        discard \u003d lambda: context.setdefault(\u0027obsolete\u0027, []).append(filename)"},{"line_number":1879,"context_line":"        set_valid_fileset \u003d lambda: context.setdefault(\u0027found_valid\u0027, True)"},{"line_number":1880,"context_line":"        have_valid_fileset \u003d lambda: context.get(\u0027found_valid\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_25fa20bd","line":1877,"in_reply_to":"9a80dd14_4eb583eb","updated":"2015-03-20 13:14:00.000000000","message":"sounds like a comment is in order ;)","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"15e0f1a46afec98ccc65390c73e9edbd93c700f2","unresolved":false,"context_lines":[{"line_number":1909,"context_line":"            if have_valid_fileset() or not accept_first():"},{"line_number":1910,"context_line":"                discard()"},{"line_number":1911,"context_line":"        else:"},{"line_number":1912,"context_line":"            # TODO: (acoles) should we ignore or discard unexpected files?"},{"line_number":1913,"context_line":"            pass"},{"line_number":1914,"context_line":"        return have_valid_fileset()"},{"line_number":1915,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_4e5903fc","line":1912,"updated":"2015-03-20 04:22:36.000000000","message":"Hmm,  I think at this point we need to just ignore them.. as it is unknown what OPs do out in their own clusters. What if they do something strange like backup a datafile in place or something. We don\u0027t want to discard other files potentially not generated by us. \n\nBut we should mention the condition required to get to the else block in a comment, so we can see what the else block represents at a glance. \n\nBut nice work on not leaving a dangling elif, cause we know how much Clay hates them :P","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":1909,"context_line":"            if have_valid_fileset() or not accept_first():"},{"line_number":1910,"context_line":"                discard()"},{"line_number":1911,"context_line":"        else:"},{"line_number":1912,"context_line":"            # TODO: (acoles) should we ignore or discard unexpected files?"},{"line_number":1913,"context_line":"            pass"},{"line_number":1914,"context_line":"        return have_valid_fileset()"},{"line_number":1915,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_05defc3d","line":1912,"in_reply_to":"9a80dd14_4e5903fc","updated":"2015-03-20 13:14:00.000000000","message":"ok thanks for second opinion.\n\nSo I\u0027ll change to\n\n  else:\n       # don\u0027t annoy clay\n       pass\n\n;)","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"15e0f1a46afec98ccc65390c73e9edbd93c700f2","unresolved":false,"context_lines":[{"line_number":2018,"context_line":"            for filename in results.get(\u0027obsolete\u0027, []):"},{"line_number":2019,"context_line":"                remove_file(join(hsh_path, filename))"},{"line_number":2020,"context_line":"                files.remove(filename)"},{"line_number":2021,"context_line":"        return files"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_ae035f0e","line":2021,"updated":"2015-03-20 04:22:36.000000000","message":"I don\u0027t like the duplicated code here and in the other hash_cleanup_listdir, it\u0027ll make it a pain to keep up to date especially if we add more DiskFileManagers.\n\nI\u0027m not sure what to do about it, pass in a callable to be called from inside \u0027elif files\u0027 to return a list of removable files, wrap up hash_cleanup_listdir into a class so it can be subclassed or find another way to refactor... OR maybe seeing as time is precious maybe it\u0027ll be better to leave it like this for now and worry about it in the future.","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"d774bca4729ff7228e046f66315bbf490a3c9236","unresolved":false,"context_lines":[{"line_number":2018,"context_line":"            for filename in results.get(\u0027obsolete\u0027, []):"},{"line_number":2019,"context_line":"                remove_file(join(hsh_path, filename))"},{"line_number":2020,"context_line":"                files.remove(filename)"},{"line_number":2021,"context_line":"        return files"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_3adcfbe3","line":2021,"in_reply_to":"9a80dd14_ae035f0e","updated":"2015-03-20 13:14:00.000000000","message":"Agree, but feels like this is one place where we\u0027re trading off code duplication for not touching too much of the legacy implementation (yet).\n\nIn my master plan the module level HCL function will be replaced by this in a BaseDiskFileManager and we\u0027ll have subclasses of DiskFileManager override the gather_ondisk_files.","commit_id":"cc0c458f47b69b90d986665de2fa1fb0c0e5a097"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1695b7e8df880fb5547f8a48768891a1b4a4807","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"            # we encode the fragment index in the filename to allow"},{"line_number":1814,"context_line":"            # archives of different indexes to temporarily be stored"},{"line_number":1815,"context_line":"            # on the same node in certain situations"},{"line_number":1816,"context_line":"            rv +\u003d \u0027#\u0027 + str(fragment_index)"},{"line_number":1817,"context_line":"        if ext:"},{"line_number":1818,"context_line":"            rv \u003d \u0027%s%s\u0027 % (rv, ext)"},{"line_number":1819,"context_line":"        return rv"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_312ce34a","line":1816,"updated":"2015-03-23 08:31:01.000000000","message":"Could we allow a non index file name against to an ec fragment?\n\nIt might be just my confirmation but I\u0027d like to ask about this to make the semantics be clear.\n\nAssuming 4 extensions (\u0027.data\u0027, \u0027.meta\u0027, \u0027.ts\u0027, \u0027.durable\u0027) to be used, they could take file name patterns as follows:\n\n- .data: must have fragment index with #\n- .meta: doesn\u0027t have fragment index\n- .ts: doesn\u0027t have fragment_index\n- .durable: don\u0027t have fragment index\n\nAre those above right?\n\nIt might be better to make a validation for the safety to prevent the .data file missed its own index.\n\nRight now, leaving this as it is is ok to me because I could make another patch for the validation but I wanna get whether my assumption is right or not for the thing.","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"52ac008fcddafe1f26a9738f54eae560dbb14a4b","unresolved":false,"context_lines":[{"line_number":1888,"context_line":"                    set_valid_fileset()"},{"line_number":1889,"context_line":"                else:"},{"line_number":1890,"context_line":"                    t_data, fi \u003d self.fname_to_ts(filename)"},{"line_number":1891,"context_line":"                    if frag_index is None or frag_index \u003d\u003d int(fi):"},{"line_number":1892,"context_line":"                        accept_first()"},{"line_number":1893,"context_line":"                        set_valid_fileset()"},{"line_number":1894,"context_line":"                    # else: keep searching for a .data file to match frag_index"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_38a04df4","line":1891,"updated":"2015-03-22 15:00:53.000000000","message":"when would frag_index be None here?","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1695b7e8df880fb5547f8a48768891a1b4a4807","unresolved":false,"context_lines":[{"line_number":1897,"context_line":"                discard()"},{"line_number":1898,"context_line":"                set_valid_fileset()"},{"line_number":1899,"context_line":"        elif ext \u003d\u003d \u0027.data\u0027 and have_valid_fileset():"},{"line_number":1900,"context_line":"            # must have a newer .ts, discard .data"},{"line_number":1901,"context_line":"            discard()"},{"line_number":1902,"context_line":"        elif ext \u003d\u003d \u0027.ts\u0027:"},{"line_number":1903,"context_line":"            if have_valid_fileset() or not accept_first():"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_35e4ce3a","line":1900,"updated":"2015-03-23 08:31:01.000000000","message":"This comment looks for 2 lines below.","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"c836ce3c13bc5ea83d5d2ca175c8c636d77f9e08","unresolved":false,"context_lines":[{"line_number":1897,"context_line":"                discard()"},{"line_number":1898,"context_line":"                set_valid_fileset()"},{"line_number":1899,"context_line":"        elif ext \u003d\u003d \u0027.data\u0027 and have_valid_fileset():"},{"line_number":1900,"context_line":"            # must have a newer .ts, discard .data"},{"line_number":1901,"context_line":"            discard()"},{"line_number":1902,"context_line":"        elif ext \u003d\u003d \u0027.ts\u0027:"},{"line_number":1903,"context_line":"            if have_valid_fileset() or not accept_first():"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_1b81c18f","line":1900,"in_reply_to":"1a6ced46_35e4ce3a","updated":"2015-03-23 08:41:15.000000000","message":"Ah, I might get misunderstanding... I am now reconsidering about the meaning of this comment.","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1695b7e8df880fb5547f8a48768891a1b4a4807","unresolved":false,"context_lines":[{"line_number":1934,"context_line":""},{"line_number":1935,"context_line":"        return ((data_file is None or durable_file is not None)"},{"line_number":1936,"context_line":"                and (data_file is None and meta_file is None"},{"line_number":1937,"context_line":"                     and ts_file is None and durable_file is None)"},{"line_number":1938,"context_line":"                or (ts_file is not None and data_file is None"},{"line_number":1939,"context_line":"                    and meta_file is None and durable_file is None)"},{"line_number":1940,"context_line":"                or (data_file is not None and durable_file is not None"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_b5d6fec3","line":1937,"updated":"2015-03-23 08:31:01.000000000","message":"These 2 conditions union seems to result the last one condition because \"durablie_file is not None\" conflicts \"durable_file is None\" and \"data_file is None\" is included the last one...\n\ni.e. what we need is just\n\n(data_file is None and meta_file is None and ts_file is None and durable_file is None)\n\nfor here.\n\n(memo) no files exists, here.","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1695b7e8df880fb5547f8a48768891a1b4a4807","unresolved":false,"context_lines":[{"line_number":1936,"context_line":"                and (data_file is None and meta_file is None"},{"line_number":1937,"context_line":"                     and ts_file is None and durable_file is None)"},{"line_number":1938,"context_line":"                or (ts_file is not None and data_file is None"},{"line_number":1939,"context_line":"                    and meta_file is None and durable_file is None)"},{"line_number":1940,"context_line":"                or (data_file is not None and durable_file is not None"},{"line_number":1941,"context_line":"                    and ts_file is None)"},{"line_number":1942,"context_line":"                or (durable_file is not None and meta_file is None"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_f55a364f","line":1939,"updated":"2015-03-23 08:31:01.000000000","message":"(memo) only ts_file exists.","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1695b7e8df880fb5547f8a48768891a1b4a4807","unresolved":false,"context_lines":[{"line_number":1938,"context_line":"                or (ts_file is not None and data_file is None"},{"line_number":1939,"context_line":"                    and meta_file is None and durable_file is None)"},{"line_number":1940,"context_line":"                or (data_file is not None and durable_file is not None"},{"line_number":1941,"context_line":"                    and ts_file is None)"},{"line_number":1942,"context_line":"                or (durable_file is not None and meta_file is None"},{"line_number":1943,"context_line":"                    and ts_file is None))"},{"line_number":1944,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_751d6673","line":1941,"updated":"2015-03-23 08:31:01.000000000","message":"(memo) both data_file and durable_file exist. ts_file dosen\u0027t.","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"f1695b7e8df880fb5547f8a48768891a1b4a4807","unresolved":false,"context_lines":[{"line_number":1940,"context_line":"                or (data_file is not None and durable_file is not None"},{"line_number":1941,"context_line":"                    and ts_file is None)"},{"line_number":1942,"context_line":"                or (durable_file is not None and meta_file is None"},{"line_number":1943,"context_line":"                    and ts_file is None))"},{"line_number":1944,"context_line":""},{"line_number":1945,"context_line":"    def gather_ondisk_files(self, files, include_obsolete\u003dFalse, **kwargs):"},{"line_number":1946,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_78047b15","line":1943,"updated":"2015-03-23 08:31:01.000000000","message":"(memo) only durable_file exists...\n\nI\u0027m not sure the status would be ok or not....","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cd5d303ede8c204756a50bb9b749b960d5b7fdef","unresolved":false,"context_lines":[{"line_number":1979,"context_line":"            % results.values()"},{"line_number":1980,"context_line":"        return results"},{"line_number":1981,"context_line":""},{"line_number":1982,"context_line":"    def get_ondisk_files(self, files, datadir, **kwargs):"},{"line_number":1983,"context_line":"        \"\"\""},{"line_number":1984,"context_line":"        Given a simple list of files names, determine the files to use."},{"line_number":1985,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_c91cd56d","line":1982,"updated":"2015-03-21 22:52:50.000000000","message":"this is more of a nit, but I just noticed that we now have a module level get_ondisk_files method, the DiskFile classes have a get_ondisk_files method and the Managers also have get_ondisk_files methods, plus ECMgr has a gather_ondisk_files and a _gather_on_disk_file. It\u0027s becoming a bit confusing too follow.\n\nmmm...just noticed you already had this conversation in the previous patchset, so take it FWIW","commit_id":"8c2db45be6aee7cfe9cec58b63a03d9243493e8d"}]}
