)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":19,"context_line":"max_expanding options to the sharding config. As well as adds a"},{"line_number":20,"context_line":"--config option to the tool."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"The --config option expects a config with at \u0027[container-sharder]\u0027"},{"line_number":23,"context_line":"section. It only supports the shard options:"},{"line_number":24,"context_line":" - max_shrinking"},{"line_number":25,"context_line":" - max_expanding"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"80c85e00_3197d007","line":22,"range":{"start_line":22,"start_character":4,"end_line":22,"end_character":12},"updated":"2021-03-02 21:30:26.000000000","message":"here you have --config, in code its --conf, but I think --config is better - see comment in code","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"}],"etc/container-server.conf-sample":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"b3744e8bb547c2670b01f1c1ffd3e15784420439","unresolved":true,"context_lines":[{"line_number":377,"context_line":"# another \u0027acceptor\u0027 shard container. shard_shrink_point is a percentage of"},{"line_number":378,"context_line":"# shard_container_threshold e.g. the default value of 5 means 5% of the"},{"line_number":379,"context_line":"# shard_container_threshold."},{"line_number":380,"context_line":"# shard_shrink_point \u003d 5"},{"line_number":381,"context_line":"#"},{"line_number":382,"context_line":"# When auto-sharding is enabled shard_shrink_merge_point defines the maximum"},{"line_number":383,"context_line":"# allowed size of an acceptor shard container after having a donor merged into"},{"line_number":384,"context_line":"# it. Shard_shrink_merge_point is a percentage of shard_container_threshold."}],"source_content_type":"application/octet-stream","patch_set":11,"id":"45708fda_e68e2785","line":381,"range":{"start_line":380,"start_character":2,"end_line":381,"end_character":1},"updated":"2021-03-10 21:39:36.000000000","message":"needs updating, and also the deployment guide stuff I expect","commit_id":"1ec19030a7c44620e9615c7e41efe4552421d341"}],"swift/cli/manage_shard_ranges.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a0df3061e5d12e88e94eb69c4b0b666d29c5f323","unresolved":true,"context_lines":[{"line_number":660,"context_line":"    if \"shrink_threshold\" in args and args.shrink_threshold is None:"},{"line_number":661,"context_line":"        args.shrink_threshold \u003d shrink_threshold or DEFAULT_SHRINK_THRESHOLD"},{"line_number":662,"context_line":"    if \"expansion_limit\" in args and args.expansion_limit is None:"},{"line_number":663,"context_line":"        args.expansion_limit \u003d rows_per_shard or DEFAULT_ROWS_PER_SHARD"},{"line_number":664,"context_line":"    if \"rows_per_shard\" in args and args.rows_per_shard is None:"},{"line_number":665,"context_line":"        args.rows_per_shard \u003d rows_per_shard or DEFAULT_ROWS_PER_SHARD"},{"line_number":666,"context_line":"    logger \u003d get_logger(conf, name\u003d\u0027ContainerBroker\u0027, log_to_console\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b1461ec2_0c92aa0d","line":663,"updated":"2021-02-09 04:52:02.000000000","message":"I never quite noticed that we are uing the DEFAULT_ROWS_PER_SHARD as the exansion limit. In the autosharder the rows_per_shard is shard_container_threshold // 2 (which is the same number) and can be thought of as 50% of shard_container_threshold. But the expansion_limit (or merge_size in sharder) in the tool is also rows_per_shard whereas in the sharder it\u0027s 75% of shard_container_threshold.\n\nLikewise, the sharder\u0027s shrink threshold was 25% but here in the tool its 10%.\n\nI\u0027ve gone and make the change in the sharder\u0027s shrinking to match the tools 10%, because I believe the tool is better tested then the random number I picked out of my head. I haven\u0027t yet changed the merge_point in the sharder, if we want to make it 50% too then I could just remove the variable and option all together.","commit_id":"48ce7f6eed231d324c7efc80878fb175b7da008b"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":518,"context_line":"def _make_parser():"},{"line_number":519,"context_line":"    parser \u003d argparse.ArgumentParser(description\u003d\u0027Manage shard ranges\u0027)"},{"line_number":520,"context_line":"    parser.add_argument(\u0027container_db\u0027)"},{"line_number":521,"context_line":"    parser.add_argument(\u0027--conf\u0027, dest\u003d\u0027conf_file\u0027, nargs\u003d\u0027?\u0027, help\u003d("},{"line_number":522,"context_line":"        \u0027Path to config file with [container-sharder] section\u0027))"},{"line_number":523,"context_line":"    parser.add_argument(\u0027--verbose\u0027, \u0027-v\u0027, action\u003d\u0027count\u0027, default\u003d0,"},{"line_number":524,"context_line":"                        help\u003d\u0027Increase output verbosity\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a36a2a4e_236b11e1","line":521,"range":{"start_line":521,"start_character":24,"end_line":521,"end_character":32},"updated":"2021-03-02 21:30:26.000000000","message":"I could only find one other place where we have a similar option and it is \u0027--config\u0027:\n\nhttps://github.com/openstack/swift/blob/e78377624ab7d34d2fedc06e907dcb9899d89b4a/swift/cli/container_deleter.py#L136-L145\n\nprobably worth being consistent","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":518,"context_line":"def _make_parser():"},{"line_number":519,"context_line":"    parser \u003d argparse.ArgumentParser(description\u003d\u0027Manage shard ranges\u0027)"},{"line_number":520,"context_line":"    parser.add_argument(\u0027container_db\u0027)"},{"line_number":521,"context_line":"    parser.add_argument(\u0027--conf\u0027, dest\u003d\u0027conf_file\u0027, nargs\u003d\u0027?\u0027, help\u003d("},{"line_number":522,"context_line":"        \u0027Path to config file with [container-sharder] section\u0027))"},{"line_number":523,"context_line":"    parser.add_argument(\u0027--verbose\u0027, \u0027-v\u0027, action\u003d\u0027count\u0027, default\u003d0,"},{"line_number":524,"context_line":"                        help\u003d\u0027Increase output verbosity\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"40df981d_9bf47543","line":521,"range":{"start_line":521,"start_character":52,"end_line":521,"end_character":61},"updated":"2021-03-02 21:30:26.000000000","message":"do we want nargs? or just required\u003dFalse?","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":646,"context_line":"    if args.conf_file:"},{"line_number":647,"context_line":"        conf \u003d readconf(args.conf_file, \u0027container-sharder\u0027)"},{"line_number":648,"context_line":"        shard_container_threshold \u003d int(conf.get("},{"line_number":649,"context_line":"            \u0027shard_container_threshold\u0027, 0))"},{"line_number":650,"context_line":"        if shard_container_threshold:"},{"line_number":651,"context_line":"            rows_per_shard \u003d shard_container_threshold // 2"},{"line_number":652,"context_line":"            shrink_threshold \u003d \\"}],"source_content_type":"text/x-python","patch_set":6,"id":"6bfd64d3_46499b63","line":649,"range":{"start_line":649,"start_character":41,"end_line":649,"end_character":42},"updated":"2021-03-02 21:30:26.000000000","message":"should this not have a default value? DEFAULT_SHARD_CONTAINER_THRESHOLD","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":652,"context_line":"            shrink_threshold \u003d \\"},{"line_number":653,"context_line":"                shard_container_threshold * config_percent_value("},{"line_number":654,"context_line":"                    conf.get(\u0027shard_shrink_point\u0027, DEFAULT_SHARD_SHRINK_POINT))"},{"line_number":655,"context_line":"    # seems having sub parsers mean sometimes an arg wont exist in the args"},{"line_number":656,"context_line":"    # namespace. But we can check if it is with the \u0027in\u0027 statement."},{"line_number":657,"context_line":"    if \"max_shrinking\" in args and args.max_shrinking is None:"},{"line_number":658,"context_line":"        args.max_shrinking \u003d int(conf.get("},{"line_number":659,"context_line":"            \"max_shrinking\", DEFAULT_MAX_SHRINKING))"}],"source_content_type":"text/x-python","patch_set":6,"id":"7bb1f53e_efa1ae16","line":656,"range":{"start_line":655,"start_character":4,"end_line":656,"end_character":67},"updated":"2021-03-02 21:30:26.000000000","message":"It probably wouldn\u0027t matter if we add an option from conf that was not in args? it\u0027ll just not be used. But you have a solution so that\u0027s cool.","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":663,"context_line":"    if \"shrink_threshold\" in args and args.shrink_threshold is None:"},{"line_number":664,"context_line":"        args.shrink_threshold \u003d shrink_threshold or DEFAULT_SHRINK_THRESHOLD"},{"line_number":665,"context_line":"    if \"expansion_limit\" in args and args.expansion_limit is None:"},{"line_number":666,"context_line":"        args.expansion_limit \u003d rows_per_shard or DEFAULT_ROWS_PER_SHARD"},{"line_number":667,"context_line":"    if \"rows_per_shard\" in args and args.rows_per_shard is None:"},{"line_number":668,"context_line":"        args.rows_per_shard \u003d rows_per_shard or DEFAULT_ROWS_PER_SHARD"},{"line_number":669,"context_line":"    logger \u003d get_logger(conf, name\u003d\u0027ContainerBroker\u0027, log_to_console\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"4be878c6_588da86a","line":666,"updated":"2021-03-02 21:30:26.000000000","message":"if there is a merge_size in conf and no rows_per_shard on CLI should we not use merge_size?","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e851dfe61980ebebd2a4dffddb3ddf9b35773afe","unresolved":true,"context_lines":[{"line_number":645,"context_line":"        return 1"},{"line_number":646,"context_line":"    conf \u003d {}"},{"line_number":647,"context_line":"    rows_per_shard \u003d shrink_threshold \u003d expansion_limit \u003d 0"},{"line_number":648,"context_line":"    if args.conf_file:"},{"line_number":649,"context_line":"        conf \u003d readconf(args.conf_file, \u0027container-sharder\u0027)"},{"line_number":650,"context_line":"        shard_container_threshold \u003d int(conf.get("},{"line_number":651,"context_line":"            \u0027shard_container_threshold\u0027, DEFAULT_SHARD_CONTAINER_THRESHOLD))"}],"source_content_type":"text/x-python","patch_set":8,"id":"834cad6c_360a0171","line":648,"range":{"start_line":648,"start_character":5,"end_line":648,"end_character":20},"updated":"2021-03-05 13:21:24.000000000","message":"we should catch any exceptions in reading conf file and exit cleanly","commit_id":"20e1da5a52e8a5754fe99c6204d7f26ab01a4f60"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e851dfe61980ebebd2a4dffddb3ddf9b35773afe","unresolved":true,"context_lines":[{"line_number":647,"context_line":"    rows_per_shard \u003d shrink_threshold \u003d expansion_limit \u003d 0"},{"line_number":648,"context_line":"    if args.conf_file:"},{"line_number":649,"context_line":"        conf \u003d readconf(args.conf_file, \u0027container-sharder\u0027)"},{"line_number":650,"context_line":"        shard_container_threshold \u003d int(conf.get("},{"line_number":651,"context_line":"            \u0027shard_container_threshold\u0027, DEFAULT_SHARD_CONTAINER_THRESHOLD))"},{"line_number":652,"context_line":"        if shard_container_threshold:"},{"line_number":653,"context_line":"            rows_per_shard \u003d shard_container_threshold // 2"}],"source_content_type":"text/x-python","patch_set":8,"id":"3ed236cc_f185b79f","line":650,"range":{"start_line":650,"start_character":36,"end_line":650,"end_character":39},"updated":"2021-03-05 13:21:24.000000000","message":"should check it is a positive int","commit_id":"20e1da5a52e8a5754fe99c6204d7f26ab01a4f60"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"e851dfe61980ebebd2a4dffddb3ddf9b35773afe","unresolved":true,"context_lines":[{"line_number":668,"context_line":"        args.max_expanding \u003d int(conf.get("},{"line_number":669,"context_line":"            \"max_expanding\", DEFAULT_MAX_EXPANDING))"},{"line_number":670,"context_line":"    if \"shrink_threshold\" in args and args.shrink_threshold is None:"},{"line_number":671,"context_line":"        args.shrink_threshold \u003d shrink_threshold or DEFAULT_SHRINK_THRESHOLD"},{"line_number":672,"context_line":"    if \"expansion_limit\" in args and args.expansion_limit is None:"},{"line_number":673,"context_line":"        args.expansion_limit \u003d expansion_limit or DEFAULT_ROWS_PER_SHARD"},{"line_number":674,"context_line":"    if \"rows_per_shard\" in args and args.rows_per_shard is None:"}],"source_content_type":"text/x-python","patch_set":8,"id":"8847be11_a1218713","line":671,"range":{"start_line":671,"start_character":32,"end_line":671,"end_character":48},"updated":"2021-03-05 13:21:24.000000000","message":"this (and following) could be zero if the conf percent and shard_container_threshold are small - if so we should use zero rather then revert to a larger default - user might be surprised!","commit_id":"20e1da5a52e8a5754fe99c6204d7f26ab01a4f60"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"03597a98dee7093f81bd21d0cbe5e3b42c77fad3","unresolved":true,"context_lines":[{"line_number":647,"context_line":"    rows_per_shard \u003d DEFAULT_ROWS_PER_SHARD"},{"line_number":648,"context_line":"    shrink_threshold \u003d DEFAULT_SHRINK_THRESHOLD"},{"line_number":649,"context_line":"    expansion_limit \u003d DEFAULT_ROWS_PER_SHARD"},{"line_number":650,"context_line":"    if args.conf_file:"},{"line_number":651,"context_line":"        try:"},{"line_number":652,"context_line":"            conf \u003d readconf(args.conf_file, \u0027container-sharder\u0027)"},{"line_number":653,"context_line":"            shard_container_threshold \u003d config_positive_int_value(conf.get("}],"source_content_type":"text/x-python","patch_set":11,"id":"51ff6bc5_011215cf","line":650,"updated":"2021-03-11 19:35:43.000000000","message":"config is truely optional - there\u0027s no change if you don\u0027t evoke with --config","commit_id":"1ec19030a7c44620e9615c7e41efe4552421d341"}],"swift/common/utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":479,"context_line":"    return value"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"def config_percent_value(value):"},{"line_number":483,"context_line":"    try:"},{"line_number":484,"context_line":"        return config_float_value(value, 0, 100) / 100.0"},{"line_number":485,"context_line":"    except ValueError as err:"}],"source_content_type":"text/x-python","patch_set":6,"id":"181d9c9f_b0443249","line":482,"range":{"start_line":482,"start_character":4,"end_line":482,"end_character":24},"updated":"2021-03-02 21:30:26.000000000","message":"good call relocating this here","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":482,"context_line":"def config_percent_value(value):"},{"line_number":483,"context_line":"    try:"},{"line_number":484,"context_line":"        return config_float_value(value, 0, 100) / 100.0"},{"line_number":485,"context_line":"    except ValueError as err:"},{"line_number":486,"context_line":"        raise ValueError(\"%s: %s\" % (str(err), value))"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"8a053b1b_35e926f3","line":485,"range":{"start_line":485,"start_character":11,"end_line":485,"end_character":21},"updated":"2021-03-02 21:30:26.000000000","message":"can this be raised other than from config_float_value? just wondering if it needs to be re-raised here","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"04dd594abaeba18a7135332376cc1a799b218807","unresolved":true,"context_lines":[{"line_number":483,"context_line":"    try:"},{"line_number":484,"context_line":"        return config_float_value(value, 0, 100) / 100.0"},{"line_number":485,"context_line":"    except ValueError as err:"},{"line_number":486,"context_line":"        raise ValueError(\"%s: %s\" % (str(err), value))"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"def append_underscore(prefix):"}],"source_content_type":"text/x-python","patch_set":11,"id":"347b0cdf_700c4412","line":486,"updated":"2021-03-12 14:05:53.000000000","message":"hey that\u0027s handy!","commit_id":"1ec19030a7c44620e9615c7e41efe4552421d341"}],"swift/container/sharder.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"04dd594abaeba18a7135332376cc1a799b218807","unresolved":true,"context_lines":[{"line_number":468,"context_line":""},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"DEFAULT_SHARD_CONTAINER_THRESHOLD \u003d 1000000"},{"line_number":471,"context_line":"DEFAULT_SHARD_SHRINK_POINT \u003d 10"},{"line_number":472,"context_line":"DEFAULT_SHARD_MERGE_POINT \u003d 75"},{"line_number":473,"context_line":"DEFAULT_MAX_SHRINKING \u003d 1"},{"line_number":474,"context_line":"DEFAULT_MAX_EXPANDING \u003d -1"}],"source_content_type":"text/x-python","patch_set":11,"id":"2d23357e_045047bf","line":471,"updated":"2021-03-12 14:05:53.000000000","message":"oh, it\u0027s possible this change was an accident - the sample configs were already out of date","commit_id":"1ec19030a7c44620e9615c7e41efe4552421d341"}],"test/probe/test_sharder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"495ec59a39d4d804e40138229a92f9e2443135be","unresolved":true,"context_lines":[{"line_number":2744,"context_line":"        self.assert_container_state(self.brain.nodes[2], \u0027sharded\u0027, 4)"},{"line_number":2745,"context_line":"        self.assert_container_listing(obj_names)"},{"line_number":2746,"context_line":""},{"line_number":2747,"context_line":"        return"},{"line_number":2748,"context_line":""},{"line_number":2749,"context_line":""},{"line_number":2750,"context_line":"        # now compact some ranges; use --max-shrinking to allow 2 shrinking"}],"source_content_type":"text/x-python","patch_set":9,"id":"b0ad9fd4_09fc3acb","line":2747,"updated":"2021-03-05 13:55:55.000000000","message":"oops","commit_id":"fa6bee02e95a4aae95505d6b5c779b6625f17afe"}],"test/unit/cli/test_manage_shard_ranges.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"03597a98dee7093f81bd21d0cbe5e3b42c77fad3","unresolved":true,"context_lines":[{"line_number":130,"context_line":"        expected \u003d Namespace(conf_file\u003dconf_file,"},{"line_number":131,"context_line":"                             container_db\u003dmock.ANY,"},{"line_number":132,"context_line":"                             func\u003dmock.ANY,"},{"line_number":133,"context_line":"                             rows_per_shard\u003d500,"},{"line_number":134,"context_line":"                             subcommand\u003d\u0027find\u0027,"},{"line_number":135,"context_line":"                             verbose\u003d0)"},{"line_number":136,"context_line":"        mocked.assert_called_once_with(mock.ANY, expected)"}],"source_content_type":"text/x-python","patch_set":11,"id":"69fb179b_b2c095ea","line":133,"updated":"2021-03-11 19:35:43.000000000","message":"where does *this* number come from - i don\u0027t see 500 in the conf above","commit_id":"1ec19030a7c44620e9615c7e41efe4552421d341"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a0417fa56f28f6f876899f267a4b4404f4685bc9","unresolved":true,"context_lines":[{"line_number":130,"context_line":"        expected \u003d Namespace(conf_file\u003dconf_file,"},{"line_number":131,"context_line":"                             container_db\u003dmock.ANY,"},{"line_number":132,"context_line":"                             func\u003dmock.ANY,"},{"line_number":133,"context_line":"                             rows_per_shard\u003d500,"},{"line_number":134,"context_line":"                             subcommand\u003d\u0027find\u0027,"},{"line_number":135,"context_line":"                             verbose\u003d0)"},{"line_number":136,"context_line":"        mocked.assert_called_once_with(mock.ANY, expected)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fd8dc6a4_13285c05","line":133,"in_reply_to":"69fb179b_b2c095ea","updated":"2021-03-11 21:14:46.000000000","message":"1000/2 - rows per shard is always shard_container_threshold // 2 (currently)","commit_id":"1ec19030a7c44620e9615c7e41efe4552421d341"}],"test/unit/common/test_utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5b7fe86b4ec35e3b087a2f28e77f403487911d42","unresolved":true,"context_lines":[{"line_number":3065,"context_line":"            self.assertEqual(expected, actual)"},{"line_number":3066,"context_line":""},{"line_number":3067,"context_line":"        # bad values"},{"line_number":3068,"context_line":"        for val in (-1, \u0027-1\u0027, 101, \u0027101\u0027):"},{"line_number":3069,"context_line":"            with self.assertRaises(ValueError) as cm:"},{"line_number":3070,"context_line":"                utils.config_percent_value(val)"},{"line_number":3071,"context_line":"            self.assertIn(\u0027Config option must be a number, greater than 0, \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"230d0636_d2c98ecf","line":3068,"updated":"2021-03-02 21:30:26.000000000","message":"nit: could throw a non-number in for good measure too","commit_id":"b019a7aedad0a9fa1c7eec1e9ec70c6145266ca7"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"04dd594abaeba18a7135332376cc1a799b218807","unresolved":true,"context_lines":[{"line_number":3060,"context_line":"                (100, 1.0),"},{"line_number":3061,"context_line":"                (1, 0.01),"},{"line_number":3062,"context_line":"                (\u00271\u0027, 0.01),"},{"line_number":3063,"context_line":"                (25, 0.25)):"},{"line_number":3064,"context_line":"            actual \u003d utils.config_percent_value(arg)"},{"line_number":3065,"context_line":"            self.assertEqual(expected, actual)"},{"line_number":3066,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"38f9e00b_0a0db9a9","line":3063,"updated":"2021-03-12 14:05:53.000000000","message":"noice.","commit_id":"1ec19030a7c44620e9615c7e41efe4552421d341"}]}
