)]}'
{"swift/obj/reconstructor.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a329b10f31a143db3111b7b4185bae28b1ea20a7","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                       if d in all_devices]"},{"line_number":232,"context_line":"        else:"},{"line_number":233,"context_line":"            devices \u003d list(all_devices)"},{"line_number":234,"context_line":"        # update original kwargs with parsed overrides; run_once needs the"},{"line_number":235,"context_line":"        # original kwargs for its conditional recon dump heuristic"},{"line_number":236,"context_line":"        kwargs.update(override_options)"},{"line_number":237,"context_line":"        if not devices:"},{"line_number":238,"context_line":"            # we only need a single worker to do nothing until a ring change"},{"line_number":239,"context_line":"            yield dict(kwargs, override_devices\u003d[])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_1b452718","line":236,"range":{"start_line":234,"start_character":8,"end_line":236,"end_character":39},"updated":"2017-07-21 19:21:31.000000000","message":"this is a little messy but the most expedient way I could see to pass something back to run_once so that it can discriminate a worker args override from a CLI override","commit_id":"4a4bcd3185fe63bfbff7779eec62f9134746fbc1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a329b10f31a143db3111b7b4185bae28b1ea20a7","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"        # the existence of commandline overrides seems a somewhat weak"},{"line_number":1238,"context_line":"        # heuristic for if the operator wants a manual run to dump recon"},{"line_number":1239,"context_line":"        # stats over a background reconstructor"},{"line_number":1240,"context_line":"        if not kwargs.get(\u0027devices\u0027) and not kwargs.get(\u0027partitions\u0027):"},{"line_number":1241,"context_line":"            self.final_recon_dump(total, **override_options)"},{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":"    def run_forever(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_1b5e47e6","line":1240,"range":{"start_line":1240,"start_character":11,"end_line":1240,"end_character":69},"updated":"2017-07-21 19:21:31.000000000","message":"test the original kwargs from CLI, NOT the get_worker_args generated keys","commit_id":"4a4bcd3185fe63bfbff7779eec62f9134746fbc1"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8c20060f7b8e05e5b088db980308c024f89278ce","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        kwargs.update(override_options)"},{"line_number":237,"context_line":"        if not devices:"},{"line_number":238,"context_line":"            # we only need a single worker to do nothing until a ring change"},{"line_number":239,"context_line":"            yield dict(kwargs, override_devices\u003d[])"},{"line_number":240,"context_line":"            return"},{"line_number":241,"context_line":"        # for somewhat uniform load per worker use same max_devices_per_worker"},{"line_number":242,"context_line":"        # when handling all devices or just override devices..."}],"source_content_type":"text/x-python","patch_set":2,"id":"ff346bd7_3167b850","line":239,"updated":"2017-07-24 20:11:51.000000000","message":"Plumbing through kwargs gets us some potentially confusing log messages like\n\n Spawned worker 10226 with {\u0027override_devices\u0027: [u\u0027sdb8\u0027, u\u0027sdb4\u0027], \u0027override_partitions\u0027: [], \u0027devices\u0027: None, \u0027partitions\u0027: None}\n\nor\n\n Spawned worker 10601 with {\u0027override_devices\u0027: [u\u0027sdb4\u0027], \u0027override_partitions\u0027: [], \u0027devices\u0027: None, \u0027partitions\u0027: None}\n Spawned worker 10602 with {\u0027override_devices\u0027: [u\u0027sdb8\u0027], \u0027override_partitions\u0027: [], \u0027devices\u0027: None, \u0027partitions\u0027: None}\n\nor even\n\n Spawned worker 11775 with {\u0027override_devices\u0027: [], \u0027override_partitions\u0027: [], \u0027devices\u0027: \u0027sdi12\u0027, \u0027partitions\u0027: None}\n\nMaybe it\u0027d be better to revisit the assumptions underlying the old reporting behavior. Now that we might do per-disk stats, I think we just want something more like\n\n if (self.reconstructor_workers \u003e 0 and\n     not override_options[\u0027override_partitions]) or \\\n        not any(override_options.values()):\n     self.final_recon_dump(total, **override_options)\n\nbelow.","commit_id":"5bc81e653ed1aa70b26ed04136aaa445c67bfbd1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"698aede02626a0944bedee8dd511fb317a31b7fd","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        kwargs.update(override_options)"},{"line_number":237,"context_line":"        if not devices:"},{"line_number":238,"context_line":"            # we only need a single worker to do nothing until a ring change"},{"line_number":239,"context_line":"            yield dict(kwargs, override_devices\u003d[])"},{"line_number":240,"context_line":"            return"},{"line_number":241,"context_line":"        # for somewhat uniform load per worker use same max_devices_per_worker"},{"line_number":242,"context_line":"        # when handling all devices or just override devices..."}],"source_content_type":"text/x-python","patch_set":2,"id":"ff346bd7_c75ace4e","line":239,"in_reply_to":"ff346bd7_3167b850","updated":"2017-07-25 17:07:56.000000000","message":"I didn\u0027t find those logs *so* confusing :) the last one is probably a bug anyway - this line should probably be:\n\n  yield kwargs\n\nin which case I *think* the log line would be:\n\n  Spawned worker 11775 with {\u0027override_devices\u0027: [\u0027sdi12\u0027], \u0027override_partitions\u0027: [], \u0027devices\u0027: \u0027sdi12\u0027, \u0027partitions\u0027: None}","commit_id":"5bc81e653ed1aa70b26ed04136aaa445c67bfbd1"}],"test/unit/obj/test_reconstructor.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a329b10f31a143db3111b7b4185bae28b1ea20a7","unresolved":false,"context_lines":[{"line_number":1397,"context_line":"        worker_args \u003d list(reconstructor.get_worker_args(devices\u003d\u0027sdz\u0027))"},{"line_number":1398,"context_line":"        self.assertEqual(1, len(worker_args))"},{"line_number":1399,"context_line":"        self.assertEqual("},{"line_number":1400,"context_line":"            [{\u0027override_partitions\u0027: [], \u0027override_devices\u0027: [\u0027sdz\u0027]}],"},{"line_number":1401,"context_line":"            worker_args)"},{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":"    def test_workers_with_devices(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"ff346bd7_dbf43fd2","side":"PARENT","line":1400,"range":{"start_line":1400,"start_character":62,"end_line":1400,"end_character":68},"updated":"2017-07-21 19:21:31.000000000","message":"nice side-effect it to remove this anomaly","commit_id":"4a1848afb32fd3eb8b21024dc759b7a7c65aab27"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8c20060f7b8e05e5b088db980308c024f89278ce","unresolved":false,"context_lines":[{"line_number":1793,"context_line":"        kwargs \u003d {\u0027devices\u0027: \u0027sdz\u0027}"},{"line_number":1794,"context_line":"        worker_kwargs \u003d list(reconstructor.get_worker_args(**kwargs))[0]"},{"line_number":1795,"context_line":"        do_test(kwargs, [\u0027sdz\u0027], [])"},{"line_number":1796,"context_line":"        do_test(worker_kwargs, [\u0027sdz\u0027], [])"},{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"    def test_run_forever_recon_aggregation(self):"},{"line_number":1799,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff346bd7_e613b10c","line":1796,"range":{"start_line":1796,"start_character":33,"end_line":1796,"end_character":36},"updated":"2017-07-24 20:11:51.000000000","message":"It seems a little strange that the missing drive still appears in worker_kwargs when get_worker_args has actually checked for whether it exists already...","commit_id":"5bc81e653ed1aa70b26ed04136aaa445c67bfbd1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"698aede02626a0944bedee8dd511fb317a31b7fd","unresolved":false,"context_lines":[{"line_number":1793,"context_line":"        kwargs \u003d {\u0027devices\u0027: \u0027sdz\u0027}"},{"line_number":1794,"context_line":"        worker_kwargs \u003d list(reconstructor.get_worker_args(**kwargs))[0]"},{"line_number":1795,"context_line":"        do_test(kwargs, [\u0027sdz\u0027], [])"},{"line_number":1796,"context_line":"        do_test(worker_kwargs, [\u0027sdz\u0027], [])"},{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"    def test_run_forever_recon_aggregation(self):"},{"line_number":1799,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff346bd7_e7271212","line":1796,"range":{"start_line":1796,"start_character":33,"end_line":1796,"end_character":36},"in_reply_to":"ff346bd7_e613b10c","updated":"2017-07-25 17:07:56.000000000","message":"maybe strange but necessary to prevent reconstruct thinking there are no CLI-requested overrides and iterating over all devices. If cli override device doesn\u0027t exist then reconstruct should do nothing.","commit_id":"5bc81e653ed1aa70b26ed04136aaa445c67bfbd1"}]}
