)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"528cb6f2c8ee001b0ccf5b229fee40e40aba8c71","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Unify sharder and manage-shard-ranges options"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change the swift-manage-shard-ranges default expansion-limit to equal"},{"line_number":10,"context_line":"the sharder daemon default merge_size i.e 750000."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Define sharder default config values in a dict to make"},{"line_number":13,"context_line":"application of the default values simpler."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"2c16cd6a_204d3409","line":10,"updated":"2021-05-18 21:37:01.000000000","message":"Interesting that so much of this patch is renaming things in such a way as to *not* change swift-manage-shard-ranges, except for this part...","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"528cb6f2c8ee001b0ccf5b229fee40e40aba8c71","unresolved":true,"context_lines":[{"line_number":15,"context_line":"Rename ContainerSharder member vars to match the equivalent vars and"},{"line_number":16,"context_line":"cli options in manage_shard_ranges:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  shrink_size -\u003e shrinking_threshold"},{"line_number":19,"context_line":"  merge_size -\u003e expansion_limit"},{"line_number":20,"context_line":"  split_size -\u003e rows_per_shard"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"b0713794_365c9e5b","line":18,"range":{"start_line":18,"start_character":17,"end_line":18,"end_character":36},"updated":"2021-05-18 21:37:01.000000000","message":"\"shrink_threshold\", yeah? No -ing?","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Rename ContainerSharder member vars to match the equivalent vars and"},{"line_number":16,"context_line":"cli options in manage_shard_ranges:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"  shrink_size -\u003e shrinking_threshold"},{"line_number":19,"context_line":"  merge_size -\u003e expansion_limit"},{"line_number":20,"context_line":"  split_size -\u003e rows_per_shard"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"e09fa8a9_26750c1c","line":18,"range":{"start_line":18,"start_character":17,"end_line":18,"end_character":36},"in_reply_to":"b0713794_365c9e5b","updated":"2021-05-19 14:20:19.000000000","message":"Done","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"}],"doc/source/config/container_server_config.rst":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3dee99fabe31efea00cf0a14dfe1478c9e0097fc","unresolved":true,"context_lines":[{"line_number":326,"context_line":"                                                      shrinking and merging"},{"line_number":327,"context_line":"                                                      shard containers."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"shard_shrink_point                5                   When auto-sharding is"},{"line_number":330,"context_line":"                                                      enabled this defines the"},{"line_number":331,"context_line":"                                                      object count below which"},{"line_number":332,"context_line":"                                                      a \u0027donor\u0027 shard container"}],"source_content_type":"text/x-rst","patch_set":2,"id":"df1fda71_b020b0b9","line":329,"range":{"start_line":329,"start_character":34,"end_line":329,"end_character":35},"updated":"2021-03-09 04:05:11.000000000","message":"This isn\u0027t correct, I mean it\u0027s a correct value but not the default. In this chain the correct is 10, currently on master it\u0027s 25.","commit_id":"618de458e73fa4def10fa3daf9d6ff6e2f2be61c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"12d3008a78ffebeeaa6464121d72f07e293230f4","unresolved":true,"context_lines":[{"line_number":326,"context_line":"                                                      shrinking and merging"},{"line_number":327,"context_line":"                                                      shard containers."},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"shard_shrink_point                5                   When auto-sharding is"},{"line_number":330,"context_line":"                                                      enabled this defines the"},{"line_number":331,"context_line":"                                                      object count below which"},{"line_number":332,"context_line":"                                                      a \u0027donor\u0027 shard container"}],"source_content_type":"text/x-rst","patch_set":2,"id":"c3a0a650_3d033e23","line":329,"range":{"start_line":329,"start_character":34,"end_line":329,"end_character":35},"in_reply_to":"df1fda71_b020b0b9","updated":"2021-03-09 12:53:23.000000000","message":"good catch\n\nso 5 was plain wrong on master?","commit_id":"618de458e73fa4def10fa3daf9d6ff6e2f2be61c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"12d3008a78ffebeeaa6464121d72f07e293230f4","unresolved":true,"context_lines":[{"line_number":341,"context_line":"                                                      5 means 5% of the"},{"line_number":342,"context_line":"                                                      shard_container_threshold."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"shard_shrink_merge_point          50                  When auto-sharding is"},{"line_number":345,"context_line":"                                                      enabled this defines the"},{"line_number":346,"context_line":"                                                      maximum allowed size of"},{"line_number":347,"context_line":"                                                      an acceptor shard"}],"source_content_type":"text/x-rst","patch_set":2,"id":"f7066e85_b680382b","line":344,"range":{"start_line":344,"start_character":34,"end_line":344,"end_character":36},"updated":"2021-03-09 12:53:23.000000000","message":"I need to revert this to 75","commit_id":"618de458e73fa4def10fa3daf9d6ff6e2f2be61c"}],"swift/cli/manage_shard_ranges.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"70f10af7d5cbd7d7f255f6f7cf0c89193af4c69d","unresolved":true,"context_lines":[{"line_number":837,"context_line":"                                help\u003d\u0027Maximum number of rows for an expanding \u0027"},{"line_number":838,"context_line":"                                     \u0027shard to have after compaction has \u0027"},{"line_number":839,"context_line":"                                     \u0027completed. Defaults to %d\u0027 %"},{"line_number":840,"context_line":"                                     DEFAULT_ROWS_PER_SHARD)"},{"line_number":841,"context_line":"    # If just one donor shard is chosen to shrink to an acceptor then the"},{"line_number":842,"context_line":"    # expanded acceptor will handle object listings as soon as the donor shard"},{"line_number":843,"context_line":"    # has shrunk. If more than one donor shard are chosen to shrink to an"}],"source_content_type":"text/x-python","patch_set":9,"id":"76f6df07_a26d2d61","side":"PARENT","line":840,"range":{"start_line":840,"start_character":37,"end_line":840,"end_character":59},"updated":"2021-05-18 22:59:26.000000000","message":"Huh. That doesn\u0027t look like it was right before...","commit_id":"bbe189b5377509192eae660b6b6f5eb623d06912"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":true,"context_lines":[{"line_number":837,"context_line":"                                help\u003d\u0027Maximum number of rows for an expanding \u0027"},{"line_number":838,"context_line":"                                     \u0027shard to have after compaction has \u0027"},{"line_number":839,"context_line":"                                     \u0027completed. Defaults to %d\u0027 %"},{"line_number":840,"context_line":"                                     DEFAULT_ROWS_PER_SHARD)"},{"line_number":841,"context_line":"    # If just one donor shard is chosen to shrink to an acceptor then the"},{"line_number":842,"context_line":"    # expanded acceptor will handle object listings as soon as the donor shard"},{"line_number":843,"context_line":"    # has shrunk. If more than one donor shard are chosen to shrink to an"}],"source_content_type":"text/x-python","patch_set":9,"id":"b3c6818f_ec49763f","side":"PARENT","line":840,"range":{"start_line":840,"start_character":37,"end_line":840,"end_character":59},"in_reply_to":"76f6df07_a26d2d61","updated":"2021-05-19 14:20:19.000000000","message":"This drives from my (presumable) mistake when adding the compact command\n\nhttps://review.opendev.org/c/openstack/swift/+/765623/16/swift/cli/manage_shard_ranges.py#596\n\nwhich is why I chose to bring s-m-s-r in line with sharder in this case rather than vice-versa: I don\u0027t think it was ever my intention to have a different default.","commit_id":"bbe189b5377509192eae660b6b6f5eb623d06912"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"70f10af7d5cbd7d7f255f6f7cf0c89193af4c69d","unresolved":true,"context_lines":[{"line_number":700,"context_line":"    parser.add_argument("},{"line_number":701,"context_line":"        \u0027rows_per_shard\u0027, nargs\u003d\u0027?\u0027, type\u003dint, default\u003dNone,"},{"line_number":702,"context_line":"        help\u003d\u0027Target number of rows for newly created shards.\u0027"},{"line_number":703,"context_line":"        \u0027Default is %s\u0027 % DEFAULT_SHARDER_CONF[\u0027rows_per_shard\u0027])"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"def _add_replace_args(parser):"}],"source_content_type":"text/x-python","patch_set":9,"id":"40f25f7a_027d6839","line":703,"range":{"start_line":703,"start_character":9,"end_line":703,"end_character":65},"updated":"2021-05-18 22:59:26.000000000","message":"Is it? IDK that we can make reasonable statements about what the default will be when it\u0027s derived from some other value (that\u0027s not even configurable from the CLI!)","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":true,"context_lines":[{"line_number":700,"context_line":"    parser.add_argument("},{"line_number":701,"context_line":"        \u0027rows_per_shard\u0027, nargs\u003d\u0027?\u0027, type\u003dint, default\u003dNone,"},{"line_number":702,"context_line":"        help\u003d\u0027Target number of rows for newly created shards.\u0027"},{"line_number":703,"context_line":"        \u0027Default is %s\u0027 % DEFAULT_SHARDER_CONF[\u0027rows_per_shard\u0027])"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":""},{"line_number":706,"context_line":"def _add_replace_args(parser):"}],"source_content_type":"text/x-python","patch_set":9,"id":"34d18a27_ef55c8cd","line":703,"range":{"start_line":703,"start_character":9,"end_line":703,"end_character":65},"in_reply_to":"40f25f7a_027d6839","updated":"2021-05-19 14:20:19.000000000","message":"Added some wording about picking up a default from a conf file","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":706,"context_line":"def _add_replace_args(parser):"},{"line_number":707,"context_line":"    parser.add_argument("},{"line_number":708,"context_line":"        \u0027--shards_account_prefix\u0027, metavar\u003d\u0027shards_account_prefix\u0027, type\u003dstr,"},{"line_number":709,"context_line":"        required\u003dFalse, help\u003d\u0027Prefix for shards account\u0027, default\u003d\u0027.shards_\u0027)"},{"line_number":710,"context_line":"    parser.add_argument("},{"line_number":711,"context_line":"        \u0027--replace-timeout\u0027, type\u003dint, default\u003d600,"},{"line_number":712,"context_line":"        help\u003d\u0027Minimum DB timeout to use when replacing shard ranges.\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"52a55a20_78c7b022","line":709,"updated":"2021-05-18 00:01:51.000000000","message":"the sharder sort of let\u0027s you configure this - if you managed to use +shards_ or something using swift.conf you may be disappointed it didn\u0027t come through here along with the rest of your configuration\n\n... but the patch said unify *sharder* options - this is more of a constraint","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":true,"context_lines":[{"line_number":706,"context_line":"def _add_replace_args(parser):"},{"line_number":707,"context_line":"    parser.add_argument("},{"line_number":708,"context_line":"        \u0027--shards_account_prefix\u0027, metavar\u003d\u0027shards_account_prefix\u0027, type\u003dstr,"},{"line_number":709,"context_line":"        required\u003dFalse, help\u003d\u0027Prefix for shards account\u0027, default\u003d\u0027.shards_\u0027)"},{"line_number":710,"context_line":"    parser.add_argument("},{"line_number":711,"context_line":"        \u0027--replace-timeout\u0027, type\u003dint, default\u003d600,"},{"line_number":712,"context_line":"        help\u003d\u0027Minimum DB timeout to use when replacing shard ranges.\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad1e745_79ee45ed","line":709,"in_reply_to":"52a55a20_78c7b022","updated":"2021-05-19 14:20:19.000000000","message":"Added some wording to discourage changing this unless swift.conf has been changed.","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":840,"context_line":"    # temporary gap(s) in object listings where the shrunk donors are missing."},{"line_number":841,"context_line":"    compact_parser.add_argument(\u0027--max-shrinking\u0027, nargs\u003d\u0027?\u0027,"},{"line_number":842,"context_line":"                                type\u003d_positive_int,"},{"line_number":843,"context_line":"                                default\u003dNone,"},{"line_number":844,"context_line":"                                help\u003d\u0027Maximum number of shards that should be \u0027"},{"line_number":845,"context_line":"                                     \u0027shrunk into each expanding shard. \u0027"},{"line_number":846,"context_line":"                                     \u0027Defaults to 1. Using values greater \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"b4d685ac_ae4bce90","line":843,"updated":"2021-05-18 00:01:51.000000000","message":"we\u0027re going to have to be careful with these None defaults, this passes:\n\n\tdiff --git a/swift/cli/manage_shard_ranges.py b/swift/cli/manage_shard_ranges.py\n\tindex f5cb5777e..2ba6c30bd 100644\n\t--- a/swift/cli/manage_shard_ranges.py\n\t+++ b/swift/cli/manage_shard_ranges.py\n\t@@ -840,7 +840,7 @@ def _make_parser():\n\t     # temporary gap(s) in object listings where the shrunk donors are missing.\n\t     compact_parser.add_argument(\u0027--max-shrinking\u0027, nargs\u003d\u0027?\u0027,\n\t\t\t\t\t type\u003d_positive_int,\n\t-                                default\u003dNone,\n\t+                                default\u003d1,\n\t\t\t\t\t help\u003d\u0027Maximum number of shards that should be \u0027\n\t\t\t\t\t      \u0027shrunk into each expanding shard. \u0027\n\t\t\t\t\t      \u0027Defaults to 1. Using values greater \u0027\n\n... but it wouldn\u0027t if we change either default","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":true,"context_lines":[{"line_number":840,"context_line":"    # temporary gap(s) in object listings where the shrunk donors are missing."},{"line_number":841,"context_line":"    compact_parser.add_argument(\u0027--max-shrinking\u0027, nargs\u003d\u0027?\u0027,"},{"line_number":842,"context_line":"                                type\u003d_positive_int,"},{"line_number":843,"context_line":"                                default\u003dNone,"},{"line_number":844,"context_line":"                                help\u003d\u0027Maximum number of shards that should be \u0027"},{"line_number":845,"context_line":"                                     \u0027shrunk into each expanding shard. \u0027"},{"line_number":846,"context_line":"                                     \u0027Defaults to 1. Using values greater \u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"b40c1363_b4c163e5","line":843,"in_reply_to":"b4d685ac_ae4bce90","updated":"2021-05-19 14:20:19.000000000","message":"Yes, the use of None as defaults isn\u0027t ideal. I\u0027ll add a comment.\n\nBut I do see a test fail with that diff:\n\n  Traceback (most recent call last):\n  File \"/Users/acoles/.pyenv/versions/3.6.9/lib/python3.6/unittest/case.py\", line 59, in testPartExecutor\n    yield\n  File \"/Users/acoles/.pyenv/versions/3.6.9/lib/python3.6/unittest/case.py\", line 605, in run\n    testMethod()\n  File \"/Users/acoles/0dev/openstack/swift/test/unit/cli/test_manage_shard_ranges.py\", line 228, in test_conf_file_options\n    mocked.assert_called_once_with(mock.ANY, expected)\n  File \"/Users/acoles/.pyenv/versions/swift-3.6.9/lib/python3.6/site-packages/mock/mock.py\", line 926, in assert_called_once_with\n    return self.assert_called_with(*args, **kwargs)\n  File \"/Users/acoles/.pyenv/versions/swift-3.6.9/lib/python3.6/site-packages/mock/mock.py\", line 913, in assert_called_with\n    raise AssertionError(_error_message()) from cause\nAssertionError: expected call not found.\nExpected: compact_shard_ranges(\u003cANY\u003e, Namespace(conf_file\u003d\u0027/var/folders/n4/nf8krx110f39llj82fbw_xjm0000gp/T/tmp6zyf1s6o/tmp_test_cli_find_shards/sharder.conf\u0027, dry_run\u003dFalse, expansion_limit\u003d650, force_commits\u003dFalse, func\u003d\u003cANY\u003e, max_expanding\u003d31, max_shrinking\u003d33, path_to_file\u003d\u003cANY\u003e, shrink_threshold\u003d150, subcommand\u003d\u0027compact\u0027, verbose\u003d0, yes\u003dFalse))\nActual: compact_shard_ranges(\u003cswift.container.backend.ContainerBroker object at 0x104c636d8\u003e, Namespace(conf_file\u003d\u0027/var/folders/n4/nf8krx110f39llj82fbw_xjm0000gp/T/tmp6zyf1s6o/tmp_test_cli_find_shards/sharder.conf\u0027, dry_run\u003dFalse, expansion_limit\u003d650, force_commits\u003dFalse, func\u003d\u003cMagicMock name\u003d\u0027compact_shard_ranges\u0027 id\u003d\u00274378076104\u0027\u003e, max_expanding\u003d31, max_shrinking\u003d1, path_to_file\u003d\u0027/var/folders/n4/nf8krx110f39llj82fbw_xjm0000gp/T/tmp6zyf1s6o/tmp_test_cli_find_shards/hash.db\u0027, shrink_threshold\u003d150, subcommand\u003d\u0027compact\u0027, verbose\u003d0, yes\u003dFalse))","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"}],"swift/container/sharder.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3dee99fabe31efea00cf0a14dfe1478c9e0097fc","unresolved":true,"context_lines":[{"line_number":485,"context_line":"    # not exposed as a config file option but here for convenience..."},{"line_number":486,"context_line":"    \u0027shrink_threshold\u0027: 100000,"},{"line_number":487,"context_line":"    \u0027expansion_limit\u0027: 750000,"},{"line_number":488,"context_line":"    \u0027rows_per_shard_percent\u0027: 50,"},{"line_number":489,"context_line":"}"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"cd76cae7_1d05da82","line":488,"updated":"2021-03-09 04:05:11.000000000","message":"so the default sharding conf returns the defaults as they should appear once they\u0027ve been preocessed by the __init__ method of the sharder, not as they are defined in the acutal sharder config?\n\nBecause in the sharder conf these are percents not object count values, as I see they\u0027ve modified in the init_sharding_conf.\n\nI\u0027m not saying it\u0027s wrong. I guess it\u0027s the fact that we\u0027re using CONF with value that doesn\u0027t actaully match the config values make it a little confusing.\n\nShould we just get rid of the whole percentage and just use whole values in config. It might make it easier and less confusing? Though the advantage of percentages it they\u0027re usful to get the number of knobs down as everything was derived from the shard_container_threshold _but_ could be overridden, if we go with absolutes, when container_threshold grows you must also edit other options.","commit_id":"618de458e73fa4def10fa3daf9d6ff6e2f2be61c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5f3909d1558aa9ad9935057de0208bed0a6bc78c","unresolved":true,"context_lines":[{"line_number":485,"context_line":"    # not exposed as a config file option but here for convenience..."},{"line_number":486,"context_line":"    \u0027shrink_threshold\u0027: 100000,"},{"line_number":487,"context_line":"    \u0027expansion_limit\u0027: 750000,"},{"line_number":488,"context_line":"    \u0027rows_per_shard_percent\u0027: 50,"},{"line_number":489,"context_line":"}"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"2a5edb9e_9bb7fb3a","line":488,"in_reply_to":"ba463e82_d5d3edf5","updated":"2021-03-22 09:48:37.000000000","message":"Yeah, it is kinda annoying to have defaults for things only if others happen to be defaults too. But I like to think the next patch is depricating the percentages, so this patch is a stepping stone. You\u0027ve cleanup up the amount of config option translations that needs to happen, and simlified the code.","commit_id":"618de458e73fa4def10fa3daf9d6ff6e2f2be61c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"12d3008a78ffebeeaa6464121d72f07e293230f4","unresolved":true,"context_lines":[{"line_number":485,"context_line":"    # not exposed as a config file option but here for convenience..."},{"line_number":486,"context_line":"    \u0027shrink_threshold\u0027: 100000,"},{"line_number":487,"context_line":"    \u0027expansion_limit\u0027: 750000,"},{"line_number":488,"context_line":"    \u0027rows_per_shard_percent\u0027: 50,"},{"line_number":489,"context_line":"}"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba463e82_d5d3edf5","line":488,"in_reply_to":"cd76cae7_1d05da82","updated":"2021-03-09 12:53:23.000000000","message":"I included rows_per_shard, shrink_threshold and expansion_limit (precomputed default values) as a convenience so that in s-m-s-r we can refer to something for the defaults in the parser args help strings. Also, a bit of a nod to the next patch which makes the configurable options in their own right.\n\nrows_per_shard_percent is added just for consistency with the other percent based options, instead of a hard coded divide-by-2.\n\nIt is a little odd in that these defaults are only default when other options are at their default values, but I couldn\u0027t think of a way round this other than very complex help strings in s-m-s-r.\n\nIf it too confusing to have them here I could just move them back to constant declarations in manage_shard_ranges?\n\nI\u0027ll add more comment.","commit_id":"618de458e73fa4def10fa3daf9d6ff6e2f2be61c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"3dee99fabe31efea00cf0a14dfe1478c9e0097fc","unresolved":true,"context_lines":[{"line_number":565,"context_line":"            auto_create_account_prefix \u003d AUTO_CREATE_ACCOUNT_PREFIX"},{"line_number":566,"context_line":"        self.shards_account_prefix \u003d (auto_create_account_prefix + \u0027shards_\u0027)"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"        init_sharding_conf(conf, self)"},{"line_number":569,"context_line":""},{"line_number":570,"context_line":"        self.sharding_candidates \u003d []"},{"line_number":571,"context_line":"        self.shrinking_candidates \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"9df5a3e9_d3cccb1e","line":568,"updated":"2021-03-09 04:05:11.000000000","message":"nice clean up.","commit_id":"618de458e73fa4def10fa3daf9d6ff6e2f2be61c"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":607,"context_line":"        self.shrink_size \u003d (self.shard_container_threshold *"},{"line_number":608,"context_line":"                            self.shard_shrink_point)"},{"line_number":609,"context_line":"        self.merge_size \u003d (self.shard_container_threshold *"},{"line_number":610,"context_line":"                           self.shrink_merge_point)"},{"line_number":611,"context_line":"        self.split_size \u003d self.shard_container_threshold // 2"},{"line_number":612,"context_line":"        self.scanner_batch_size \u003d config_positive_int_value("},{"line_number":613,"context_line":"            conf.get(\u0027shard_scanner_batch_size\u0027, 10))"}],"source_content_type":"text/x-python","patch_set":9,"id":"4df07cbb_afe7d12e","side":"PARENT","line":610,"updated":"2021-05-18 00:01:51.000000000","message":"shrink_size \u003d\u003e shrink_threshold\nmerge_size \u003d\u003e expansion_limit","commit_id":"bbe189b5377509192eae660b6b6f5eb623d06912"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":608,"context_line":"                            self.shard_shrink_point)"},{"line_number":609,"context_line":"        self.merge_size \u003d (self.shard_container_threshold *"},{"line_number":610,"context_line":"                           self.shrink_merge_point)"},{"line_number":611,"context_line":"        self.split_size \u003d self.shard_container_threshold // 2"},{"line_number":612,"context_line":"        self.scanner_batch_size \u003d config_positive_int_value("},{"line_number":613,"context_line":"            conf.get(\u0027shard_scanner_batch_size\u0027, 10))"},{"line_number":614,"context_line":"        self.cleave_batch_size \u003d config_positive_int_value("}],"source_content_type":"text/x-python","patch_set":9,"id":"35feee2e_fbb7ff47","side":"PARENT","line":611,"updated":"2021-05-18 00:01:51.000000000","message":"split_size \u003d\u003e rows_per_shard\n\nI guess it wasn\u0027t previously configurable...","commit_id":"bbe189b5377509192eae660b6b6f5eb623d06912"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"528cb6f2c8ee001b0ccf5b229fee40e40aba8c71","unresolved":true,"context_lines":[{"line_number":649,"context_line":"            self.existing_shard_replication_quorum \u003d replica_count"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"        # internal client"},{"line_number":652,"context_line":"        self.conn_timeout \u003d float(conf.get(\u0027conn_timeout\u0027, 5))"},{"line_number":653,"context_line":"        request_tries \u003d config_positive_int_value("},{"line_number":654,"context_line":"            conf.get(\u0027request_tries\u0027, 3))"},{"line_number":655,"context_line":"        internal_client_conf_path \u003d conf.get(\u0027internal_client_conf_path\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"093cc2f3_5e374a01","side":"PARENT","line":652,"range":{"start_line":652,"start_character":13,"end_line":652,"end_character":25},"updated":"2021-05-18 21:37:01.000000000","message":"Weird that we ever had this under a comment of\n\n # internal client\n\nall the timeouts would be configures through internal-client.conf; this is only used for the direct_put_container calls!","commit_id":"bbe189b5377509192eae660b6b6f5eb623d06912"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":false,"context_lines":[{"line_number":649,"context_line":"            self.existing_shard_replication_quorum \u003d replica_count"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"        # internal client"},{"line_number":652,"context_line":"        self.conn_timeout \u003d float(conf.get(\u0027conn_timeout\u0027, 5))"},{"line_number":653,"context_line":"        request_tries \u003d config_positive_int_value("},{"line_number":654,"context_line":"            conf.get(\u0027request_tries\u0027, 3))"},{"line_number":655,"context_line":"        internal_client_conf_path \u003d conf.get(\u0027internal_client_conf_path\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"6848b15b_3146f65b","side":"PARENT","line":652,"range":{"start_line":652,"start_character":13,"end_line":652,"end_character":25},"in_reply_to":"093cc2f3_5e374a01","updated":"2021-05-19 14:20:19.000000000","message":"Ack","commit_id":"bbe189b5377509192eae660b6b6f5eb623d06912"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"528cb6f2c8ee001b0ccf5b229fee40e40aba8c71","unresolved":true,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def is_shrinking_candidate(shard_range, shrink_threshold, expansion_limit,"},{"line_number":130,"context_line":"                           states\u003dNone):"},{"line_number":131,"context_line":"    # typically shrink_threshold \u003c merge_size but check both just in case"},{"line_number":132,"context_line":"    # note: use *row* count (objects plus tombstones) as the condition for"},{"line_number":133,"context_line":"    # shrinking to avoid inadvertently moving large numbers of tombstones into"},{"line_number":134,"context_line":"    # an acceptor"}],"source_content_type":"text/x-python","patch_set":9,"id":"44e0f6ca_5558fb81","line":131,"range":{"start_line":131,"start_character":35,"end_line":131,"end_character":45},"updated":"2021-05-18 21:37:01.000000000","message":"expansion_limit","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def is_shrinking_candidate(shard_range, shrink_threshold, expansion_limit,"},{"line_number":130,"context_line":"                           states\u003dNone):"},{"line_number":131,"context_line":"    # typically shrink_threshold \u003c merge_size but check both just in case"},{"line_number":132,"context_line":"    # note: use *row* count (objects plus tombstones) as the condition for"},{"line_number":133,"context_line":"    # shrinking to avoid inadvertently moving large numbers of tombstones into"},{"line_number":134,"context_line":"    # an acceptor"}],"source_content_type":"text/x-python","patch_set":9,"id":"7c703b16_8175072c","line":131,"range":{"start_line":131,"start_character":35,"end_line":131,"end_character":45},"in_reply_to":"44e0f6ca_5558fb81","updated":"2021-05-19 14:20:19.000000000","message":"Done","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":593,"context_line":"    \u0027shrink_threshold\u0027: 100000,"},{"line_number":594,"context_line":"    # expansion_limit \u003d shard_shrink_merge_point * shard_container_threshold"},{"line_number":595,"context_line":"    \u0027expansion_limit\u0027: 750000,"},{"line_number":596,"context_line":"    \u0027rows_per_shard_percent\u0027: 50,"},{"line_number":597,"context_line":"    # rows_per_shard \u003d rows_per_shard_percent * shard_container_threshold"},{"line_number":598,"context_line":"    \u0027rows_per_shard\u0027: 500000,"},{"line_number":599,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":9,"id":"d83759fc_a7baad0e","line":596,"updated":"2021-05-18 00:01:51.000000000","message":"I guess this new option would be deprecated immediately in the next patch?  Otherwise we should probably add it to the example configs (maybe we still should?)","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":true,"context_lines":[{"line_number":593,"context_line":"    \u0027shrink_threshold\u0027: 100000,"},{"line_number":594,"context_line":"    # expansion_limit \u003d shard_shrink_merge_point * shard_container_threshold"},{"line_number":595,"context_line":"    \u0027expansion_limit\u0027: 750000,"},{"line_number":596,"context_line":"    \u0027rows_per_shard_percent\u0027: 50,"},{"line_number":597,"context_line":"    # rows_per_shard \u003d rows_per_shard_percent * shard_container_threshold"},{"line_number":598,"context_line":"    \u0027rows_per_shard\u0027: 500000,"},{"line_number":599,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":9,"id":"ec6d1559_6435258e","line":596,"in_reply_to":"d83759fc_a7baad0e","updated":"2021-05-19 14:20:19.000000000","message":"see below - it was not intended to become a configurable option","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":false,"context_lines":[{"line_number":622,"context_line":"        \"\"\""},{"line_number":623,"context_line":"        conf_key \u003d conf_key or key"},{"line_number":624,"context_line":"        try:"},{"line_number":625,"context_line":"            setattr(namespace, key, validator(conf.get(conf_key)))"},{"line_number":626,"context_line":"        except ValueError as err:"},{"line_number":627,"context_line":"            raise ValueError(\u0027Error setting %s: %s\u0027 % (conf_key, err))"},{"line_number":628,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"8c4c9281_cea60443","line":625,"range":{"start_line":625,"start_character":46,"end_line":625,"end_character":64},"updated":"2021-05-19 14:20:19.000000000","message":"this can be conf[conf_key] and becomes that in the next patch: all the keys have been given default vals before set_val is called","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":647,"context_line":"        (\u0027auto_shard\u0027, config_true_value),"},{"line_number":648,"context_line":"        # some options are derived from percentage of shard_container_threshold"},{"line_number":649,"context_line":"        # so must be listed after shard_container_threshold has been set..."},{"line_number":650,"context_line":"        (\u0027rows_per_shard\u0027, percent_of_threshold, \u0027rows_per_shard_percent\u0027),"},{"line_number":651,"context_line":"        (\u0027shrink_threshold\u0027, percent_of_threshold, \u0027shard_shrink_point\u0027),"},{"line_number":652,"context_line":"        (\u0027expansion_limit\u0027, percent_of_threshold, \u0027shard_shrink_merge_point\u0027),"},{"line_number":653,"context_line":"    ):"}],"source_content_type":"text/x-python","patch_set":9,"id":"6871a591_1f60335f","line":650,"updated":"2021-05-18 00:01:51.000000000","message":"is rows_per_shard_percent a new config option?","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":true,"context_lines":[{"line_number":647,"context_line":"        (\u0027auto_shard\u0027, config_true_value),"},{"line_number":648,"context_line":"        # some options are derived from percentage of shard_container_threshold"},{"line_number":649,"context_line":"        # so must be listed after shard_container_threshold has been set..."},{"line_number":650,"context_line":"        (\u0027rows_per_shard\u0027, percent_of_threshold, \u0027rows_per_shard_percent\u0027),"},{"line_number":651,"context_line":"        (\u0027shrink_threshold\u0027, percent_of_threshold, \u0027shard_shrink_point\u0027),"},{"line_number":652,"context_line":"        (\u0027expansion_limit\u0027, percent_of_threshold, \u0027shard_shrink_merge_point\u0027),"},{"line_number":653,"context_line":"    ):"}],"source_content_type":"text/x-python","patch_set":9,"id":"977d154d_a65def10","line":650,"in_reply_to":"6871a591_1f60335f","updated":"2021-05-19 14:20:19.000000000","message":"No that was not the intention but it has accidentally become so. I\u0027ll add an exclusion to prevent it being set from conf file. It may be useful to be able to set it, but that is not the goal of this patch and there is already enough going on here for one patch.\n\nGood catch!","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":649,"context_line":"        # so must be listed after shard_container_threshold has been set..."},{"line_number":650,"context_line":"        (\u0027rows_per_shard\u0027, percent_of_threshold, \u0027rows_per_shard_percent\u0027),"},{"line_number":651,"context_line":"        (\u0027shrink_threshold\u0027, percent_of_threshold, \u0027shard_shrink_point\u0027),"},{"line_number":652,"context_line":"        (\u0027expansion_limit\u0027, percent_of_threshold, \u0027shard_shrink_merge_point\u0027),"},{"line_number":653,"context_line":"    ):"},{"line_number":654,"context_line":"        set_val(*args)"},{"line_number":655,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"2f4e357b_9ba1e4ef","line":652,"updated":"2021-05-18 00:01:51.000000000","message":"In the spirit of DRY and single-source-of-truth, I attempted to fold this into DEFAULT_SHARDER_CONF as a kind of \"schema definition\" type thing.  I encountered two problems, but all related to this percent based options\n\n1) dict literals don\u0027t preserve order, so our schema wouldn\u0027t be indexable by key\n2) percent_of_threshold really wants to close over namespace.shard_container_threshold\n\n... so it\u0027s hard to make the schema with all our requirements as a global","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        # so must be listed after shard_container_threshold has been set..."},{"line_number":650,"context_line":"        (\u0027rows_per_shard\u0027, percent_of_threshold, \u0027rows_per_shard_percent\u0027),"},{"line_number":651,"context_line":"        (\u0027shrink_threshold\u0027, percent_of_threshold, \u0027shard_shrink_point\u0027),"},{"line_number":652,"context_line":"        (\u0027expansion_limit\u0027, percent_of_threshold, \u0027shard_shrink_merge_point\u0027),"},{"line_number":653,"context_line":"    ):"},{"line_number":654,"context_line":"        set_val(*args)"},{"line_number":655,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"92d6c9bc_0fbb8389","line":652,"in_reply_to":"2f4e357b_9ba1e4ef","updated":"2021-05-19 14:20:19.000000000","message":"FWIW, I overcame the ordering and percent dependency issues by having an PercentOption class that held a reference to an Option class instance. Both classes provide a method to parse their option from the conf.\n\nSo instead of needing to parse the threshold value first and then pass that *value* to the percent value parser, the percent value PercentOption parser would parse the threshold value on demand using its reference to the threshold Option.","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":1499,"context_line":""},{"line_number":1500,"context_line":"        start \u003d time.time()"},{"line_number":1501,"context_line":"        shard_data, last_found \u003d broker.find_shard_ranges("},{"line_number":1502,"context_line":"            self.rows_per_shard, limit\u003dself.shard_scanner_batch_size,"},{"line_number":1503,"context_line":"            existing_ranges\u003dshard_ranges)"},{"line_number":1504,"context_line":"        elapsed \u003d time.time() - start"},{"line_number":1505,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"2d1a31d0_bfbbcb78","line":1502,"updated":"2021-05-18 00:01:51.000000000","message":"this is the only place we use rows_per_shard in the sharder","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"}],"test/unit/container/test_sharder.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":274,"context_line":"        with self.assertRaises(ValueError) as cm:"},{"line_number":275,"context_line":"            do_test({\u0027shard_shrink_merge_point\u0027: 101}, {})"},{"line_number":276,"context_line":"        self.assertIn("},{"line_number":277,"context_line":"            \u0027greater than 0, less than 100, not \"101\"\u0027, str(cm.exception))"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def test_init_internal_client_conf_loading_error(self):"},{"line_number":280,"context_line":"        with mock.patch(\u0027swift.common.db_replicator.ring.Ring\u0027) \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"07e4d973_5becafe6","line":277,"updated":"2021-05-18 00:01:51.000000000","message":"I did NOT see any new tests for rows_per_shard_percent\n\n\tdiff --git a/test/unit/container/test_sharder.py b/test/unit/container/test_sharder.py\n\tindex 8b48dab51..f9f7fea38 100644\n\t--- a/test/unit/container/test_sharder.py\n\t+++ b/test/unit/container/test_sharder.py\n\t@@ -276,6 +276,9 @@ class TestSharder(BaseTestSharder):\n\t\t self.assertIn(\n\t\t     \u0027greater than 0, less than 100, not \"101\"\u0027, str(cm.exception))\n\t \n\t+        with self._mock_sharder({\u0027rows_per_shard_percent\u0027: 30}) as sharder:\n\t+            self.assertEqual(sharder.rows_per_shard, 300000)\n\t+\n\t     def test_init_internal_client_conf_loading_error(self):\n\t\t with mock.patch(\u0027swift.common.db_replicator.ring.Ring\u0027) \\\n\t\t\t as mock_ring:","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        with self.assertRaises(ValueError) as cm:"},{"line_number":275,"context_line":"            do_test({\u0027shard_shrink_merge_point\u0027: 101}, {})"},{"line_number":276,"context_line":"        self.assertIn("},{"line_number":277,"context_line":"            \u0027greater than 0, less than 100, not \"101\"\u0027, str(cm.exception))"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def test_init_internal_client_conf_loading_error(self):"},{"line_number":280,"context_line":"        with mock.patch(\u0027swift.common.db_replicator.ring.Ring\u0027) \\"}],"source_content_type":"text/x-python","patch_set":9,"id":"5dde4b9f_45b99204","line":277,"in_reply_to":"07e4d973_5becafe6","updated":"2021-05-19 14:20:19.000000000","message":"Done","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"528cb6f2c8ee001b0ccf5b229fee40e40aba8c71","unresolved":true,"context_lines":[{"line_number":5511,"context_line":""},{"line_number":5512,"context_line":"        # all shard ranges too big to shrink"},{"line_number":5513,"context_line":"        shard_ranges \u003d self._make_shard_ranges("},{"line_number":5514,"context_line":"            shard_bounds, state\u003dShardRange.ACTIVE, object_count\u003dsize - 1,"},{"line_number":5515,"context_line":"            tombstones\u003d1)"},{"line_number":5516,"context_line":"        own_sr \u003d broker.get_own_shard_range()"},{"line_number":5517,"context_line":"        own_sr.update_state(ShardRange.SHARDED, Timestamp.now())"}],"source_content_type":"text/x-python","patch_set":9,"id":"d46bdbce_06575ba7","line":5514,"range":{"start_line":5514,"start_character":51,"end_line":5514,"end_character":72},"updated":"2021-05-18 21:37:01.000000000","message":"Huh. I guess this is happy with the float...","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"901cd5f068ee710a9e0be5cf3e651a2bbeec28f2","unresolved":true,"context_lines":[{"line_number":5924,"context_line":"            # and no longer appears in stats"},{"line_number":5925,"context_line":"            def shrink_actionable_ranges(broker):"},{"line_number":5926,"context_line":"                compactible \u003d find_compactible_shard_sequences("},{"line_number":5927,"context_line":"                    broker, sharder.rows_per_shard, sharder.expansion_limit,"},{"line_number":5928,"context_line":"                    1, -1)"},{"line_number":5929,"context_line":"                self.assertNotEqual([], compactible)"},{"line_number":5930,"context_line":"                with mock_timestamp_now(next(self.ts_iter)):"}],"source_content_type":"text/x-python","patch_set":9,"id":"df944ef1_026a4cce","line":5927,"updated":"2021-05-18 00:01:51.000000000","message":"shrink_size -\u003e shrinking_threshold ????\n\nI can\u0027t find a value for this arg that causes this test to fail","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"274f7343fa1d012935d66d88ecd79560ab6284fb","unresolved":true,"context_lines":[{"line_number":5924,"context_line":"            # and no longer appears in stats"},{"line_number":5925,"context_line":"            def shrink_actionable_ranges(broker):"},{"line_number":5926,"context_line":"                compactible \u003d find_compactible_shard_sequences("},{"line_number":5927,"context_line":"                    broker, sharder.rows_per_shard, sharder.expansion_limit,"},{"line_number":5928,"context_line":"                    1, -1)"},{"line_number":5929,"context_line":"                self.assertNotEqual([], compactible)"},{"line_number":5930,"context_line":"                with mock_timestamp_now(next(self.ts_iter)):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ad8d5f11_727941d8","line":5927,"in_reply_to":"c71bf466_5aab1588","updated":"2021-05-19 14:20:19.000000000","message":"will fix\n\nthe test fails with shrink_threshold \u003d 0, but otherwise passes because the small shards all have zero object so will satisfy shrink_threshold \u003e 0","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"528cb6f2c8ee001b0ccf5b229fee40e40aba8c71","unresolved":true,"context_lines":[{"line_number":5924,"context_line":"            # and no longer appears in stats"},{"line_number":5925,"context_line":"            def shrink_actionable_ranges(broker):"},{"line_number":5926,"context_line":"                compactible \u003d find_compactible_shard_sequences("},{"line_number":5927,"context_line":"                    broker, sharder.rows_per_shard, sharder.expansion_limit,"},{"line_number":5928,"context_line":"                    1, -1)"},{"line_number":5929,"context_line":"                self.assertNotEqual([], compactible)"},{"line_number":5930,"context_line":"                with mock_timestamp_now(next(self.ts_iter)):"}],"source_content_type":"text/x-python","patch_set":9,"id":"c71bf466_5aab1588","line":5927,"in_reply_to":"df944ef1_026a4cce","updated":"2021-05-18 21:37:01.000000000","message":"Yeah, this doesn\u0027t look right.","commit_id":"3ff82e0ebc19d4ee1c20c9aadcc43f03e7af40c0"}]}
