)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"bd305dcdf5a8c7ef20ed4707c7e9c3b7ae6c5397","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"754f8336_b9a10d3c","updated":"2025-12-23 21:25:59.000000000","message":"recheck no bug","commit_id":"46839a378b02728f71aa90f36388d2a9c56e38e4"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3a9edfe18d15475bdc1d5e5efdd502ad91656aeb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"218d48b8_53a340c9","updated":"2026-01-21 14:48:59.000000000","message":"Just some annoying grammar and spelling nits.","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"6e0c2bfc294b9a90e4a7085f17380ddaae39c83a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"94857ab3_6aa49c32","updated":"2026-01-12 11:39:12.000000000","message":"recheck no bug","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"42302fd179be5d441aa026a858b52d108fed106e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"cccf2e25_633886d6","updated":"2026-01-15 12:38:42.000000000","message":"recheck no bug","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"93dcb1484b5d0f500eb95a001d239d510adb6733","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3704fe60_b47d3ea5","updated":"2026-01-22 13:25:16.000000000","message":"Looks good to me","commit_id":"add43f54b90b9ebcc0800d6250d7d243ce93622c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"28eb8e431ddb8c58a684dc175d02c76caa825042","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7b192814_0a50bd40","updated":"2026-01-22 16:58:26.000000000","message":"recheck no bug","commit_id":"add43f54b90b9ebcc0800d6250d7d243ce93622c"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"75ef1c487e9361146b1160303df5bd3d619ec0ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"25c1d0b0_b6570e6e","updated":"2026-03-17 09:55:15.000000000","message":"Ok, I\u0027ll factorize this in the parent class, though it will need a few parameters to be set in backup,scheduler,volume/manager.py.","commit_id":"8d733522680d72ad9a35f2a2a5bda2ca9d76169b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"a66da3cff034e2ddc22b01ac21b46a3d604d99d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"86712f6e_42285df7","updated":"2026-03-11 23:32:56.000000000","message":"The code does not look wrong.\n\nHowever, -1 because: is there a reason why ```is_working()``` isn\u0027t being offloaded to the parent ```Manager``` instead of having multiple near-same instances of the same thing in classes all derived from said ```Manager```?\n\nI won\u0027t try to enforce this with negative reviews or anything, but I wanted to bring it up and get a reply.","commit_id":"8d733522680d72ad9a35f2a2a5bda2ca9d76169b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"337e843abef38f5928bad35efaf884a009ec91f8","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"0b9b67e7_607f7373","updated":"2026-03-11 23:34:13.000000000","message":"The code does not look wrong.\n\nHowever, -1 because: is there a reason why is_working() isn\u0027t being offloaded to the parent Manager instead of having multiple near-same instances of the same thing in classes all derived from said Manager?\n\nI won\u0027t try to enforce this with negative reviews or anything, but I wanted to bring it up and get a reply.","commit_id":"8d733522680d72ad9a35f2a2a5bda2ca9d76169b"},{"author":{"_account_id":38081,"name":"Anthony Galica","display_name":"agalica","email":"anthony.galica@hitachivantara.com","username":"agalica","status":"Hitachi Vantara"},"change_message_id":"fbb9ff9b1900ee525dde6cc2f6b5fbece2368524","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"29658334_e10613b2","in_reply_to":"0b9b67e7_607f7373","updated":"2026-03-11 23:37:18.000000000","message":"An intermediary class might make sense too if it doesn\u0027t make sense to get ```Manager``` involved.","commit_id":"8d733522680d72ad9a35f2a2a5bda2ca9d76169b"}],"releasenotes/notes/heartbeats-with-rpc-ping-23725271a1dfbc7e.yaml":[{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3a9edfe18d15475bdc1d5e5efdd502ad91656aeb","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9c72d843_db223ea3","line":5,"range":{"start_line":5,"start_character":27,"end_line":5,"end_character":33},"updated":"2026-01-21 14:48:59.000000000","message":"nit: could","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3a9edfe18d15475bdc1d5e5efdd502ad91656aeb","unresolved":true,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"b03e9da1_c2759842","line":5,"range":{"start_line":5,"start_character":54,"end_line":5,"end_character":60},"updated":"2026-01-21 14:48:59.000000000","message":"nit: falsely","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"93dcb1484b5d0f500eb95a001d239d510adb6733","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"00b2a532_9aa88a41","line":5,"range":{"start_line":5,"start_character":27,"end_line":5,"end_character":33},"in_reply_to":"9c72d843_db223ea3","updated":"2026-01-22 13:25:16.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"fbd0fbac319ce8114987770dad63a39ab321526c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"580f1666_583f90b4","line":5,"range":{"start_line":5,"start_character":27,"end_line":5,"end_character":33},"in_reply_to":"9c72d843_db223ea3","updated":"2026-01-22 14:33:24.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"fbd0fbac319ce8114987770dad63a39ab321526c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"31f96207_d5992ee6","line":5,"range":{"start_line":5,"start_character":54,"end_line":5,"end_character":60},"in_reply_to":"b03e9da1_c2759842","updated":"2026-01-22 14:33:24.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"93dcb1484b5d0f500eb95a001d239d510adb6733","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"d152e09d_8640b28e","line":5,"range":{"start_line":5,"start_character":54,"end_line":5,"end_character":60},"in_reply_to":"b03e9da1_c2759842","updated":"2026-01-22 13:25:16.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3a9edfe18d15475bdc1d5e5efdd502ad91656aeb","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"0bb88254_11757490","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":18},"updated":"2026-01-21 14:48:59.000000000","message":"service threads reads better","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"93dcb1484b5d0f500eb95a001d239d510adb6733","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"8c35cbfe_3a1b5031","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":18},"in_reply_to":"0bb88254_11757490","updated":"2026-01-22 13:25:16.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"fbd0fbac319ce8114987770dad63a39ab321526c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    A specific thread is used to transmit heartbeats. Unfortunately, in some"},{"line_number":5,"context_line":"    situations, the thread cloud have been alive and (falsly) report the"},{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"c445aac9_85286d5c","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":18},"in_reply_to":"0bb88254_11757490","updated":"2026-01-22 14:33:24.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3a9edfe18d15475bdc1d5e5efdd502ad91656aeb","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"d40b79d6_81c5274a","line":9,"range":{"start_line":9,"start_character":50,"end_line":9,"end_character":57},"updated":"2026-01-21 14:48:59.000000000","message":"nit: backup","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"3a9edfe18d15475bdc1d5e5efdd502ad91656aeb","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"d213010a_9a1bbd90","line":9,"range":{"start_line":9,"start_character":20,"end_line":9,"end_character":21},"updated":"2026-01-21 14:48:59.000000000","message":"nit: missing \u0027in\u0027","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"93dcb1484b5d0f500eb95a001d239d510adb6733","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"2b106f51_279df6e4","line":9,"range":{"start_line":9,"start_character":20,"end_line":9,"end_character":21},"in_reply_to":"d213010a_9a1bbd90","updated":"2026-01-22 13:25:16.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"fbd0fbac319ce8114987770dad63a39ab321526c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"f9502350_731db6c3","line":9,"range":{"start_line":9,"start_character":20,"end_line":9,"end_character":21},"in_reply_to":"d213010a_9a1bbd90","updated":"2026-01-22 14:33:24.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"93dcb1484b5d0f500eb95a001d239d510adb6733","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"1aabd72e_28074854","line":9,"range":{"start_line":9,"start_character":50,"end_line":9,"end_character":57},"in_reply_to":"d40b79d6_81c5274a","updated":"2026-01-22 13:25:16.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"},{"author":{"_account_id":6476,"name":"Thomas Goirand","email":"thomas@goirand.fr","username":"thomas-goirand"},"change_message_id":"fbd0fbac319ce8114987770dad63a39ab321526c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Cinder services as up-and-running. Now, the heartbeat thread pings the"},{"line_number":7,"context_line":"    living threads with an RPC call to make sure they are alive, so it can"},{"line_number":8,"context_line":"    correctly report if the main thread is working or not. This logic has"},{"line_number":9,"context_line":"    been implemented the cinder-scheduler, cinder-bakcup and cinder-volume"},{"line_number":10,"context_line":"    services."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"cb2afcbf_ed3f760a","line":9,"range":{"start_line":9,"start_character":50,"end_line":9,"end_character":57},"in_reply_to":"d40b79d6_81c5274a","updated":"2026-01-22 14:33:24.000000000","message":"Done","commit_id":"d208e3c825d75ed363fd9a7e345c22dac5299571"}]}
