)]}'
{"doc/source/overview_erasure_code.rst":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cd15c3762a2424d925466162c514bb9de8e86cff","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        1418673556.92690.durable"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"Proxy Server"},{"line_number":360,"context_line":"------------"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"fa6399be_1a021d3f","line":358,"updated":"2016-10-10 19:27:21.000000000","message":"nice changes!","commit_id":"b13b49a27caac17ae55b19f315d5ce31801c9522"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cd15c3762a2424d925466162c514bb9de8e86cff","unresolved":false,"context_lines":[{"line_number":473,"context_line":"         --MIMEboundary--"},{"line_number":474,"context_line":"    \u003cobject server renames \u003cts\u003e#\u003cfrag_index\u003e.data to \u003cts\u003e#\u003cfrag_index\u003e#d.data\u003e"},{"line_number":475,"context_line":"    obj:   20x"},{"line_number":476,"context_line":"    \u003cproxy waits to receive \u003e\u003d2 2xx responses\u003e"},{"line_number":477,"context_line":"    proxy: 2xx -\u003e client"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"A few key points on the durable state of a fragment archive:"}],"source_content_type":"text/x-rst","patch_set":5,"id":"1a95cdbc_e824d160","line":476,"range":{"start_line":476,"start_character":5,"end_line":476,"end_character":45},"updated":"2016-10-10 19:27:21.000000000","message":"should this say: \"proxy waits to receive \u0027ec_ndata + 1\u0027 2xx responses\"","commit_id":"b13b49a27caac17ae55b19f315d5ce31801c9522"}],"swift/obj/diskfile.py":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"ab561953834bb1868865fa3661039f89f121f5cc","unresolved":false,"context_lines":[{"line_number":2528,"context_line":"            except (OSError, IOError) as err:"},{"line_number":2529,"context_line":"                msg \u003d (_(\u0027Problem renaming data file to %(file)s (%(err)s)\u0027) %"},{"line_number":2530,"context_line":"                       {\u0027file\u0027: durable_data_file_path, \u0027err\u0027: err})"},{"line_number":2531,"context_line":"                self.manager.logger.error(msg)"},{"line_number":2532,"context_line":"                exc \u003d DiskFileError(str(err))"},{"line_number":2533,"context_line":"            else:"},{"line_number":2534,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_ea4c2d44","line":2531,"range":{"start_line":2531,"start_character":36,"end_line":2531,"end_character":41},"updated":"2016-09-13 16:32:44.000000000","message":"just noticed this log message is an error and not an exception as the other two in the method are.","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"26813d28cea8ed5cbc2c7492a314355f440f20f7","unresolved":false,"context_lines":[{"line_number":2528,"context_line":"            except (OSError, IOError) as err:"},{"line_number":2529,"context_line":"                msg \u003d (_(\u0027Problem renaming data file to %(file)s (%(err)s)\u0027) %"},{"line_number":2530,"context_line":"                       {\u0027file\u0027: durable_data_file_path, \u0027err\u0027: err})"},{"line_number":2531,"context_line":"                self.manager.logger.error(msg)"},{"line_number":2532,"context_line":"                exc \u003d DiskFileError(str(err))"},{"line_number":2533,"context_line":"            else:"},{"line_number":2534,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_cde9841c","line":2531,"range":{"start_line":2531,"start_character":36,"end_line":2531,"end_character":41},"in_reply_to":"9a89bdaa_ea4c2d44","updated":"2016-09-29 17:37:59.000000000","message":"Done - also the DiskFileError should probably be initialised with the msg not just the err at line 2532","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"78b4c85e6bd14b6bfa7898dae3e15f5fa666d735","unresolved":false,"context_lines":[{"line_number":2723,"context_line":"            frag_index \u003d self.validate_fragment_index(frag_index)"},{"line_number":2724,"context_line":"            rv \u003d timestamp.internal + \u0027#\u0027 + str(frag_index)"},{"line_number":2725,"context_line":"            if durable:"},{"line_number":2726,"context_line":"                rv \u003d rv + \u0027#d\u0027"},{"line_number":2727,"context_line":"            return \u0027%s%s\u0027 % (rv, ext or \u0027\u0027)"},{"line_number":2728,"context_line":"        return super(ECDiskFileManager, self).make_on_disk_filename("},{"line_number":2729,"context_line":"            timestamp, ext, ctype_timestamp, *a, **kw)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_0b85c9cd","line":2726,"updated":"2016-09-13 06:19:32.000000000","message":"NIT: Could just use:\n  rv +\u003d \u0027#d\u0027","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"26813d28cea8ed5cbc2c7492a314355f440f20f7","unresolved":false,"context_lines":[{"line_number":2723,"context_line":"            frag_index \u003d self.validate_fragment_index(frag_index)"},{"line_number":2724,"context_line":"            rv \u003d timestamp.internal + \u0027#\u0027 + str(frag_index)"},{"line_number":2725,"context_line":"            if durable:"},{"line_number":2726,"context_line":"                rv \u003d rv + \u0027#d\u0027"},{"line_number":2727,"context_line":"            return \u0027%s%s\u0027 % (rv, ext or \u0027\u0027)"},{"line_number":2728,"context_line":"        return super(ECDiskFileManager, self).make_on_disk_filename("},{"line_number":2729,"context_line":"            timestamp, ext, ctype_timestamp, *a, **kw)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_ade35832","line":2726,"in_reply_to":"9a89bdaa_0b85c9cd","updated":"2016-09-29 17:37:59.000000000","message":"Done","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"78b4c85e6bd14b6bfa7898dae3e15f5fa666d735","unresolved":false,"context_lines":[{"line_number":2724,"context_line":"            rv \u003d timestamp.internal + \u0027#\u0027 + str(frag_index)"},{"line_number":2725,"context_line":"            if durable:"},{"line_number":2726,"context_line":"                rv \u003d rv + \u0027#d\u0027"},{"line_number":2727,"context_line":"            return \u0027%s%s\u0027 % (rv, ext or \u0027\u0027)"},{"line_number":2728,"context_line":"        return super(ECDiskFileManager, self).make_on_disk_filename("},{"line_number":2729,"context_line":"            timestamp, ext, ctype_timestamp, *a, **kw)"},{"line_number":2730,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_6be2d5a1","line":2727,"range":{"start_line":2727,"start_character":33,"end_line":2727,"end_character":42},"updated":"2016-09-13 06:19:32.000000000","message":"NIT: I know this isn\u0027t a part of your patch, but we can only get here if ext \u003d\u003d \u0027.data\u0027 so why are we checking the existence of ext in the return, surely it\u0027ll never return \u0027\u0027 in this case?","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"26813d28cea8ed5cbc2c7492a314355f440f20f7","unresolved":false,"context_lines":[{"line_number":2724,"context_line":"            rv \u003d timestamp.internal + \u0027#\u0027 + str(frag_index)"},{"line_number":2725,"context_line":"            if durable:"},{"line_number":2726,"context_line":"                rv \u003d rv + \u0027#d\u0027"},{"line_number":2727,"context_line":"            return \u0027%s%s\u0027 % (rv, ext or \u0027\u0027)"},{"line_number":2728,"context_line":"        return super(ECDiskFileManager, self).make_on_disk_filename("},{"line_number":2729,"context_line":"            timestamp, ext, ctype_timestamp, *a, **kw)"},{"line_number":2730,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_2d5ca8ec","line":2727,"range":{"start_line":2727,"start_character":33,"end_line":2727,"end_character":42},"in_reply_to":"9a89bdaa_6be2d5a1","updated":"2016-09-29 17:37:59.000000000","message":"Done","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"78b4c85e6bd14b6bfa7898dae3e15f5fa666d735","unresolved":false,"context_lines":[{"line_number":2743,"context_line":"            * ctype_timestamp is a :class:`~swift.common.utils.Timestamp` or"},{"line_number":2744,"context_line":"              None for .meta files, otherwise None"},{"line_number":2745,"context_line":"            * ext is a string, the file extension including the leading dot or"},{"line_number":2746,"context_line":"              the empty string if the filename has no extension."},{"line_number":2747,"context_line":""},{"line_number":2748,"context_line":"        :raises DiskFileError: if any part of the filename is not able to be"},{"line_number":2749,"context_line":"                               validated."}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_2b8a8dbf","line":2746,"updated":"2016-09-13 06:19:32.000000000","message":"Missing the durable dictionary element in the return statement. Also it could be mentioned in the first part of the doc string.","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"26813d28cea8ed5cbc2c7492a314355f440f20f7","unresolved":false,"context_lines":[{"line_number":2743,"context_line":"            * ctype_timestamp is a :class:`~swift.common.utils.Timestamp` or"},{"line_number":2744,"context_line":"              None for .meta files, otherwise None"},{"line_number":2745,"context_line":"            * ext is a string, the file extension including the leading dot or"},{"line_number":2746,"context_line":"              the empty string if the filename has no extension."},{"line_number":2747,"context_line":""},{"line_number":2748,"context_line":"        :raises DiskFileError: if any part of the filename is not able to be"},{"line_number":2749,"context_line":"                               validated."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_ada9987d","line":2746,"in_reply_to":"9a89bdaa_2b8a8dbf","updated":"2016-09-29 17:37:59.000000000","message":"Done","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"3384872fe5c5695d53e332123380073acde463bd","unresolved":false,"context_lines":[{"line_number":2572,"context_line":"                os.rename(data_file_path, durable_data_file_path)"},{"line_number":2573,"context_line":"                fsync_dir(self._datadir)"},{"line_number":2574,"context_line":"            except (OSError, IOError) as err:"},{"line_number":2575,"context_line":"                msg \u003d (_(\u0027Problem renaming data file to %(file)s (%(err)s)\u0027) %"},{"line_number":2576,"context_line":"                       {\u0027file\u0027: durable_data_file_path, \u0027err\u0027: err})"},{"line_number":2577,"context_line":"                self.manager.logger.exception(msg)"},{"line_number":2578,"context_line":"                exc \u003d DiskFileError(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_7b381fa1","line":2575,"updated":"2016-09-29 21:00:11.000000000","message":"I don\u0027t think we can lose the check for ENOSPC here. From a brief look at the XFS source, I believe XFS tries to insert the new name into the directory before removing the old one, so it\u0027ll still fail on a full filesystem and should be reported.","commit_id":"e0407e7914e490ba75ad617a77352960cfca2dbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6f1afe98e11358956bb5d94135539fa023321ef","unresolved":false,"context_lines":[{"line_number":2572,"context_line":"                os.rename(data_file_path, durable_data_file_path)"},{"line_number":2573,"context_line":"                fsync_dir(self._datadir)"},{"line_number":2574,"context_line":"            except (OSError, IOError) as err:"},{"line_number":2575,"context_line":"                msg \u003d (_(\u0027Problem renaming data file to %(file)s (%(err)s)\u0027) %"},{"line_number":2576,"context_line":"                       {\u0027file\u0027: durable_data_file_path, \u0027err\u0027: err})"},{"line_number":2577,"context_line":"                self.manager.logger.exception(msg)"},{"line_number":2578,"context_line":"                exc \u003d DiskFileError(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_3d7660a4","line":2575,"in_reply_to":"3a98d1f4_7b381fa1","updated":"2016-09-30 13:51:05.000000000","message":"good call. Also seems like there was no test coverage for these lines.","commit_id":"e0407e7914e490ba75ad617a77352960cfca2dbd"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a6f1afe98e11358956bb5d94135539fa023321ef","unresolved":false,"context_lines":[{"line_number":2585,"context_line":"                        {\u0027datadir\u0027: self._datadir, \u0027err\u0027: os_err})"},{"line_number":2586,"context_line":"        except Exception as err:"},{"line_number":2587,"context_line":"            msg \u003d (_(\u0027Problem marking data file durable %(file)s (%(err)s)\u0027) %"},{"line_number":2588,"context_line":"                   {\u0027file\u0027: durable_data_file_path, \u0027err\u0027: err})"},{"line_number":2589,"context_line":"            self.manager.logger.exception(msg)"},{"line_number":2590,"context_line":"            exc \u003d DiskFileError(msg)"},{"line_number":2591,"context_line":"        if exc:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a98d1f4_7d7aa878","line":2588,"updated":"2016-09-30 13:51:05.000000000","message":"params dict should be passed as a second arg to logger.exception.\n\nAlso, we should not translate exception message strings.","commit_id":"e0407e7914e490ba75ad617a77352960cfca2dbd"}],"test/probe/test_reconstructor_durable.py":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cd15c3762a2424d925466162c514bb9de8e86cff","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                           self.object_name, headers\u003dheaders_post)"},{"line_number":145,"context_line":"        del headers_post[\u0027X-Auth-Token\u0027]  # WTF, where did this come from?"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # built up a list of node lists to make non-durable,"},{"line_number":148,"context_line":"        # first try a single node"},{"line_number":149,"context_line":"        # then adjacent nodes and then nodes \u003e1 node apart"},{"line_number":150,"context_line":"        opart, onodes \u003d self.object_ring.get_nodes("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_28a6b9ad","line":147,"range":{"start_line":147,"start_character":14,"end_line":147,"end_character":15},"updated":"2016-10-10 19:27:21.000000000","message":"build","commit_id":"b13b49a27caac17ae55b19f315d5ce31801c9522"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"cd15c3762a2424d925466162c514bb9de8e86cff","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                           self.object_name, headers\u003dheaders_post)"},{"line_number":145,"context_line":"        del headers_post[\u0027X-Auth-Token\u0027]  # WTF, where did this come from?"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # built up a list of node lists to make non-durable,"},{"line_number":148,"context_line":"        # first try a single node"},{"line_number":149,"context_line":"        # then adjacent nodes and then nodes \u003e1 node apart"},{"line_number":150,"context_line":"        opart, onodes \u003d self.object_ring.get_nodes("},{"line_number":151,"context_line":"            self.account, self.container_name, self.object_name)"},{"line_number":152,"context_line":"        single_node \u003d [random.choice(onodes)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a95cdbc_c89ab513","line":149,"range":{"start_line":147,"start_character":7,"end_line":149,"end_character":58},"updated":"2016-10-10 19:27:21.000000000","message":"I\u0027m trying to understand the purpose of these lists?\nAt first I thought was to remove the \"durable state\" in all the nodes in the list (e.g., far_nodes) and then test the reconstruction, but it seems to be removing the durable state and testing reconstruction one single node at a time, since it all happens in _check_node.\n\nIf that\u0027s the case, why build three different lists? why not just pick random nodes? or maybe i\u0027m mis-understanding something, in that case sorry for the noise.\n\n....\n\nI was thinking of something like this: https://da.gd/GyaO","commit_id":"b13b49a27caac17ae55b19f315d5ce31801c9522"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"5be38626b2600b2be4899df9a09fb5b2cc7d17bb","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                           self.object_name, headers\u003dheaders_post)"},{"line_number":145,"context_line":"        del headers_post[\u0027X-Auth-Token\u0027]  # WTF, where did this come from?"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        # built up a list of node lists to make non-durable,"},{"line_number":148,"context_line":"        # first try a single node"},{"line_number":149,"context_line":"        # then adjacent nodes and then nodes \u003e1 node apart"},{"line_number":150,"context_line":"        opart, onodes \u003d self.object_ring.get_nodes("},{"line_number":151,"context_line":"            self.account, self.container_name, self.object_name)"},{"line_number":152,"context_line":"        single_node \u003d [random.choice(onodes)]"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_f8029f3d","line":149,"range":{"start_line":147,"start_character":7,"end_line":149,"end_character":58},"in_reply_to":"1a95cdbc_c89ab513","updated":"2016-10-11 19:22:16.000000000","message":"After talking to Alistair on IRC, I realized he wrote some great tests[0] that would cover these tests and also when the .data file themselves get deleted. I made a suggestion there to just add the checks that the durable state is also reconstructed and I think we could probably even remove this file entirely. \n\nEither way, any change would happen either on the other patch (i.e., 376630) or a new one, no need to make changes here.\n\n[0] - https://review.openstack.org/#/c/376630/1/test/probe/test_reconstructor_rebuild.py@247","commit_id":"b13b49a27caac17ae55b19f315d5ce31801c9522"}],"test/unit/obj/test_diskfile.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"78b4c85e6bd14b6bfa7898dae3e15f5fa666d735","unresolved":false,"context_lines":[{"line_number":1633,"context_line":"        # here due to the anomalous scenario as commented above"},{"line_number":1634,"context_line":""},{"line_number":1635,"context_line":"    def test_get_ondisk_files_with_ec_policy_and_frag_index(self):"},{"line_number":1636,"context_line":"        # Each scenario specifies a list of (filename, extension) tuples. If"},{"line_number":1637,"context_line":"        # extension is set then that filename should be returned by the method"},{"line_number":1638,"context_line":"        # under test for that extension type."},{"line_number":1639,"context_line":"        scenarios \u003d [[(\u00270000000007.00000#2#d.data\u0027, False, True),"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_2e7d3b1c","line":1636,"range":{"start_line":1636,"start_character":44,"end_line":1636,"end_character":65},"updated":"2016-09-13 06:19:32.000000000","message":"(filename, extension, [survives])\n\nOr rather, it looks like _test_get_ondisk_files only uses to first 2, and your going to the effort of defining the survives below, but it\u0027ll never be used, so maybe it\u0027ll be better if we just lost the survives the in scenarios below.","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"26813d28cea8ed5cbc2c7492a314355f440f20f7","unresolved":false,"context_lines":[{"line_number":1633,"context_line":"        # here due to the anomalous scenario as commented above"},{"line_number":1634,"context_line":""},{"line_number":1635,"context_line":"    def test_get_ondisk_files_with_ec_policy_and_frag_index(self):"},{"line_number":1636,"context_line":"        # Each scenario specifies a list of (filename, extension) tuples. If"},{"line_number":1637,"context_line":"        # extension is set then that filename should be returned by the method"},{"line_number":1638,"context_line":"        # under test for that extension type."},{"line_number":1639,"context_line":"        scenarios \u003d [[(\u00270000000007.00000#2#d.data\u0027, False, True),"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_5b636ddc","line":1636,"range":{"start_line":1636,"start_character":44,"end_line":1636,"end_character":65},"in_reply_to":"9a89bdaa_2e7d3b1c","updated":"2016-09-29 17:37:59.000000000","message":"The third item in the tuples is now used since this landed [1] since it is passed to _test_cleanup_ondisk_files. I\u0027ll fix the comment.\n\n[1] https://review.openstack.org/#/c/215276/43/test/unit/obj/test_diskfile.py@1615","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"78b4c85e6bd14b6bfa7898dae3e15f5fa666d735","unresolved":false,"context_lines":[{"line_number":1775,"context_line":"             (\u0027%s.durable\u0027 % much_older, False, False)],"},{"line_number":1776,"context_line":""},{"line_number":1777,"context_line":"            # .meta not reclaimed if there is legacy durable data"},{"line_number":1778,"context_line":"            [(\u0027%s.meta\u0027 % older, \u0027.meta\u0027),"},{"line_number":1779,"context_line":"             (\u0027%s#4.data\u0027 % much_older, False, True),"},{"line_number":1780,"context_line":"             (\u0027%s.durable\u0027 % much_older, \u0027.durable\u0027, True)],"},{"line_number":1781,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_8ef6475b","line":1778,"updated":"2016-09-13 06:19:32.000000000","message":"NIT: Do we need a True added here:\n\n  (\u0027%s.meta\u0027 % older, \u0027.meta\u0027, True),","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"26813d28cea8ed5cbc2c7492a314355f440f20f7","unresolved":false,"context_lines":[{"line_number":1775,"context_line":"             (\u0027%s.durable\u0027 % much_older, False, False)],"},{"line_number":1776,"context_line":""},{"line_number":1777,"context_line":"            # .meta not reclaimed if there is legacy durable data"},{"line_number":1778,"context_line":"            [(\u0027%s.meta\u0027 % older, \u0027.meta\u0027),"},{"line_number":1779,"context_line":"             (\u0027%s#4.data\u0027 % much_older, False, True),"},{"line_number":1780,"context_line":"             (\u0027%s.durable\u0027 % much_older, \u0027.durable\u0027, True)],"},{"line_number":1781,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_1bc5658d","line":1778,"in_reply_to":"9a89bdaa_8ef6475b","updated":"2016-09-29 17:37:59.000000000","message":"It\u0027s not strictly needed because the second item in tuple ebing not None is equivalent to the third item being True. However, it would be clearer, so will fix. :)","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"78b4c85e6bd14b6bfa7898dae3e15f5fa666d735","unresolved":false,"context_lines":[{"line_number":4104,"context_line":"        ts_1 \u003d self.ts()"},{"line_number":4105,"context_line":"        df \u003d self._simple_get_diskfile(frag_index\u003d2)"},{"line_number":4106,"context_line":"        write_diskfile(df, ts_1, legacy_durable\u003dlegacy_durable)"},{"line_number":4107,"context_line":"        df \u003d self._simple_get_diskfile(frag_index\u003d2)"},{"line_number":4108,"context_line":"        with df.open():"},{"line_number":4109,"context_line":"            self.assertEqual(df.durable_timestamp, ts_1.internal)"},{"line_number":4110,"context_line":"        # verify durable timestamp does not change when metadata is written"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_31b03c43","line":4107,"updated":"2016-09-13 06:19:32.000000000","message":"Is there a reason you need to recreate the diskfile (df) again here?","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"26813d28cea8ed5cbc2c7492a314355f440f20f7","unresolved":false,"context_lines":[{"line_number":4104,"context_line":"        ts_1 \u003d self.ts()"},{"line_number":4105,"context_line":"        df \u003d self._simple_get_diskfile(frag_index\u003d2)"},{"line_number":4106,"context_line":"        write_diskfile(df, ts_1, legacy_durable\u003dlegacy_durable)"},{"line_number":4107,"context_line":"        df \u003d self._simple_get_diskfile(frag_index\u003d2)"},{"line_number":4108,"context_line":"        with df.open():"},{"line_number":4109,"context_line":"            self.assertEqual(df.durable_timestamp, ts_1.internal)"},{"line_number":4110,"context_line":"        # verify durable timestamp does not change when metadata is written"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a98d1f4_9beed589","line":4107,"in_reply_to":"9a89bdaa_31b03c43","updated":"2016-09-29 17:37:59.000000000","message":"I think the reason is to ensure that the assertions are made on a fresh instance of the diskfile class, so there is no danger that the timestamps are set by the writing to the diskfile, but not actually set when opening the diskfile.\n\nwill add comment","commit_id":"c543a5dd0605bbfaa4ede20925903491d5a55009"}],"test/unit/obj/test_reconstructor.py":[{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"a696a43ab7e6af440eeb20b11c5c31b586f9e586","unresolved":false,"context_lines":[{"line_number":1109,"context_line":"class TestGlobalSetupObjectReconstructorLegacyDurable("},{"line_number":1110,"context_line":"        TestGlobalSetupObjectReconstructor):"},{"line_number":1111,"context_line":"    # Tests for reconstructor using real objects in test partition directories."},{"line_number":1112,"context_line":"    legacy_durable \u003d True"},{"line_number":1113,"context_line":""},{"line_number":1114,"context_line":""},{"line_number":1115,"context_line":"@patch_policies(with_ec_default\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa6399be_08ceec59","line":1112,"updated":"2016-10-13 00:09:51.000000000","message":"nice","commit_id":"b13b49a27caac17ae55b19f315d5ce31801c9522"}]}
