)]}'
{"swift/obj/diskfile.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d7052ccc6d772987d9cec2ce694a12ef8113ba1d","unresolved":false,"context_lines":[{"line_number":1820,"context_line":"        do this for EC policy because it requires a 2-phase put commit"},{"line_number":1821,"context_line":"        confirmation."},{"line_number":1822,"context_line":""},{"line_number":1823,"context_line":"        :param timestamp: object put timestamp"},{"line_number":1824,"context_line":"        \"\"\""},{"line_number":1825,"context_line":"        durable_file_path \u003d join(self._datadir, timestamp + \u0027.durable\u0027)"},{"line_number":1826,"context_line":"        self._threadpool.force_run_in_thread("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b19c96c1","line":1823,"updated":"2015-03-20 10:43:24.000000000","message":"I *loathe* the use of the parameter name \"timestamp\" when the method is expecting a *string* and *not* a Timestamp.\n\nI think i fixed this in a subsequent patch...","commit_id":"0ad16d130d066da08ffe4e9669d32a4dfbe089b0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6a3095718e2555bdb386c48675713919208ff318","unresolved":false,"context_lines":[{"line_number":1820,"context_line":"        do this for EC policy because it requires a 2-phase put commit"},{"line_number":1821,"context_line":"        confirmation."},{"line_number":1822,"context_line":""},{"line_number":1823,"context_line":"        :param timestamp: object put timestamp"},{"line_number":1824,"context_line":"        \"\"\""},{"line_number":1825,"context_line":"        durable_file_path \u003d join(self._datadir, timestamp + \u0027.durable\u0027)"},{"line_number":1826,"context_line":"        self._threadpool.force_run_in_thread("}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_1a39f2f1","line":1823,"in_reply_to":"9a80dd14_b19c96c1","updated":"2015-03-20 15:07:57.000000000","message":"maybe we should go Hungarian...strTimestamp ;)\n\nI\u0027m not keen on _timestamp in the method name - we write a file, and we only do that for EC.","commit_id":"0ad16d130d066da08ffe4e9669d32a4dfbe089b0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6775e7aaa44de8577d84e81820d4b71156f0770f","unresolved":false,"context_lines":[{"line_number":945,"context_line":"        self._threadpool.force_run_in_thread("},{"line_number":946,"context_line":"            self._finalize_put, metadata, target_path)"},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"    def commit(self, timestamp):"},{"line_number":949,"context_line":"        \"\"\""},{"line_number":950,"context_line":"        Perform any operations necessary to mark the object as durable. For"},{"line_number":951,"context_line":"        replication policy type this is a no-op."}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_034afcab","line":948,"updated":"2015-03-24 15:02:26.000000000","message":"Yay!","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6775e7aaa44de8577d84e81820d4b71156f0770f","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        Perform any operations necessary to mark the object as durable. For"},{"line_number":951,"context_line":"        replication policy type this is a no-op."},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        :param timestamp: object put timestamp"},{"line_number":954,"context_line":"        \"\"\""},{"line_number":955,"context_line":"        pass"},{"line_number":956,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_c34f04bd","line":953,"updated":"2015-03-24 15:02:26.000000000","message":"as per Kota\u0027s comment below, lets say its a Timestamp instance","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c80fc3353cbcf81d3cdcd7e407077104a72432ff","unresolved":false,"context_lines":[{"line_number":950,"context_line":"        Perform any operations necessary to mark the object as durable. For"},{"line_number":951,"context_line":"        replication policy type this is a no-op."},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"        :param timestamp: object put timestamp"},{"line_number":954,"context_line":"        \"\"\""},{"line_number":955,"context_line":"        pass"},{"line_number":956,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_55bbb871","line":953,"in_reply_to":"1a6ced46_c34f04bd","updated":"2015-03-24 18:33:39.000000000","message":"Done","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"d03c8b5eedfe42dd5bbdb35403ba81a068acbf5e","unresolved":false,"context_lines":[{"line_number":1774,"context_line":"                    self.manager.hash_cleanup_listdir(self._datadir)"},{"line_number":1775,"context_line":"                except OSError:"},{"line_number":1776,"context_line":"                    logging.exception(_(\u0027Problem cleaning up %s\u0027),"},{"line_number":1777,"context_line":"                                      self._datadir)"},{"line_number":1778,"context_line":"        except OSError:"},{"line_number":1779,"context_line":"            msg \u003d (_(\u0027Problem fsyncing durable state file: %s\u0027),"},{"line_number":1780,"context_line":"                   durable_file_path)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_c55e3676","line":1777,"updated":"2015-03-24 10:04:51.000000000","message":"Might self.manager.logger.exception be better to send msg to syslog?","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c80fc3353cbcf81d3cdcd7e407077104a72432ff","unresolved":false,"context_lines":[{"line_number":1774,"context_line":"                    self.manager.hash_cleanup_listdir(self._datadir)"},{"line_number":1775,"context_line":"                except OSError:"},{"line_number":1776,"context_line":"                    logging.exception(_(\u0027Problem cleaning up %s\u0027),"},{"line_number":1777,"context_line":"                                      self._datadir)"},{"line_number":1778,"context_line":"        except OSError:"},{"line_number":1779,"context_line":"            msg \u003d (_(\u0027Problem fsyncing durable state file: %s\u0027),"},{"line_number":1780,"context_line":"                   durable_file_path)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_75b1948e","line":1777,"in_reply_to":"1a6ced46_c55e3676","updated":"2015-03-24 18:33:39.000000000","message":"Done","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"d03c8b5eedfe42dd5bbdb35403ba81a068acbf5e","unresolved":false,"context_lines":[{"line_number":1798,"context_line":"        do this for EC policy because it requires a 2-phase put commit"},{"line_number":1799,"context_line":"        confirmation."},{"line_number":1800,"context_line":""},{"line_number":1801,"context_line":"        :param timestamp: object put timestamp"},{"line_number":1802,"context_line":"        \"\"\""},{"line_number":1803,"context_line":"        durable_file_path \u003d os.path.join("},{"line_number":1804,"context_line":"            self._datadir, timestamp.internal + \u0027.durable\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_a084c8d4","line":1801,"updated":"2015-03-24 10:04:51.000000000","message":"Just a nitpick, \"Timestamp instance\" strictly.","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6775e7aaa44de8577d84e81820d4b71156f0770f","unresolved":false,"context_lines":[{"line_number":1798,"context_line":"        do this for EC policy because it requires a 2-phase put commit"},{"line_number":1799,"context_line":"        confirmation."},{"line_number":1800,"context_line":""},{"line_number":1801,"context_line":"        :param timestamp: object put timestamp"},{"line_number":1802,"context_line":"        \"\"\""},{"line_number":1803,"context_line":"        durable_file_path \u003d os.path.join("},{"line_number":1804,"context_line":"            self._datadir, timestamp.internal + \u0027.durable\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_c368e423","line":1801,"in_reply_to":"1a6ced46_a084c8d4","updated":"2015-03-24 15:02:26.000000000","message":"+1","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c80fc3353cbcf81d3cdcd7e407077104a72432ff","unresolved":false,"context_lines":[{"line_number":1798,"context_line":"        do this for EC policy because it requires a 2-phase put commit"},{"line_number":1799,"context_line":"        confirmation."},{"line_number":1800,"context_line":""},{"line_number":1801,"context_line":"        :param timestamp: object put timestamp"},{"line_number":1802,"context_line":"        \"\"\""},{"line_number":1803,"context_line":"        durable_file_path \u003d os.path.join("},{"line_number":1804,"context_line":"            self._datadir, timestamp.internal + \u0027.durable\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_95ac5037","line":1801,"in_reply_to":"1a6ced46_c368e423","updated":"2015-03-24 18:33:39.000000000","message":"Done","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"3f449de78577602ed5781dbe82564bb8bc157934","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        replication policy type this is a no-op."},{"line_number":958,"context_line":""},{"line_number":959,"context_line":"        :param timestamp: object put timestamp, an instance of"},{"line_number":960,"context_line":"                          :class:`~swift.common.utils.Timestamp`"},{"line_number":961,"context_line":"        \"\"\""},{"line_number":962,"context_line":"        pass"},{"line_number":963,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_bd1cc6c2","line":960,"updated":"2015-03-25 02:17:01.000000000","message":"Great!","commit_id":"d14245e17c1b9ea5e8ac49383d4f049725b08798"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"efd974984da8078fd843b9412acd474744221da2","unresolved":false,"context_lines":[{"line_number":1796,"context_line":"                       durable_file_path)"},{"line_number":1797,"context_line":"                exc \u003d DiskFileError(msg)"},{"line_number":1798,"context_line":"        if exc:"},{"line_number":1799,"context_line":"            logging.exception(msg)"},{"line_number":1800,"context_line":"            raise exc"},{"line_number":1801,"context_line":""},{"line_number":1802,"context_line":"    def commit(self, timestamp):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_81fde83c","line":1799,"updated":"2015-03-25 02:36:06.000000000","message":"Sorry, I missed to suggest also here to self.manager.logger :(","commit_id":"d14245e17c1b9ea5e8ac49383d4f049725b08798"}],"swift/obj/server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d7052ccc6d772987d9cec2ce694a12ef8113ba1d","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                    # got 2nd phase confirmation, write a timestamp.durable"},{"line_number":626,"context_line":"                    # state file to indicate a successful PUT"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"                writer.write_durable_timestamp(metadata[\u0027X-Timestamp\u0027])"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"                # Drain any remaining MIME docs from the socket. There"},{"line_number":631,"context_line":"                # shouldn\u0027t be any, but we must read the whole request body."}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_d103ca0a","line":628,"updated":"2015-03-20 10:43:24.000000000","message":"this fix is critical for the reconstructor - but it sure looks silly calling into a method that gives no indication it does nothing.\n\nI think ssync sends a special X-Backend-Replication header that we could use to esnure the durable always gets placed.","commit_id":"0ad16d130d066da08ffe4e9669d32a4dfbe089b0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6a3095718e2555bdb386c48675713919208ff318","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                    # got 2nd phase confirmation, write a timestamp.durable"},{"line_number":626,"context_line":"                    # state file to indicate a successful PUT"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"                writer.write_durable_timestamp(metadata[\u0027X-Timestamp\u0027])"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"                # Drain any remaining MIME docs from the socket. There"},{"line_number":631,"context_line":"                # shouldn\u0027t be any, but we must read the whole request body."}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b0d3a7ff","line":628,"in_reply_to":"9a80dd14_d103ca0a","updated":"2015-03-20 15:07:57.000000000","message":"I think if you revert the indent change then, in terms of diskfile interface, you still have to have write_durable_timestamp method on legacy DiskFile even though a call to a method that should do nothing. Why? because nothing in the code path above guarantees that you have an ECDiskFileWriter type - like, we think we do because the proxy has indicated we\u0027re doing a multiphase commit, and the proxy would only do that for an EC policy, right? But there\u0027s a huge crossover of concerns there.\n\nWe could do:\n\nfunc \u003d getattr(write, \u0027write_durable_timestamp\u0027)\nif func:\n    func(\u003cargs\u003e)\n\nBut I would rather have the method be a defined part of the diskfile API.\n\nFurthermore, it may be that this method *should* do something for a legacy DiskFileWriter i.e. call hash_cleanup_listdir. We are currently doing that twice in ECDiskFileWriter once in the finalize_put (with zero effect) and once in write_durable_timestamp. If we moved the default call to HCL to write_durable_timestamp, the ECDiskFileWriter could override to do its .durable write first then call the superclass method to do a HCL.\n\nThat said, I don\u0027t like the name \"write_durable_timestamp\" - it implies too much for what might be a no-op. And I\u0027m not sure it should pass an arg or leave the DiskFile impl to do what it needs to do.\n\nSo I\u0027m thinking:\n\n  def commit():\n      \"\"\"\n      Cause the DiskFileWriter implementation to take whatever action is necessary\n      to mark the diskfile as being valid.\n      \"\"\"","commit_id":"0ad16d130d066da08ffe4e9669d32a4dfbe089b0"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"86a11f121f92227445d1e5dfc02a1956ef689f0f","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                    # got 2nd phase confirmation, write a timestamp.durable"},{"line_number":626,"context_line":"                    # state file to indicate a successful PUT"},{"line_number":627,"context_line":""},{"line_number":628,"context_line":"                writer.write_durable_timestamp(metadata[\u0027X-Timestamp\u0027])"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"                # Drain any remaining MIME docs from the socket. There"},{"line_number":631,"context_line":"                # shouldn\u0027t be any, but we must read the whole request body."}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_da82a8ff","line":628,"updated":"2015-03-23 18:22:58.000000000","message":"I\u0027m a bit torn about seeing this very specific EC method come up as a DiskFile API, it means now that every third-party DiskFile implementation is going to need this method....\n\n----\n\nok, so just saw the conversation on patchset3 and I guess I\u0027m not the only one. I do prefer Acoles idea of at least renaming to something more generic like \"commit\". so that now you would have something like:\n  writer.write(data)\n  writer.put(metadata)\n  writer.commit()\n\nNot sure if the timestamp could be retrieved from the metadata the DF already has, so that other implementations could just use whatever data they might see fit or not any data at all.","commit_id":"92476a0c45f194b36dbb5076fc12e1a76ce7fa92"}],"test/unit/obj/test_diskfile.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6775e7aaa44de8577d84e81820d4b71156f0770f","unresolved":false,"context_lines":[{"line_number":2089,"context_line":"                              \u0027Unexpected dir listing %s\u0027 % dl)"},{"line_number":2090,"context_line":"            self.assertEqual(sorted(expected), sorted(dl))"},{"line_number":2091,"context_line":""},{"line_number":2092,"context_line":"    def test_write_durable_fsync(self):"},{"line_number":2093,"context_line":"        for policy in POLICIES:"},{"line_number":2094,"context_line":"            mock_fsync \u003d mock.MagicMock()"},{"line_number":2095,"context_line":"            df \u003d self._simple_get_diskfile(account\u003d\u0027a\u0027, container\u003d\u0027c\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_f72f5686","line":2092,"updated":"2015-03-24 15:02:26.000000000","message":"should now be test_commit_fsync","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c80fc3353cbcf81d3cdcd7e407077104a72432ff","unresolved":false,"context_lines":[{"line_number":2089,"context_line":"                              \u0027Unexpected dir listing %s\u0027 % dl)"},{"line_number":2090,"context_line":"            self.assertEqual(sorted(expected), sorted(dl))"},{"line_number":2091,"context_line":""},{"line_number":2092,"context_line":"    def test_write_durable_fsync(self):"},{"line_number":2093,"context_line":"        for policy in POLICIES:"},{"line_number":2094,"context_line":"            mock_fsync \u003d mock.MagicMock()"},{"line_number":2095,"context_line":"            df \u003d self._simple_get_diskfile(account\u003d\u0027a\u0027, container\u003d\u0027c\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_958530af","line":2092,"in_reply_to":"1a6ced46_f72f5686","updated":"2015-03-24 18:33:39.000000000","message":"Done","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"d03c8b5eedfe42dd5bbdb35403ba81a068acbf5e","unresolved":false,"context_lines":[{"line_number":2113,"context_line":"            if policy.policy_type \u003d\u003d EC_POLICY:"},{"line_number":2114,"context_line":"                durable_file \u003d \u0027%s.durable\u0027 % timestamp.internal"},{"line_number":2115,"context_line":"                self.assertTrue(durable_file in str(mock_fsync.call_args[0]))"},{"line_number":2116,"context_line":"                expected \u003d 1"},{"line_number":2117,"context_line":""},{"line_number":2118,"context_line":"    def test_write_durable_ignores_hash_cleanup_listdir_error(self):"},{"line_number":2119,"context_line":"        for policy in POLICIES:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_74a291af","line":2116,"updated":"2015-03-24 10:04:51.000000000","message":"we don\u0027t need this \"expected \u003d 1\" because expected will be override at L2108 each time in the for-loop.","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c80fc3353cbcf81d3cdcd7e407077104a72432ff","unresolved":false,"context_lines":[{"line_number":2113,"context_line":"            if policy.policy_type \u003d\u003d EC_POLICY:"},{"line_number":2114,"context_line":"                durable_file \u003d \u0027%s.durable\u0027 % timestamp.internal"},{"line_number":2115,"context_line":"                self.assertTrue(durable_file in str(mock_fsync.call_args[0]))"},{"line_number":2116,"context_line":"                expected \u003d 1"},{"line_number":2117,"context_line":""},{"line_number":2118,"context_line":"    def test_write_durable_ignores_hash_cleanup_listdir_error(self):"},{"line_number":2119,"context_line":"        for policy in POLICIES:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_b594ece2","line":2116,"in_reply_to":"1a6ced46_0c1309b9","updated":"2015-03-24 18:33:39.000000000","message":"Done","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6775e7aaa44de8577d84e81820d4b71156f0770f","unresolved":false,"context_lines":[{"line_number":2113,"context_line":"            if policy.policy_type \u003d\u003d EC_POLICY:"},{"line_number":2114,"context_line":"                durable_file \u003d \u0027%s.durable\u0027 % timestamp.internal"},{"line_number":2115,"context_line":"                self.assertTrue(durable_file in str(mock_fsync.call_args[0]))"},{"line_number":2116,"context_line":"                expected \u003d 1"},{"line_number":2117,"context_line":""},{"line_number":2118,"context_line":"    def test_write_durable_ignores_hash_cleanup_listdir_error(self):"},{"line_number":2119,"context_line":"        for policy in POLICIES:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_0c1309b9","line":2116,"in_reply_to":"1a6ced46_74a291af","updated":"2015-03-24 15:02:26.000000000","message":"agree","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"3f449de78577602ed5781dbe82564bb8bc157934","unresolved":false,"context_lines":[{"line_number":2136,"context_line":"                              \u0027Unexpected dir listing %s\u0027 % dl)"},{"line_number":2137,"context_line":"            self.assertEqual(sorted(expected), sorted(dl))"},{"line_number":2138,"context_line":""},{"line_number":2139,"context_line":"    def test_write_durable_fsync(self):"},{"line_number":2140,"context_line":"        for policy in POLICIES:"},{"line_number":2141,"context_line":"            mock_fsync \u003d mock.MagicMock()"},{"line_number":2142,"context_line":"            df \u003d self._simple_get_diskfile(account\u003d\u0027a\u0027, container\u003d\u0027c\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_3ded368c","line":2139,"updated":"2015-03-25 02:17:01.000000000","message":"Looks still working for Alistair\u0027s comment on Patch 5?","commit_id":"d14245e17c1b9ea5e8ac49383d4f049725b08798"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"3f449de78577602ed5781dbe82564bb8bc157934","unresolved":false,"context_lines":[{"line_number":2160,"context_line":"            if policy.policy_type \u003d\u003d EC_POLICY:"},{"line_number":2161,"context_line":"                durable_file \u003d \u0027%s.durable\u0027 % timestamp.internal"},{"line_number":2162,"context_line":"                self.assertTrue(durable_file in str(mock_fsync.call_args[0]))"},{"line_number":2163,"context_line":"                expected \u003d 1"},{"line_number":2164,"context_line":""},{"line_number":2165,"context_line":"    def test_write_durable_ignores_hash_cleanup_listdir_error(self):"},{"line_number":2166,"context_line":"        for policy in POLICIES:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_5d03d241","line":2163,"updated":"2015-03-25 02:17:01.000000000","message":"Looks still working for my comment on Patch 5 as well as above?","commit_id":"d14245e17c1b9ea5e8ac49383d4f049725b08798"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"46de17550fcb413f09f6c4086c3babc3232ee406","unresolved":false,"context_lines":[{"line_number":2161,"context_line":"                durable_file \u003d \u0027%s.durable\u0027 % timestamp.internal"},{"line_number":2162,"context_line":"                self.assertTrue(durable_file in str(mock_fsync.call_args[0]))"},{"line_number":2163,"context_line":""},{"line_number":2164,"context_line":"    def test_write_durable_ignores_hash_cleanup_listdir_error(self):"},{"line_number":2165,"context_line":"        for policy in POLICIES:"},{"line_number":2166,"context_line":"            # Check OSError from hash_cleanup_listdir is caught and ignored"},{"line_number":2167,"context_line":"            mock_hcl \u003d mock.MagicMock(side_effect\u003dOSError)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_d4106f03","line":2164,"updated":"2015-03-25 10:15:24.000000000","message":"Should write_durable in the function name now be called commit as well?","commit_id":"13b10ce111d595b818d55e9d5c30810e5faea971"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"46de17550fcb413f09f6c4086c3babc3232ee406","unresolved":false,"context_lines":[{"line_number":3017,"context_line":""},{"line_number":3018,"context_line":"    mgr_cls \u003d diskfile.ECDiskFileManager"},{"line_number":3019,"context_line":""},{"line_number":3020,"context_line":"    def test_write_durable_raises_DiskFileErrors(self):"},{"line_number":3021,"context_line":"        scenarios \u003d ((errno.ENOSPC, DiskFileNoSpace),"},{"line_number":3022,"context_line":"                     (errno.EDQUOT, DiskFileNoSpace),"},{"line_number":3023,"context_line":"                     (errno.ENOTDIR, DiskFileError),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a6ced46_34f543cb","line":3020,"updated":"2015-03-25 10:15:24.000000000","message":"and here","commit_id":"13b10ce111d595b818d55e9d5c30810e5faea971"}],"test/unit/obj/test_server.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"d7052ccc6d772987d9cec2ce694a12ef8113ba1d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"]"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"@patch_policies(test_policies)"},{"line_number":74,"context_line":"class TestObjectController(unittest.TestCase):"},{"line_number":75,"context_line":"    \"\"\"Test swift.obj.server.ObjectController\"\"\""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_117d626d","line":73,"updated":"2015-03-20 10:43:24.000000000","message":"I think somewhere I landed something where patch_policies grew a with_ec_default kwarg.","commit_id":"0ad16d130d066da08ffe4e9669d32a4dfbe089b0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6a3095718e2555bdb386c48675713919208ff318","unresolved":false,"context_lines":[{"line_number":70,"context_line":"]"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"@patch_policies(test_policies)"},{"line_number":74,"context_line":"class TestObjectController(unittest.TestCase):"},{"line_number":75,"context_line":"    \"\"\"Test swift.obj.server.ObjectController\"\"\""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_73f4d986","line":73,"in_reply_to":"9a80dd14_117d626d","updated":"2015-03-20 15:07:57.000000000","message":"You did in test/unit/__init__.py but it made POLICIES[0] be an ec policy and iirc that broke the existing tests here. I could be wrong.","commit_id":"0ad16d130d066da08ffe4e9669d32a4dfbe089b0"},{"author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"change_message_id":"d03c8b5eedfe42dd5bbdb35403ba81a068acbf5e","unresolved":false,"context_lines":[{"line_number":4954,"context_line":"            \u0027X-Timestamp\u0027: put_timestamp,"},{"line_number":4955,"context_line":"            \u0027Transfer-Encoding\u0027: \u0027chunked\u0027,"},{"line_number":4956,"context_line":"            \u0027Expect\u0027: \u0027100-continue\u0027,"},{"line_number":4957,"context_line":"            \u0027X-Object-Sysmeta-Ec-Archive-Index\u0027: \u00272\u0027,"},{"line_number":4958,"context_line":"            \u0027X-Backend-Storage-Policy-Index\u0027: \u00271\u0027,"},{"line_number":4959,"context_line":"            \u0027X-Backend-Obj-Content-Length\u0027: len(test_data),"},{"line_number":4960,"context_line":"            \u0027X-Backend-Obj-Metadata-Footer\u0027: \u0027yes\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_b76fabc4","line":4957,"updated":"2015-03-24 10:04:51.000000000","message":"Should Ec-Archive-Index be in footer, right?","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"c80fc3353cbcf81d3cdcd7e407077104a72432ff","unresolved":false,"context_lines":[{"line_number":4954,"context_line":"            \u0027X-Timestamp\u0027: put_timestamp,"},{"line_number":4955,"context_line":"            \u0027Transfer-Encoding\u0027: \u0027chunked\u0027,"},{"line_number":4956,"context_line":"            \u0027Expect\u0027: \u0027100-continue\u0027,"},{"line_number":4957,"context_line":"            \u0027X-Object-Sysmeta-Ec-Archive-Index\u0027: \u00272\u0027,"},{"line_number":4958,"context_line":"            \u0027X-Backend-Storage-Policy-Index\u0027: \u00271\u0027,"},{"line_number":4959,"context_line":"            \u0027X-Backend-Obj-Content-Length\u0027: len(test_data),"},{"line_number":4960,"context_line":"            \u0027X-Backend-Obj-Metadata-Footer\u0027: \u0027yes\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6ced46_55a49856","line":4957,"in_reply_to":"1a6ced46_b76fabc4","updated":"2015-03-24 18:33:39.000000000","message":"Done","commit_id":"df9c21cc6f416421f60afb87a70971cb2a42daea"}]}
