)]}'
{"swift/obj/updater.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0572f0a1bbc8f31421c962b4555aad099238e786","unresolved":true,"context_lines":[{"line_number":585,"context_line":"            raise TypeError(\u0027object_updater_per_device must be a dict\u0027)"},{"line_number":586,"context_line":"        devices_to_remove \u003d set(device_stats) - set(devices)"},{"line_number":587,"context_line":"        device_stats \u003d {dev: device_stats.get(dev) or {}"},{"line_number":588,"context_line":"                        for dev in devices}"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        aggregated_oldest_entries \u003d []"},{"line_number":591,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"e514c080_e7b15fdf","line":588,"updated":"2025-01-07 18:35:34.000000000","message":"this is the other \"drive-by\" - we don\u0027t consider devices from device_stats unless that were passed in as devices - which makes the len(device_stats) in the math work like you expect.","commit_id":"e39a0d1959b2167022fdb5dab6fed462d51b2fe8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ef26a5e5f713a4459724143810bea555f05c3857","unresolved":true,"context_lines":[{"line_number":613,"context_line":"                ))"},{"line_number":614,"context_line":"                / float(len(device_stats))"},{"line_number":615,"context_line":"            )"},{"line_number":616,"context_line":"            * max(1, min(self.updater_workers, len(device_stats)))"},{"line_number":617,"context_line":"            if device_stats"},{"line_number":618,"context_line":"            else 0,"},{"line_number":619,"context_line":"            \u0027failures_oldest_timestamp\u0027: min("}],"source_content_type":"text/x-python","patch_set":1,"id":"f80b2561_3ff2905d","line":616,"updated":"2025-01-07 00:30:13.000000000","message":"This is the drive-by?","commit_id":"e39a0d1959b2167022fdb5dab6fed462d51b2fe8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0572f0a1bbc8f31421c962b4555aad099238e786","unresolved":true,"context_lines":[{"line_number":613,"context_line":"                ))"},{"line_number":614,"context_line":"                / float(len(device_stats))"},{"line_number":615,"context_line":"            )"},{"line_number":616,"context_line":"            * max(1, min(self.updater_workers, len(device_stats)))"},{"line_number":617,"context_line":"            if device_stats"},{"line_number":618,"context_line":"            else 0,"},{"line_number":619,"context_line":"            \u0027failures_oldest_timestamp\u0027: min("}],"source_content_type":"text/x-python","patch_set":1,"id":"86fb26c3_e8fb2675","line":616,"in_reply_to":"f80b2561_3ff2905d","updated":"2025-01-07 18:35:34.000000000","message":"that\u0027s one of them.  There was some weird math in the test that made it look like `(512 + 256) / 3 * 2` (actual) \u003d `(512) / 1 * 1` (expected) but if you change the 512 to a different number the math shows what\u0027s wrong.","commit_id":"e39a0d1959b2167022fdb5dab6fed462d51b2fe8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"ef26a5e5f713a4459724143810bea555f05c3857","unresolved":true,"context_lines":[{"line_number":639,"context_line":"            \u0027object_updater_stats\u0027: aggregated_stats,"},{"line_number":640,"context_line":"            \u0027object_updater_last\u0027: now"},{"line_number":641,"context_line":"        }"},{"line_number":642,"context_line":"        if devices_to_remove:"},{"line_number":643,"context_line":"            recon_dump[\u0027object_updater_per_device\u0027] \u003d {"},{"line_number":644,"context_line":"                d: {} for d in devices_to_remove}"},{"line_number":645,"context_line":"        dump_recon_cache("}],"source_content_type":"text/x-python","patch_set":1,"id":"f6ebdedb_45a88099","line":642,"updated":"2025-01-07 00:30:13.000000000","message":"This is the key to the fix, yeah? Previously, if there were no devices to remove, we\u0027d set `[\u0027object_updater_per_device\u0027] \u003d {}` in recon, which would delete *everything*? Recon has such a weird API...","commit_id":"e39a0d1959b2167022fdb5dab6fed462d51b2fe8"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0572f0a1bbc8f31421c962b4555aad099238e786","unresolved":false,"context_lines":[{"line_number":639,"context_line":"            \u0027object_updater_stats\u0027: aggregated_stats,"},{"line_number":640,"context_line":"            \u0027object_updater_last\u0027: now"},{"line_number":641,"context_line":"        }"},{"line_number":642,"context_line":"        if devices_to_remove:"},{"line_number":643,"context_line":"            recon_dump[\u0027object_updater_per_device\u0027] \u003d {"},{"line_number":644,"context_line":"                d: {} for d in devices_to_remove}"},{"line_number":645,"context_line":"        dump_recon_cache("}],"source_content_type":"text/x-python","patch_set":1,"id":"b67c1c0d_2689312c","line":642,"in_reply_to":"f6ebdedb_45a88099","updated":"2025-01-07 18:35:34.000000000","message":"Acknowledged","commit_id":"e39a0d1959b2167022fdb5dab6fed462d51b2fe8"}],"test/unit/obj/test_updater.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0572f0a1bbc8f31421c962b4555aad099238e786","unresolved":true,"context_lines":[{"line_number":1410,"context_line":"        self.assertAlmostEqual("},{"line_number":1411,"context_line":"            755.5,"},{"line_number":1412,"context_line":"            found_data[\u0027object_updater_stats\u0027][\u0027tracker_memory_usage\u0027],"},{"line_number":1413,"context_line":"            delta\u003d200"},{"line_number":1414,"context_line":"        )"},{"line_number":1415,"context_line":""},{"line_number":1416,"context_line":"    def test_obj_put_legacy_updates(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5490839c_cd477330","side":"PARENT","line":1413,"updated":"2025-01-07 18:35:34.000000000","message":"I think this was needed cause we\u0027d previously consider the unpatched sdax os.getsize - which was runtime dependent.  I don\u0027t think the stale/removed sdax stats should contribute to the sum/numerator nor the denominator in the mean.","commit_id":"95b9e6e335878c8bc97088543a630cb9f67e7262"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"0572f0a1bbc8f31421c962b4555aad099238e786","unresolved":true,"context_lines":[{"line_number":1203,"context_line":"            \u0027object_updater_per_device\u0027: {"},{"line_number":1204,"context_line":"                \u0027sda1\u0027: {"},{"line_number":1205,"context_line":"                    \u0027failures_account_container_count\u0027: 2,"},{"line_number":1206,"context_line":"                    \u0027tracker_memory_usage\u0027: 384,"},{"line_number":1207,"context_line":"                },"},{"line_number":1208,"context_line":"                # this is a relatively realistic example of existing recon data"},{"line_number":1209,"context_line":"                # for a pre-existing per-device key for a removed device"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f5f0f21_9277f369","line":1206,"updated":"2025-01-07 18:35:34.000000000","message":"here.  sda1 is the only device who\u0027s memory usage should be considered - and I think the \"most correct\" value for the aggregation is 384.","commit_id":"e39a0d1959b2167022fdb5dab6fed462d51b2fe8"}]}
