)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a94403bcbecb89d5ec15b35c1e544de962ebb738","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"857673d4_901d81f8","updated":"2021-12-06 01:39:56.000000000","message":"I\u0027ve +A\u0027ed the parent, so let\u0027s land this one too, as it fixes the handoffs_remaining.","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"dbb0f67096737bd1e0c88e0c0a6b59cfa9318d6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"53a6c3b8_2ca5589b","updated":"2021-12-06 00:44:51.000000000","message":"Nice! ","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5301254fb0a322bc65093a4ccc2cef17f31a9bc9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7c63d3c4_31ac1122","updated":"2021-12-06 06:35:18.000000000","message":"recheck","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"635d05b836a6c0cf4c29211ad7d064c6becf720e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"83ab6266_cd9fc123","updated":"2021-12-06 11:39:11.000000000","message":"recheck","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"497a23dd2afbf522ee849e189b7974820c31df7a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f0c96ca7_900bf335","updated":"2021-12-06 09:45:59.000000000","message":"recheck","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c531b470dd7ed54270c2b632adb99cac619eaca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"35251f1e_b12f3b57","updated":"2021-12-03 15:07:45.000000000","message":"solid!","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"}],"swift/obj/reconstructor.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c531b470dd7ed54270c2b632adb99cac619eaca","unresolved":true,"context_lines":[{"line_number":1097,"context_line":"                        include_non_durable\u003dTrue,"},{"line_number":1098,"context_line":"                        max_objects\u003dself.max_objects_per_revert)"},{"line_number":1099,"context_line":"                    success, in_sync_objs \u003d sender()"},{"line_number":1100,"context_line":"                    limited_by_max_objects |\u003d sender.limited_by_max_objects"},{"line_number":1101,"context_line":"                    if success:"},{"line_number":1102,"context_line":"                        syncd_with +\u003d 1"},{"line_number":1103,"context_line":"                        reverted_objs.update(in_sync_objs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3176568c_135dc947","line":1100,"updated":"2021-12-03 15:07:45.000000000","message":"bah; it\u0027d be WAY more work to \"fix\" the signature to be `ctx \u003d sender()` and I guess it doesn\u0027t really help if callers don\u0027t know to check `ctx[\u0027successful\u0027]` AND `ctx[\u0027limited_by_max_objects\u0027]`\n\nsuccess could be an enum?  we could pass in a ctx dict (like swiftclient)?  we could ... do this!!! 👍","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"}],"swift/obj/ssync_sender.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c531b470dd7ed54270c2b632adb99cac619eaca","unresolved":true,"context_lines":[{"line_number":286,"context_line":"        Full documentation of this can be found at"},{"line_number":287,"context_line":"        :py:meth:`.Receiver.missing_check`."},{"line_number":288,"context_line":"        \"\"\""},{"line_number":289,"context_line":"        self.limited_by_max_objects \u003d False"},{"line_number":290,"context_line":"        available_map \u003d {}"},{"line_number":291,"context_line":"        send_map \u003d {}"},{"line_number":292,"context_line":"        # First, send our list."}],"source_content_type":"text/x-python","patch_set":2,"id":"efbce818_088981b2","line":289,"updated":"2021-12-03 15:07:45.000000000","message":"I thought this might get reset every __call__ - but i guess we only do missing_check once per call anyway; so it wouldn\u0027t have made a difference?","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c531b470dd7ed54270c2b632adb99cac619eaca","unresolved":true,"context_lines":[{"line_number":309,"context_line":"                self.remote_check_objs, hash_gen)"},{"line_number":310,"context_line":"        nlines \u003d 0"},{"line_number":311,"context_line":"        nbytes \u003d 0"},{"line_number":312,"context_line":"        object_hash \u003d None"},{"line_number":313,"context_line":"        for object_hash, timestamps in hash_gen:"},{"line_number":314,"context_line":"            available_map[object_hash] \u003d timestamps"},{"line_number":315,"context_line":"            with exceptions.MessageTimeout("}],"source_content_type":"text/x-python","patch_set":2,"id":"ca8ef27a_f3f8828c","line":312,"updated":"2021-12-03 15:07:45.000000000","message":"this looks like it was added to make a linter happy\n\ni\u0027m not sure there\u0027s a more obvious way to show object_hash is ALWAYS defined in the second hash_gen loop 😕","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7ae87e62c944c87e555d4353c9e3aadc13117a6a","unresolved":true,"context_lines":[{"line_number":309,"context_line":"                self.remote_check_objs, hash_gen)"},{"line_number":310,"context_line":"        nlines \u003d 0"},{"line_number":311,"context_line":"        nbytes \u003d 0"},{"line_number":312,"context_line":"        object_hash \u003d None"},{"line_number":313,"context_line":"        for object_hash, timestamps in hash_gen:"},{"line_number":314,"context_line":"            available_map[object_hash] \u003d timestamps"},{"line_number":315,"context_line":"            with exceptions.MessageTimeout("}],"source_content_type":"text/x-python","patch_set":2,"id":"de7ed885_5a033d5a","line":312,"in_reply_to":"ca8ef27a_f3f8828c","updated":"2021-12-03 15:25:36.000000000","message":"I\u0027m not sure it is always defined - if hash_gen yields nothing","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c531b470dd7ed54270c2b632adb99cac619eaca","unresolved":true,"context_lines":[{"line_number":326,"context_line":"            if 0 \u003c self.max_objects \u003c\u003d nlines:"},{"line_number":327,"context_line":"                break"},{"line_number":328,"context_line":"        for _ in hash_gen:"},{"line_number":329,"context_line":"            # only log truncation if there were more hashes to come..."},{"line_number":330,"context_line":"            self.limited_by_max_objects \u003d True"},{"line_number":331,"context_line":"            self.daemon.logger.info("},{"line_number":332,"context_line":"                \u0027ssync missing_check truncated after %d objects: \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"2f318b7f_31b6565d","line":329,"updated":"2021-12-03 15:07:45.000000000","message":"when I looked at the parent I missed this comment - i\u0027m not sure I\u0027ve seen a \"guard the log message on items in the iter and break\" pattern before - clever!\n\nit\u0027s probably MORE clear to break it out as a second iteration rather than a nested-re-iteration","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"7ae87e62c944c87e555d4353c9e3aadc13117a6a","unresolved":true,"context_lines":[{"line_number":326,"context_line":"            if 0 \u003c self.max_objects \u003c\u003d nlines:"},{"line_number":327,"context_line":"                break"},{"line_number":328,"context_line":"        for _ in hash_gen:"},{"line_number":329,"context_line":"            # only log truncation if there were more hashes to come..."},{"line_number":330,"context_line":"            self.limited_by_max_objects \u003d True"},{"line_number":331,"context_line":"            self.daemon.logger.info("},{"line_number":332,"context_line":"                \u0027ssync missing_check truncated after %d objects: \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"699f2c77_c4d7b8be","line":329,"in_reply_to":"2f318b7f_31b6565d","updated":"2021-12-03 15:25:36.000000000","message":"I would do the parent patch the same as here if I reworked it. Needing to set self.limited_by_max_objects \u003d True in two places drove me to break out the second iter.","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"}],"test/unit/obj/test_reconstructor.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4841e265cfe63bb8b4bf2813eb03c7aea0f16de0","unresolved":true,"context_lines":[{"line_number":1147,"context_line":"                        break"},{"line_number":1148,"context_line":"                for _ in hash_gen:"},{"line_number":1149,"context_line":"                    self.limited_by_max_objects \u003d True"},{"line_number":1150,"context_line":"                    break"},{"line_number":1151,"context_line":"                context[\u0027available_map\u0027] \u003d self.available_map"},{"line_number":1152,"context_line":"                ssync_calls.append(context)"},{"line_number":1153,"context_line":"                self.success \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"51b631fe_c32a0e69","line":1150,"updated":"2021-12-03 14:41:45.000000000","message":"this \u0027thin Fake\u0027 class is becoming \u0027thicker\u0027 than I\u0027d like :/","commit_id":"0e47f2a695edeb561e682131288214624cb160de"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4841e265cfe63bb8b4bf2813eb03c7aea0f16de0","unresolved":true,"context_lines":[{"line_number":1509,"context_line":"        actual_datafiles \u003d [df for df in datafiles if os.path.exists(df)]"},{"line_number":1510,"context_line":"        self.assertEqual(1, len(actual_datafiles), actual_datafiles)"},{"line_number":1511,"context_line":"        # handoff still reported as remaining"},{"line_number":1512,"context_line":"        self.assertEqual(1, self.reconstructor.handoffs_remaining)"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"        # ...until next reconstructor run which will sync and purge the last"},{"line_number":1515,"context_line":"        # object; max_objects_per_revert \u003d\u003d actual number of objects"}],"source_content_type":"text/x-python","patch_set":1,"id":"bdcf9679_957e1cde","line":1512,"updated":"2021-12-03 14:41:45.000000000","message":"this fails if change is reverted","commit_id":"0e47f2a695edeb561e682131288214624cb160de"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c531b470dd7ed54270c2b632adb99cac619eaca","unresolved":true,"context_lines":[{"line_number":1509,"context_line":"        actual_datafiles \u003d [df for df in datafiles if os.path.exists(df)]"},{"line_number":1510,"context_line":"        self.assertEqual(1, len(actual_datafiles), actual_datafiles)"},{"line_number":1511,"context_line":"        # handoff still reported as remaining"},{"line_number":1512,"context_line":"        self.assertEqual(1, self.reconstructor.handoffs_remaining)"},{"line_number":1513,"context_line":""},{"line_number":1514,"context_line":"        # ...until next reconstructor run which will sync and purge the last"},{"line_number":1515,"context_line":"        # object; max_objects_per_revert \u003d\u003d actual number of objects"}],"source_content_type":"text/x-python","patch_set":2,"id":"60cf4daf_0a9aafff","line":1512,"updated":"2021-12-03 15:07:45.000000000","message":"brilliant!  if i pull the code out of the fake to mark the limited when the hash_gen isn\u0027t exhausted this test fails with 1 !\u003d 0\n\n\tFAIL: test_delete_reverted_max_objects_per_revert (test.unit.obj.test_reconstructor.TestGlobalSetupObjectReconstructor)\n\t----------------------------------------------------------------------\n\tTraceback (most recent call last):\n\t  File \"/home/vagrant/swift/test/unit/obj/test_reconstructor.py\", line 1509, in test_delete_reverted_max_objects_per_revert\n\t    self.assertEqual(1, self.reconstructor.handoffs_remaining)\n\tAssertionError: 1 !\u003d 0\n\t-------------------- \u003e\u003e begin captured stdout \u003c\u003c ---------------------\n\ttest-reconstructor WARNING: Handoff only mode is not intended for normal operation, use handoffs_only with care.\n\ttest-reconstructor WARNING: sda5 is not mounted\n\ttest-reconstructor DEBUG: Run listdir on /mnt/tmp/tmpZgFRjt/node/sda1/objects-1/2\n\ttest-reconstructor INFO: 1/1 (100.00%) partitions reconstructed in 0.00s (216.64/sec, 0s remaining)\n\ttest-reconstructor WARNING: Handoffs only mode found no handoffs remaining. You should disable handoffs_only once all nodes are reporting no handoffs remaining.","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"}],"test/unit/obj/test_ssync_sender.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c531b470dd7ed54270c2b632adb99cac619eaca","unresolved":true,"context_lines":[{"line_number":965,"context_line":"                \u0027:MISSING_CHECK: START\\r\\n\u0027"},{"line_number":966,"context_line":"                \u0027:MISSING_CHECK: END\\r\\n\u0027))"},{"line_number":967,"context_line":"        self.sender.df_mgr.yield_hashes \u003d yield_hashes"},{"line_number":968,"context_line":"        self.assertFalse(self.sender.limited_by_max_objects)"},{"line_number":969,"context_line":"        available_map, send_map \u003d self.sender.missing_check(connection,"},{"line_number":970,"context_line":"                                                            response)"},{"line_number":971,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":2,"id":"360083ba_002cee5e","line":968,"updated":"2021-12-03 15:07:45.000000000","message":"oic, we haven\u0027t DONE anything yet - it\u0027s a sanity","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8c531b470dd7ed54270c2b632adb99cac619eaca","unresolved":true,"context_lines":[{"line_number":987,"context_line":"             \u0027part: 9, policy: 0, last object hash: \u0027"},{"line_number":988,"context_line":"             \u00279d41d8cd98f00b204e9800998ecf0def\u0027],"},{"line_number":989,"context_line":"            self.daemon_logger.get_lines_for_level(\u0027info\u0027))"},{"line_number":990,"context_line":"        self.assertTrue(self.sender.limited_by_max_objects)"},{"line_number":991,"context_line":""},{"line_number":992,"context_line":"    def test_missing_check_max_objects_exactly_actual_objects(self):"},{"line_number":993,"context_line":"        def yield_hashes(device, partition, policy, suffixes\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":2,"id":"519a4026_4cf1a724","line":990,"updated":"2021-12-03 15:07:45.000000000","message":"and now it\u0027s True 👍","commit_id":"1b3879e0da4def66b98ff5735331ab1cef4d365f"}]}
