)]}'
{"swift/cli/relinker.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa167400c1b3d6bfdaab6555e3e4cff45498ea9a","unresolved":true,"context_lines":[{"line_number":534,"context_line":"        \u0027files_per_second\u0027: ("},{"line_number":535,"context_line":"            args.files_per_second if args.files_per_second is not None"},{"line_number":536,"context_line":"            else non_negative_float(conf.get(\u0027files_per_second\u0027, \u00270\u0027))),"},{"line_number":537,"context_line":"        \u0027policies\u0027: POLICIES if args.policy is None else [args.policy],"},{"line_number":538,"context_line":"    })"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"    if args.action \u003d\u003d \u0027relink\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1838143d_27129fda","line":537,"updated":"2021-03-12 14:36:55.000000000","message":"so the choices are \"run with all policies\" or \"run with this ONE specific policy\"\n\nI think that\u0027s ok","commit_id":"0a6a48d3aeae88dcf5a991c2e417800a683ffbb9"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"fc7e112afe9606eff78cab54352d831eb3223ebf","unresolved":true,"context_lines":[{"line_number":534,"context_line":"        \u0027files_per_second\u0027: ("},{"line_number":535,"context_line":"            args.files_per_second if args.files_per_second is not None"},{"line_number":536,"context_line":"            else non_negative_float(conf.get(\u0027files_per_second\u0027, \u00270\u0027))),"},{"line_number":537,"context_line":"        \u0027policies\u0027: POLICIES if args.policy is None else [args.policy],"},{"line_number":538,"context_line":"    })"},{"line_number":539,"context_line":""},{"line_number":540,"context_line":"    if args.action \u003d\u003d \u0027relink\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"02629e1a_d194534c","line":537,"in_reply_to":"1838143d_27129fda","updated":"2021-03-18 14:05:19.000000000","message":"I considered taking a list of policies, and accepting policy names as well as indexes, but decided that was all feature creep until we know more about use cases.","commit_id":"0a6a48d3aeae88dcf5a991c2e417800a683ffbb9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"04f7cd3d717bd1b9e25c1cd6281b58d6e3fe1a96","unresolved":true,"context_lines":[{"line_number":45,"context_line":"    return value"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def non_negative_int(value):"},{"line_number":49,"context_line":"    value \u003d non_negative_float(value)"},{"line_number":50,"context_line":"    if int(value) !\u003d value:"},{"line_number":51,"context_line":"        raise ValueError"}],"source_content_type":"text/x-python","patch_set":6,"id":"ddac6d8a_c1531865","line":48,"updated":"2021-03-18 19:41:32.000000000","message":"Huh.\n\n \u003e\u003e\u003e non_negative_int(\u00271.0\u0027)\n 1\n \u003e\u003e\u003e int(\u00271.0\u0027)\n Traceback (most recent call last):\n   File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n ValueError: invalid literal for int() with base 10: \u00271.0\u0027\n\nEh, w/e","commit_id":"76537d3e8198bee1d6c0b009aa71045e198fd888"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de0415d7ebfd2b572762452154b30dc53c015914","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    return value"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def non_negative_int(value):"},{"line_number":49,"context_line":"    value \u003d non_negative_float(value)"},{"line_number":50,"context_line":"    if int(value) !\u003d value:"},{"line_number":51,"context_line":"        raise ValueError"}],"source_content_type":"text/x-python","patch_set":6,"id":"56bc4a6f_ccb427e2","line":48,"in_reply_to":"ddac6d8a_c1531865","updated":"2021-03-18 20:13:04.000000000","message":"Ack","commit_id":"76537d3e8198bee1d6c0b009aa71045e198fd888"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"04f7cd3d717bd1b9e25c1cd6281b58d6e3fe1a96","unresolved":true,"context_lines":[{"line_number":534,"context_line":"            else non_negative_float(conf.get(\u0027files_per_second\u0027, \u00270\u0027))),"},{"line_number":535,"context_line":"    })"},{"line_number":536,"context_line":"    if args.policy is not None:"},{"line_number":537,"context_line":"        conf[\u0027policies\u0027] \u003d [args.policy]"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    if args.action \u003d\u003d \u0027relink\u0027:"},{"line_number":540,"context_line":"        return relink(conf, logger, device\u003dargs.device)"}],"source_content_type":"text/x-python","patch_set":6,"id":"0246b6af_c6a4395a","line":537,"updated":"2021-03-18 19:41:32.000000000","message":"Maybe add a\n\n else:\n     conf[\u0027policies\u0027] \u003d POLICIES\n\nand switch L425 to always look in conf?","commit_id":"76537d3e8198bee1d6c0b009aa71045e198fd888"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"de0415d7ebfd2b572762452154b30dc53c015914","unresolved":true,"context_lines":[{"line_number":534,"context_line":"            else non_negative_float(conf.get(\u0027files_per_second\u0027, \u00270\u0027))),"},{"line_number":535,"context_line":"    })"},{"line_number":536,"context_line":"    if args.policy is not None:"},{"line_number":537,"context_line":"        conf[\u0027policies\u0027] \u003d [args.policy]"},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"    if args.action \u003d\u003d \u0027relink\u0027:"},{"line_number":540,"context_line":"        return relink(conf, logger, device\u003dargs.device)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f2ff951_b415fc92","line":537,"in_reply_to":"0246b6af_c6a4395a","updated":"2021-03-18 20:13:04.000000000","message":"lol. I had it that way, then switched it with a view to allowing relink of increased part power policies if policies had been set on command line - it was going to be useful to test `if conf[\u0027policies\u0027]`","commit_id":"76537d3e8198bee1d6c0b009aa71045e198fd888"}],"swift/common/utils.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cc557291f27c6ec9c12dba3b9a1d8d708001b928","unresolved":true,"context_lines":[{"line_number":448,"context_line":"    :return: an int"},{"line_number":449,"context_line":"    \"\"\""},{"line_number":450,"context_line":"    int_value \u003d int(value)"},{"line_number":451,"context_line":"    if int_value !\u003d non_negative_float(value):"},{"line_number":452,"context_line":"        raise ValueError"},{"line_number":453,"context_line":"    return int_value"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"53d517d4_ff4fac0c","line":451,"updated":"2021-03-19 15:19:25.000000000","message":"That\u0027s a round-about way of doing the non-negative check...","commit_id":"24ba7800cc0b2836b3b15e3b1e911a0e96a1df48"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"102cbae89fe1373e73f014944493e30e093a7189","unresolved":true,"context_lines":[{"line_number":448,"context_line":"    :return: an int"},{"line_number":449,"context_line":"    \"\"\""},{"line_number":450,"context_line":"    int_value \u003d int(value)"},{"line_number":451,"context_line":"    if int_value !\u003d non_negative_float(value):"},{"line_number":452,"context_line":"        raise ValueError"},{"line_number":453,"context_line":"    return int_value"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9ff666b7_d7f54a86","line":451,"in_reply_to":"53d517d4_ff4fac0c","updated":"2021-03-19 15:51:57.000000000","message":"it also catches non int Number values which otherwise are rounded by int()\n\nconfig_positive_int_value on the other hand is happy to convert 1.1 to 1 but rejects \u00271.1\u0027","commit_id":"24ba7800cc0b2836b3b15e3b1e911a0e96a1df48"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"73b9aecae8268162b78c2dfcb514b043cc356af1","unresolved":false,"context_lines":[{"line_number":448,"context_line":"    :return: an int"},{"line_number":449,"context_line":"    \"\"\""},{"line_number":450,"context_line":"    int_value \u003d int(value)"},{"line_number":451,"context_line":"    if int_value !\u003d non_negative_float(value):"},{"line_number":452,"context_line":"        raise ValueError"},{"line_number":453,"context_line":"    return int_value"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"e3db45a8_caac2a30","line":451,"in_reply_to":"9ff666b7_d7f54a86","updated":"2021-03-19 18:54:25.000000000","message":"Good point, good point.","commit_id":"24ba7800cc0b2836b3b15e3b1e911a0e96a1df48"}],"test/unit/cli/test_relinker.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aa167400c1b3d6bfdaab6555e3e4cff45498ea9a","unresolved":true,"context_lines":[{"line_number":340,"context_line":"            \u0027files_per_second\u0027: 2.2,"},{"line_number":341,"context_line":"            \u0027log_level\u0027: \u0027DEBUG\u0027,"},{"line_number":342,"context_line":"            \u0027log_name\u0027: \u0027test-relinker\u0027,"},{"line_number":343,"context_line":"            \u0027policies\u0027: [POLICIES[1]]"},{"line_number":344,"context_line":"        }, mock.ANY, device\u003d\u0027sdx\u0027)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        with mock.patch(\u0027swift.cli.relinker.relink\u0027) as mock_relink, \\"}],"source_content_type":"text/x-python","patch_set":2,"id":"ab93fdce_64d228cc","line":343,"updated":"2021-03-12 14:36:55.000000000","message":"noice","commit_id":"0a6a48d3aeae88dcf5a991c2e417800a683ffbb9"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"04f7cd3d717bd1b9e25c1cd6281b58d6e3fe1a96","unresolved":true,"context_lines":[{"line_number":574,"context_line":"                \u0027--skip-mount\u0027,"},{"line_number":575,"context_line":"                \u0027--devices\u0027, self.devices,"},{"line_number":576,"context_line":"                \u0027--device\u0027, self.existing_device,"},{"line_number":577,"context_line":"            ]))"},{"line_number":578,"context_line":"        self.assertEqual(2, cm.exception.code)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        with self.assertRaises(SystemExit) as cm:"}],"source_content_type":"text/x-python","patch_set":6,"id":"987d3407_5b04c5c1","line":577,"updated":"2021-03-18 19:41:32.000000000","message":"Makes for some noisy test output for me:\n\n test_relink_policy_option (test.unit.cli.test_relinker.TestRelinker) ... usage: nosetests [-h] [--swift-dir SWIFT_DIR] [--policy POLICY] [--devices DEVICES] [--user USER] [--device DEVICE] [--skip-mount-check] [--files-per-second FILES_PER_SECOND]\n                  [--logfile LOGFILE] [--debug]\n                  {relink,cleanup} [conf_file]\n nosetests: error: argument --policy: invalid policy value: \u00279\u0027\n usage: nosetests [-h] [--swift-dir SWIFT_DIR] [--policy POLICY] [--devices DEVICES] [--user USER] [--device DEVICE] [--skip-mount-check] [--files-per-second FILES_PER_SECOND]\n                  [--logfile LOGFILE] [--debug]\n                  {relink,cleanup} [conf_file]\n nosetests: error: argument --policy: invalid policy value: \u0027gold\u0027\n ok","commit_id":"76537d3e8198bee1d6c0b009aa71045e198fd888"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a5f15ec1d813619aaff5c06aa5aecfeb67f7a956","unresolved":false,"context_lines":[{"line_number":574,"context_line":"                \u0027--skip-mount\u0027,"},{"line_number":575,"context_line":"                \u0027--devices\u0027, self.devices,"},{"line_number":576,"context_line":"                \u0027--device\u0027, self.existing_device,"},{"line_number":577,"context_line":"            ]))"},{"line_number":578,"context_line":"        self.assertEqual(2, cm.exception.code)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"        with self.assertRaises(SystemExit) as cm:"}],"source_content_type":"text/x-python","patch_set":6,"id":"a4834df8_a98a1758","line":577,"in_reply_to":"987d3407_5b04c5c1","updated":"2021-03-19 12:53:51.000000000","message":"Done","commit_id":"76537d3e8198bee1d6c0b009aa71045e198fd888"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"04f7cd3d717bd1b9e25c1cd6281b58d6e3fe1a96","unresolved":true,"context_lines":[{"line_number":581,"context_line":"            self.assertEqual(0, relinker.main(["},{"line_number":582,"context_line":"                \u0027relink\u0027,"},{"line_number":583,"context_line":"                \u0027--swift-dir\u0027, self.testdir,"},{"line_number":584,"context_line":"                \u0027--policy\u0027, \u0027pewter\u0027,"},{"line_number":585,"context_line":"                \u0027--skip-mount\u0027,"},{"line_number":586,"context_line":"                \u0027--devices\u0027, self.devices,"},{"line_number":587,"context_line":"                \u0027--device\u0027, self.existing_device,"}],"source_content_type":"text/x-python","patch_set":6,"id":"77d5b080_692a5288","line":584,"range":{"start_line":584,"start_character":29,"end_line":584,"end_character":35},"updated":"2021-03-18 19:41:32.000000000","message":"Maybe a stronger test if we used gold/platinum? Or maybe we\u0027re not looking to codify that current behavior ;-)","commit_id":"76537d3e8198bee1d6c0b009aa71045e198fd888"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a5f15ec1d813619aaff5c06aa5aecfeb67f7a956","unresolved":true,"context_lines":[{"line_number":581,"context_line":"            self.assertEqual(0, relinker.main(["},{"line_number":582,"context_line":"                \u0027relink\u0027,"},{"line_number":583,"context_line":"                \u0027--swift-dir\u0027, self.testdir,"},{"line_number":584,"context_line":"                \u0027--policy\u0027, \u0027pewter\u0027,"},{"line_number":585,"context_line":"                \u0027--skip-mount\u0027,"},{"line_number":586,"context_line":"                \u0027--devices\u0027, self.devices,"},{"line_number":587,"context_line":"                \u0027--device\u0027, self.existing_device,"}],"source_content_type":"text/x-python","patch_set":6,"id":"39fb8ea7_bec2cc08","line":584,"range":{"start_line":584,"start_character":29,"end_line":584,"end_character":35},"in_reply_to":"77d5b080_692a5288","updated":"2021-03-19 12:53:51.000000000","message":"Done. I think at one point I was planning to allow policy names on the command line so gold would have been valid. But I wound back that feature creep!","commit_id":"76537d3e8198bee1d6c0b009aa71045e198fd888"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cc557291f27c6ec9c12dba3b9a1d8d708001b928","unresolved":true,"context_lines":[{"line_number":3018,"context_line":""},{"line_number":3019,"context_line":"        with self.assertRaises(ValueError):"},{"line_number":3020,"context_line":"            utils.non_negative_float(-1.1)"},{"line_number":3021,"context_line":"            utils.non_negative_float(\u0027-1.1\u0027)"},{"line_number":3022,"context_line":"            utils.non_negative_float(\u0027one\u0027)"},{"line_number":3023,"context_line":""},{"line_number":3024,"context_line":"    def test_non_negative_int(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"78db50fa_26426383","line":3021,"updated":"2021-03-19 15:19:25.000000000","message":"This won\u0027t actually get tested, since the previous line raises a ValueError.","commit_id":"24ba7800cc0b2836b3b15e3b1e911a0e96a1df48"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84e773bc0391cbafac4b1fa8ba4140ab26f8b78b","unresolved":true,"context_lines":[{"line_number":3018,"context_line":""},{"line_number":3019,"context_line":"        with self.assertRaises(ValueError):"},{"line_number":3020,"context_line":"            utils.non_negative_float(-1.1)"},{"line_number":3021,"context_line":"            utils.non_negative_float(\u0027-1.1\u0027)"},{"line_number":3022,"context_line":"            utils.non_negative_float(\u0027one\u0027)"},{"line_number":3023,"context_line":""},{"line_number":3024,"context_line":"    def test_non_negative_int(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"41e015bf_9a3ab883","line":3021,"in_reply_to":"78db50fa_26426383","updated":"2021-03-19 15:45:46.000000000","message":"yep, got distracted and sent this one to gerrit too early, had ex :(actly that on my radar","commit_id":"24ba7800cc0b2836b3b15e3b1e911a0e96a1df48"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cc557291f27c6ec9c12dba3b9a1d8d708001b928","unresolved":true,"context_lines":[{"line_number":3031,"context_line":""},{"line_number":3032,"context_line":"        with self.assertRaises(ValueError):"},{"line_number":3033,"context_line":"            utils.non_negative_int(-1)"},{"line_number":3034,"context_line":"            utils.non_negative_int(\u0027-1\u0027)"},{"line_number":3035,"context_line":"            utils.non_negative_int(\u0027-1.1\u0027)"},{"line_number":3036,"context_line":"            utils.non_negative_int(\u00271.1\u0027)"},{"line_number":3037,"context_line":"            utils.non_negative_int(\u0027one\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"c75d8a06_8ad9b96d","line":3034,"updated":"2021-03-19 15:19:25.000000000","message":"ditto","commit_id":"24ba7800cc0b2836b3b15e3b1e911a0e96a1df48"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cc557291f27c6ec9c12dba3b9a1d8d708001b928","unresolved":true,"context_lines":[{"line_number":3034,"context_line":"            utils.non_negative_int(\u0027-1\u0027)"},{"line_number":3035,"context_line":"            utils.non_negative_int(\u0027-1.1\u0027)"},{"line_number":3036,"context_line":"            utils.non_negative_int(\u00271.1\u0027)"},{"line_number":3037,"context_line":"            utils.non_negative_int(\u0027one\u0027)"},{"line_number":3038,"context_line":""},{"line_number":3039,"context_line":"    def test_config_positive_int_value(self):"},{"line_number":3040,"context_line":"        expectations \u003d {"}],"source_content_type":"text/x-python","patch_set":7,"id":"eca4ec7b_fa942e41","line":3037,"updated":"2021-03-19 15:19:25.000000000","message":"Add a case for\n\n utils.non_negative_int(\u00271.0\u0027)\n\n?","commit_id":"24ba7800cc0b2836b3b15e3b1e911a0e96a1df48"}]}
