)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"46da9cbf44578d57caef5d95ff2715085652a331","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0baef7c1_a452d3d5","updated":"2025-05-08 08:07:05.000000000","message":"TODO: only left with adding more tests","commit_id":"87068258826d1a04970007437f5def7d2fa02b57"},{"author":{"_account_id":1004,"name":"Mohammed Naser","email":"mnaser@vexxhost.com","username":"mnaser"},"change_message_id":"4e6b8f57107cf0b1b8c3e40e4bcdf3814e0c4246","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b4e92d8d_98f27abe","updated":"2025-05-09 13:58:13.000000000","message":"@ricolin@ricolky.com is there a way we can approach this in a way that can make this more backportable?","commit_id":"1f949fdadad3119a397aea39f428642885a5cc20"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"d3b8927dadd1ef2253dea0c086e1e86e00f42db9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"b7211060_58de97b2","in_reply_to":"b4e92d8d_98f27abe","updated":"2025-05-12 14:52:51.000000000","message":"I updated to use db call instead of RPC call, which should make it more backportable.","commit_id":"1f949fdadad3119a397aea39f428642885a5cc20"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"c39587cb6061bd2cc69195a07acb05a2411bc9dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"bcdf1cc8_70594308","updated":"2025-05-16 12:35:24.000000000","message":"Looks fine to me, but I\u0027ll leave it to Michael to determine if this is an acceptable approach.","commit_id":"d9c7c3561943fef861c1af2c195e14b335c30afb"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"3cff7c0e51d1a916adfb08044c55f8931997de0f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"23c1314b_a805d2ac","updated":"2025-05-28 15:05:18.000000000","message":"Thanks for working on it. Just FYI: currently the designate grenade jobs are broken, we are working on it. And I also prefer to get Michael\u0027s input about this patch. But except for my comment it looks good to me.","commit_id":"d9c7c3561943fef861c1af2c195e14b335c30afb"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4d49da364aecac293c362f63321dc2fdc47eda14","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"b055062a_6b49b4ac","updated":"2025-07-01 19:34:00.000000000","message":"Just a couple of minor test and log level comments.","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"9a9fbc2c5507000ce0acd6f763a1d360896bb0c9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"9a6a9eee_ea068bc2","updated":"2025-07-01 15:03:37.000000000","message":"Looks good to me, thanks for working on it","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"6a52af8517d5437b3cb3de73c06ab2d9b39421e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"c4b6fc53_af0963c6","updated":"2025-07-03 16:26:32.000000000","message":"LGTM","commit_id":"6c610e23ce3937087a86e2599c9ca18b4bf988c9"},{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"5b3816d187fea3b423f612f7ad3d4b5671dd6b87","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"b47632f9_b5ea5b1b","updated":"2025-07-03 16:33:06.000000000","message":"Looks good to me","commit_id":"6c610e23ce3937087a86e2599c9ca18b4bf988c9"}],"designate/manage/service.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"98f4b1fb1ddd90f85348b71026b23e442f0b7ee0","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                        timeutils.utcnow() - status.heartbeated_at"},{"line_number":38,"context_line":"                    ).total_seconds()"},{"line_number":39,"context_line":"                    if check_interval \u003e 2 * self.heartbeat_interval:"},{"line_number":40,"context_line":"                        LOG.info(\"Found dead service for delete: \""},{"line_number":41,"context_line":"                                 f\"{status.service_name}. \""},{"line_number":42,"context_line":"                                 \"Last service heartbeat time is \""},{"line_number":43,"context_line":"                                 f\"{check_interval} seconds ago.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"d8a4ff08_f265ecc9","line":40,"updated":"2025-05-09 09:06:45.000000000","message":"Keep using %-style for logging for now.","commit_id":"1f949fdadad3119a397aea39f428642885a5cc20"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"d3b8927dadd1ef2253dea0c086e1e86e00f42db9","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                        timeutils.utcnow() - status.heartbeated_at"},{"line_number":38,"context_line":"                    ).total_seconds()"},{"line_number":39,"context_line":"                    if check_interval \u003e 2 * self.heartbeat_interval:"},{"line_number":40,"context_line":"                        LOG.info(\"Found dead service for delete: \""},{"line_number":41,"context_line":"                                 f\"{status.service_name}. \""},{"line_number":42,"context_line":"                                 \"Last service heartbeat time is \""},{"line_number":43,"context_line":"                                 f\"{check_interval} seconds ago.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"dcd3725b_5f7340f7","line":40,"in_reply_to":"8c5dbc70_c8a56c0e","updated":"2025-05-12 14:52:51.000000000","message":"Done","commit_id":"1f949fdadad3119a397aea39f428642885a5cc20"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"21c1a3112bd03b94a29f54ea1e9db35d94383a38","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                        timeutils.utcnow() - status.heartbeated_at"},{"line_number":38,"context_line":"                    ).total_seconds()"},{"line_number":39,"context_line":"                    if check_interval \u003e 2 * self.heartbeat_interval:"},{"line_number":40,"context_line":"                        LOG.info(\"Found dead service for delete: \""},{"line_number":41,"context_line":"                                 f\"{status.service_name}. \""},{"line_number":42,"context_line":"                                 \"Last service heartbeat time is \""},{"line_number":43,"context_line":"                                 f\"{check_interval} seconds ago.\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"8c5dbc70_c8a56c0e","line":40,"in_reply_to":"d8a4ff08_f265ecc9","updated":"2025-05-09 19:27:54.000000000","message":"Yeah, we need to keep using late variable substitution so we don\u0027t waste CPU time on log messages that won\u0027t actually be logged.","commit_id":"1f949fdadad3119a397aea39f428642885a5cc20"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4d49da364aecac293c362f63321dc2fdc47eda14","unresolved":true,"context_lines":[{"line_number":20,"context_line":"        self.heartbeat_interval \u003d None"},{"line_number":21,"context_line":"        self.storage \u003d storage.get_storage()"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _setup(self):"},{"line_number":24,"context_line":"        rpc.init(CONF)"},{"line_number":25,"context_line":"        self.heartbeat_interval \u003d CONF.heartbeat_emitter.heartbeat_interval"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"cb8be41e_e156ba3a","line":23,"updated":"2025-07-01 19:34:00.000000000","message":"nit: This isn\u0027t needed, these two lines could move under clean() as there are no other commands in this class that would share this.","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3a17a3a8a56f69c08d1fd3db3005515adfd166ca","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        self.heartbeat_interval \u003d None"},{"line_number":21,"context_line":"        self.storage \u003d storage.get_storage()"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _setup(self):"},{"line_number":24,"context_line":"        rpc.init(CONF)"},{"line_number":25,"context_line":"        self.heartbeat_interval \u003d CONF.heartbeat_emitter.heartbeat_interval"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"4d680559_5a25aab1","line":23,"in_reply_to":"cb8be41e_e156ba3a","updated":"2025-07-02 05:54:41.000000000","message":"Done","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4d49da364aecac293c362f63321dc2fdc47eda14","unresolved":true,"context_lines":[{"line_number":35,"context_line":"                    check_interval \u003d ("},{"line_number":36,"context_line":"                        timeutils.utcnow() - status.heartbeated_at"},{"line_number":37,"context_line":"                    ).total_seconds()"},{"line_number":38,"context_line":"                    if check_interval \u003e 2 * self.heartbeat_interval:"},{"line_number":39,"context_line":"                        LOG.info(\"Found dead service for delete: \""},{"line_number":40,"context_line":"                                 \"%(service_name)s. \""},{"line_number":41,"context_line":"                                 \"Last service heartbeat time is \""}],"source_content_type":"text/x-python","patch_set":10,"id":"ef52e864_5cc8bb05","line":38,"updated":"2025-07-01 19:34:00.000000000","message":"In the test, this is never false. Maybe we should have another iteration in the test that covers that case as well. I.e. if false, assert delete_service_status is not called.","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3a17a3a8a56f69c08d1fd3db3005515adfd166ca","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                    check_interval \u003d ("},{"line_number":36,"context_line":"                        timeutils.utcnow() - status.heartbeated_at"},{"line_number":37,"context_line":"                    ).total_seconds()"},{"line_number":38,"context_line":"                    if check_interval \u003e 2 * self.heartbeat_interval:"},{"line_number":39,"context_line":"                        LOG.info(\"Found dead service for delete: \""},{"line_number":40,"context_line":"                                 \"%(service_name)s. \""},{"line_number":41,"context_line":"                                 \"Last service heartbeat time is \""}],"source_content_type":"text/x-python","patch_set":10,"id":"6cfd835f_632e7db1","line":38,"in_reply_to":"ef52e864_5cc8bb05","updated":"2025-07-02 05:54:41.000000000","message":"Done","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4d49da364aecac293c362f63321dc2fdc47eda14","unresolved":true,"context_lines":[{"line_number":36,"context_line":"                        timeutils.utcnow() - status.heartbeated_at"},{"line_number":37,"context_line":"                    ).total_seconds()"},{"line_number":38,"context_line":"                    if check_interval \u003e 2 * self.heartbeat_interval:"},{"line_number":39,"context_line":"                        LOG.info(\"Found dead service for delete: \""},{"line_number":40,"context_line":"                                 \"%(service_name)s. \""},{"line_number":41,"context_line":"                                 \"Last service heartbeat time is \""},{"line_number":42,"context_line":"                                 \"%(check_interval)s seconds ago.\","}],"source_content_type":"text/x-python","patch_set":10,"id":"a808292e_c2389418","line":39,"updated":"2025-07-01 19:34:00.000000000","message":"I might even set this to warning as services should not \"die\" ever.","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3a17a3a8a56f69c08d1fd3db3005515adfd166ca","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                        timeutils.utcnow() - status.heartbeated_at"},{"line_number":37,"context_line":"                    ).total_seconds()"},{"line_number":38,"context_line":"                    if check_interval \u003e 2 * self.heartbeat_interval:"},{"line_number":39,"context_line":"                        LOG.info(\"Found dead service for delete: \""},{"line_number":40,"context_line":"                                 \"%(service_name)s. \""},{"line_number":41,"context_line":"                                 \"Last service heartbeat time is \""},{"line_number":42,"context_line":"                                 \"%(check_interval)s seconds ago.\","}],"source_content_type":"text/x-python","patch_set":10,"id":"a9279142_e8b3c8b2","line":39,"in_reply_to":"a808292e_c2389418","updated":"2025-07-02 05:54:41.000000000","message":"Done","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4d49da364aecac293c362f63321dc2fdc47eda14","unresolved":true,"context_lines":[{"line_number":47,"context_line":"                                 )"},{"line_number":48,"context_line":"                        self.storage.delete_service_status("},{"line_number":49,"context_line":"                            self.context, status)"},{"line_number":50,"context_line":"        except messaging.exceptions.MessagingTimeout:"},{"line_number":51,"context_line":"            LOG.critical("},{"line_number":52,"context_line":"                \u0027No response received from designate-central. \u0027"},{"line_number":53,"context_line":"                \u0027Check it is running, and retry\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"2b4e7384_c246173a","line":50,"updated":"2025-07-01 19:34:00.000000000","message":"This exception path is untested.","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"3a17a3a8a56f69c08d1fd3db3005515adfd166ca","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                 )"},{"line_number":48,"context_line":"                        self.storage.delete_service_status("},{"line_number":49,"context_line":"                            self.context, status)"},{"line_number":50,"context_line":"        except messaging.exceptions.MessagingTimeout:"},{"line_number":51,"context_line":"            LOG.critical("},{"line_number":52,"context_line":"                \u0027No response received from designate-central. \u0027"},{"line_number":53,"context_line":"                \u0027Check it is running, and retry\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"4d39e0b8_a8387a4e","line":50,"in_reply_to":"2b4e7384_c246173a","updated":"2025-07-02 05:54:41.000000000","message":"Done","commit_id":"c0a13277699f53ed0b819487b038e83e4036a108"}],"designate/tests/functional/manage/test_service.py":[{"author":{"_account_id":31664,"name":"Omer Schwartz","email":"oschwart@redhat.com","username":"oschwart"},"change_message_id":"3cff7c0e51d1a916adfb08044c55f8931997de0f","unresolved":true,"context_lines":[{"line_number":33,"context_line":"        self.command \u003d service.ServiceCommands()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @mock.patch.object(service, \u0027LOG\u0027)"},{"line_number":36,"context_line":"    def test_service_clean(self, m_log):"},{"line_number":37,"context_line":"        values \u003d self.get_service_status_fixture()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        service_status \u003d objects.ServiceStatus.from_dict(values)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dfadb287_76734e24","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":26},"updated":"2025-05-28 15:05:18.000000000","message":"I wonder if we shouldn\u0027t also list the services and make sure the service is not there (i.e. that this patch works).\nMaybe (in this test) we could also create a service with a recent timestamp and make sure it was not deleted when we list the services.","commit_id":"d9c7c3561943fef861c1af2c195e14b335c30afb"},{"author":{"_account_id":12404,"name":"Rico Lin","email":"ricolin@ricolky.com","username":"rico.lin"},"change_message_id":"4484f019c5922a0aef53dbaebdd0911dfeeabd56","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.command \u003d service.ServiceCommands()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @mock.patch.object(service, \u0027LOG\u0027)"},{"line_number":36,"context_line":"    def test_service_clean(self, m_log):"},{"line_number":37,"context_line":"        values \u003d self.get_service_status_fixture()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        service_status \u003d objects.ServiceStatus.from_dict(values)"}],"source_content_type":"text/x-python","patch_set":9,"id":"128a9c69_680ef15c","line":36,"range":{"start_line":36,"start_character":8,"end_line":36,"end_character":26},"in_reply_to":"dfadb287_76734e24","updated":"2025-06-04 05:47:42.000000000","message":"Done","commit_id":"d9c7c3561943fef861c1af2c195e14b335c30afb"}]}
