)]}'
{"test/unit/obj/test_replicator.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"6ff76e501e1c96aa284968cd049ab39ba13c0208","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                (0, \u0027\u0027, [\u0027rsync\u0027, whole_path_from, rsync_mods]))"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # Returns 0 at first, and 60 on all following .next() calls"},{"line_number":310,"context_line":"        def _infinite_gen():"},{"line_number":311,"context_line":"            time \u003d 0"},{"line_number":312,"context_line":"            while True:"},{"line_number":313,"context_line":"                yield time"},{"line_number":314,"context_line":"                if time \u003d\u003d 0:"},{"line_number":315,"context_line":"                    time \u003d 60"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        with _mock_process(process_arg_checker):"},{"line_number":318,"context_line":"            with mock.patch(\u0027time.time\u0027) as time_mock:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7af24918_f63a7d97","line":315,"range":{"start_line":310,"start_character":0,"end_line":315,"end_character":29},"updated":"2016-03-02 09:33:29.000000000","message":"nit: I think the following implementation can show more clearly what it is doing. How do you think?\n\ndef _infinite_gen():\n    yield 0\n    while True:\n        yield 60","commit_id":"5daab97829a954a2e8efe022a4d36ebaa895e79d"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"818d1ce63bdff296487fcf9705af81112e25f492","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                (0, \u0027\u0027, [\u0027rsync\u0027, whole_path_from, rsync_mods]))"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        # Returns 0 at first, and 60 on all following .next() calls"},{"line_number":310,"context_line":"        def _infinite_gen():"},{"line_number":311,"context_line":"            time \u003d 0"},{"line_number":312,"context_line":"            while True:"},{"line_number":313,"context_line":"                yield time"},{"line_number":314,"context_line":"                if time \u003d\u003d 0:"},{"line_number":315,"context_line":"                    time \u003d 60"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        with _mock_process(process_arg_checker):"},{"line_number":318,"context_line":"            with mock.patch(\u0027time.time\u0027) as time_mock:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_3b04ec13","line":315,"range":{"start_line":310,"start_character":0,"end_line":315,"end_character":29},"in_reply_to":"7af24918_f63a7d97","updated":"2016-03-12 06:47:31.000000000","message":"Done","commit_id":"5daab97829a954a2e8efe022a4d36ebaa895e79d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c774c88e326c7e22b85d953b3e26d9e5bbcdbcbe","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            with mock.patch(\u0027time.time\u0027) as time_mock:"},{"line_number":317,"context_line":"                time_mock.side_effect \u003d _infinite_gen()"},{"line_number":318,"context_line":"                replicator.run_once()"},{"line_number":319,"context_line":"                replicator.start \u003d 5"},{"line_number":320,"context_line":"            self.assertFalse(process_errors)"},{"line_number":321,"context_line":"            self.assertFalse(self.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":322,"context_line":"            object_replicator.http_connect \u003d was_connector"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_8bc7d862","line":319,"updated":"2016-08-02 10:32:51.000000000","message":"why are you setting .start here?","commit_id":"8f66972a6161584ff0d3f72ad5492ff6d2334d84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c742320ab30c8b4124840911bf351f3106284a16","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            with mock.patch(\u0027time.time\u0027) as time_mock:"},{"line_number":317,"context_line":"                time_mock.side_effect \u003d _infinite_gen()"},{"line_number":318,"context_line":"                replicator.run_once()"},{"line_number":319,"context_line":"                replicator.start \u003d 5"},{"line_number":320,"context_line":"            self.assertFalse(process_errors)"},{"line_number":321,"context_line":"            self.assertFalse(self.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":322,"context_line":"            object_replicator.http_connect \u003d was_connector"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_e906d886","line":319,"in_reply_to":"bacf61ea_8bc7d862","updated":"2017-06-22 13:26:02.000000000","message":"Good question. Must be a leftover from some earlier work - removed.","commit_id":"8f66972a6161584ff0d3f72ad5492ff6d2334d84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c774c88e326c7e22b85d953b3e26d9e5bbcdbcbe","unresolved":false,"context_lines":[{"line_number":319,"context_line":"                replicator.start \u003d 5"},{"line_number":320,"context_line":"            self.assertFalse(process_errors)"},{"line_number":321,"context_line":"            self.assertFalse(self.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":322,"context_line":"            object_replicator.http_connect \u003d was_connector"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        self.assertEqual(0, replicator.stats[\u0027start\u0027])"},{"line_number":325,"context_line":"        recon_fname \u003d os.path.join(self.recon_cache, \"object.recon\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_4b70400b","line":322,"updated":"2016-08-02 10:32:51.000000000","message":"nit: ok, not really changed in this patch, but http_connect should be reset in a finally clause to ensure it happens even if the test fails. Or mocked context manager. This seems to be the same in other tests, so probably a task for another patch.","commit_id":"8f66972a6161584ff0d3f72ad5492ff6d2334d84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c774c88e326c7e22b85d953b3e26d9e5bbcdbcbe","unresolved":false,"context_lines":[{"line_number":320,"context_line":"            self.assertFalse(process_errors)"},{"line_number":321,"context_line":"            self.assertFalse(self.logger.get_lines_for_level(\u0027error\u0027))"},{"line_number":322,"context_line":"            object_replicator.http_connect \u003d was_connector"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"        self.assertEqual(0, replicator.stats[\u0027start\u0027])"},{"line_number":325,"context_line":"        recon_fname \u003d os.path.join(self.recon_cache, \"object.recon\")"},{"line_number":326,"context_line":"        with open(recon_fname) as cachefile:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_4e6b2eb7","line":323,"updated":"2016-08-02 10:32:51.000000000","message":"would we expect replicator.start \u003d\u003d 0 except line 319 sets it to 5?","commit_id":"8f66972a6161584ff0d3f72ad5492ff6d2334d84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"c774c88e326c7e22b85d953b3e26d9e5bbcdbcbe","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        recon_fname \u003d os.path.join(self.recon_cache, \"object.recon\")"},{"line_number":326,"context_line":"        with open(recon_fname) as cachefile:"},{"line_number":327,"context_line":"            recon \u003d json.loads(cachefile.read())"},{"line_number":328,"context_line":"            self.assertEqual(1, recon.get(\u0027replication_time\u0027))"},{"line_number":329,"context_line":"        expected \u003d \u0027Object replication complete (once). (1.00 minutes)\u0027"},{"line_number":330,"context_line":"        self.assertTrue(expected in self.logger.get_lines_for_level(\u0027info\u0027))"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_ce843e5f","line":328,"updated":"2016-08-02 10:32:51.000000000","message":"nit: I\u0027m not sure there is any test that verifies that stats has keys \u0027replication_last\u0027 and \u0027replication_stats\u0027 - might be worth adding a check for those?","commit_id":"8f66972a6161584ff0d3f72ad5492ff6d2334d84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c742320ab30c8b4124840911bf351f3106284a16","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        recon_fname \u003d os.path.join(self.recon_cache, \"object.recon\")"},{"line_number":326,"context_line":"        with open(recon_fname) as cachefile:"},{"line_number":327,"context_line":"            recon \u003d json.loads(cachefile.read())"},{"line_number":328,"context_line":"            self.assertEqual(1, recon.get(\u0027replication_time\u0027))"},{"line_number":329,"context_line":"        expected \u003d \u0027Object replication complete (once). (1.00 minutes)\u0027"},{"line_number":330,"context_line":"        self.assertTrue(expected in self.logger.get_lines_for_level(\u0027info\u0027))"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_693f6825","line":328,"in_reply_to":"bacf61ea_ce843e5f","updated":"2017-06-22 13:26:02.000000000","message":"Done","commit_id":"8f66972a6161584ff0d3f72ad5492ff6d2334d84"},{"author":{"_account_id":22059,"name":"zheng yin","email":"yin__zheng@163.com","username":"zy751713126"},"change_message_id":"1020df01b9583dff7aab118090d5733dc6ca100e","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            recon \u003d json.loads(cachefile.read())"},{"line_number":328,"context_line":"            self.assertEqual(1, recon.get(\u0027replication_time\u0027))"},{"line_number":329,"context_line":"        expected \u003d \u0027Object replication complete (once). (1.00 minutes)\u0027"},{"line_number":330,"context_line":"        self.assertTrue(expected in self.logger.get_lines_for_level(\u0027info\u0027))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    # policy 1"},{"line_number":333,"context_line":"    def test_run_once_1(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_8d7db370","line":330,"range":{"start_line":330,"start_character":8,"end_line":330,"end_character":76},"updated":"2016-07-29 12:06:04.000000000","message":"Hi, Christian Schwede, self.assertIn(expected, self.logger.get_lines_for_level(\u0027info\u0027)) is better ?","commit_id":"8f66972a6161584ff0d3f72ad5492ff6d2334d84"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"c742320ab30c8b4124840911bf351f3106284a16","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            recon \u003d json.loads(cachefile.read())"},{"line_number":328,"context_line":"            self.assertEqual(1, recon.get(\u0027replication_time\u0027))"},{"line_number":329,"context_line":"        expected \u003d \u0027Object replication complete (once). (1.00 minutes)\u0027"},{"line_number":330,"context_line":"        self.assertTrue(expected in self.logger.get_lines_for_level(\u0027info\u0027))"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    # policy 1"},{"line_number":333,"context_line":"    def test_run_once_1(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f201791_493a6c34","line":330,"range":{"start_line":330,"start_character":8,"end_line":330,"end_character":76},"in_reply_to":"bacf61ea_8d7db370","updated":"2017-06-22 13:26:02.000000000","message":"Done","commit_id":"8f66972a6161584ff0d3f72ad5492ff6d2334d84"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6ac72064f206c69972dad259da019b945e034835","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            while True:"},{"line_number":329,"context_line":"                yield 60"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"        with _mock_process(process_arg_checker):"},{"line_number":332,"context_line":"            with mock.patch(\u0027time.time\u0027) as time_mock:"},{"line_number":333,"context_line":"                for cycle in range(1, 10):"},{"line_number":334,"context_line":"                    time_mock.side_effect \u003d _infinite_gen()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_14948243","line":331,"range":{"start_line":331,"start_character":14,"end_line":331,"end_character":47},"updated":"2017-07-11 09:55:36.000000000","message":"(off-topic): there are not enough args passed to _mock_process to satisfy the number of \u0027rsync\u0027 calls made, so the \u0027rsync\u0027 calls in all but first cycle blow up with a StopIteration","commit_id":"3820e674483ca171dd4bbed63654f2205a2f5490"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"6ac72064f206c69972dad259da019b945e034835","unresolved":false,"context_lines":[{"line_number":331,"context_line":"        with _mock_process(process_arg_checker):"},{"line_number":332,"context_line":"            with mock.patch(\u0027time.time\u0027) as time_mock:"},{"line_number":333,"context_line":"                for cycle in range(1, 10):"},{"line_number":334,"context_line":"                    time_mock.side_effect \u003d _infinite_gen()"},{"line_number":335,"context_line":"                    replicator.run_once()"},{"line_number":336,"context_line":"                    self.assertEqual((start + 1 + cycle) % 10,"},{"line_number":337,"context_line":"                                     replicator.replication_cycle)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f1d235d_3443fe15","line":334,"updated":"2017-07-11 09:55:36.000000000","message":"note to self: setting the side_effect here means each replication run_once cycle starts at t\u003d0 and finishes at t\u003d60s","commit_id":"3820e674483ca171dd4bbed63654f2205a2f5490"}]}
