)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"dcd53c183f5eed461fd148d3dfa5ea401d9f5e21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9b1211b2_1552a294","updated":"2024-10-16 04:29:06.000000000","message":"help me review this patch","commit_id":"83bef38ff9a1f6d5e4c03e4f4334ad45ec76cf30"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"6b1d0e2407cfd4f4c6e97078c676f0754c8ff2fb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"82aab4fa_a13f2e99","updated":"2025-02-12 02:55:06.000000000","message":"@wchy1001@gmail.com can you help me review this patch?","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"68b85b93caa69ec44fb5cdcddba0c21c49f9ffcc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"65b14a6a_74265d88","updated":"2025-02-25 09:26:22.000000000","message":"Can you reference with this patch: https://review.opendev.org/c/openstack/trove/+/925054\n\n\nI think we shouldn\u0027t comment this option because it\u0027s will break this compatible with old version, that can\u0027t upgrade database version.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"f667eebb5903c9bf9c5bc3b9e3833cfe1bd7d9c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"764e1151_3f64cbfa","updated":"2025-05-21 13:20:19.000000000","message":"Hi, Bo,  Have you encountered this problem? https://review.opendev.org/c/openstack/trove/+/936145","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"77e84267d6fc36ec7fd837c9b29af35a7dbb0f65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"26d8c980_ed3c0d1a","updated":"2025-03-03 15:55:03.000000000","message":"we already have a command `openstack database instance promote`, this command will prompt the salve to master role manually. AFAIK, for mysql database, when primary node is down, the slave shall not prompt itself to primary. \n\nfrom the story, \n\u003e this is native with datastore (such as mongodb, postgres, ...) the primary being promote by other secondary by voting\n\nas we don\u0027t support mongodb, so this is only works for postgresql ?","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"f8f5dd564edd18eea9fa13bf07898461a202070c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6c843829_59c895a0","in_reply_to":"26d8c980_ed3c0d1a","updated":"2025-03-27 02:19:02.000000000","message":"no. the command `openstack database instance promote` being useful when have operator. I doing to make this automatically. Such as: mongodb replicaset, Postgres with patroni or mysql/ mariadb with MHA, redis with sentinel/ cluster mode. \n\nother ways, if use can be access directly into database, we can change master/ replica order, so we need re-sync status.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"87c19c84efaa20fff1e75c2c03b2fcc987b729e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a51b533b_84c543ee","in_reply_to":"65b14a6a_74265d88","updated":"2025-02-25 09:28:05.000000000","message":"my wrong.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"2ef21e14b8660eec62b00869cafa857e879b49f5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f7d95577_3e51ada4","in_reply_to":"764e1151_3f64cbfa","updated":"2025-05-23 03:46:29.000000000","message":"I never seen above problem - this problem in above patch depend on business, in my production haven\u0027t any floating ips, we do attach direct public IP into database instance. my patch focusing about support for mongodb/ redis or Postgres with patroni, mysql/ mariadb with mha\n\nThey being supported in my production working as public cloud provider (about 4 years from fist release with database as a service)","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"7e4b878835e0d7b27c15c69979b3a740ae5731df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5c8a5a19_a3bc4460","in_reply_to":"7e5bb1ed_10bf44ad","updated":"2025-07-28 13:22:03.000000000","message":"hello, Bo thanks for your feedback. so i will review this patch as soon as possible in order to accept the comming MongoDB patchsets.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"09111bdcc224796664481f37c247db31884b4d4f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"1af1b03c_fc8ed571","in_reply_to":"82aab4fa_a13f2e99","updated":"2025-02-12 13:03:24.000000000","message":"ok","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"d94e1f68e93917426b2b99e27af9785f31ca935a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"88db8e99_3e550adf","in_reply_to":"a51b533b_84c543ee","updated":"2025-02-27 08:39:07.000000000","message":"never mind！ I will review this patch soon","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"677452003062ada40cb521cb9e124e16a84c67cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"7e5bb1ed_10bf44ad","in_reply_to":"f7d95577_3e51ada4","updated":"2025-05-23 03:54:41.000000000","message":"this patch will be a pre-patch to I can push new features support MongoDB. read more in here: \n- https://storyboard.openstack.org/#!/story/2011078\n- https://storyboard.openstack.org/#!/story/2009935","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"}],"trove/conductor/manager.py":[{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"77e84267d6fc36ec7fd837c9b29af35a7dbb0f65","unresolved":true,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    # Bizfly Cloud workaround"},{"line_number":175,"context_line":"    # current just for MySQL/ MariaDB/ MongoDB/ Redis/ Postgres"},{"line_number":176,"context_line":"    def _update_promote_secondary(self, context, instance_id, is_secondary):"},{"line_number":177,"context_line":"        \"\"\"Update an instance to primary/master"},{"line_number":178,"context_line":"        param: instance_id    ID of instance that current"},{"line_number":179,"context_line":"                              this role primary/master"}],"source_content_type":"text/x-python","patch_set":4,"id":"9e641a18_2466d3b7","line":176,"range":{"start_line":176,"start_character":40,"end_line":176,"end_character":47},"updated":"2025-03-03 15:55:03.000000000","message":"It looks like the context parameter is useless.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"77e84267d6fc36ec7fd837c9b29af35a7dbb0f65","unresolved":true,"context_lines":[{"line_number":175,"context_line":"    # current just for MySQL/ MariaDB/ MongoDB/ Redis/ Postgres"},{"line_number":176,"context_line":"    def _update_promote_secondary(self, context, instance_id, is_secondary):"},{"line_number":177,"context_line":"        \"\"\"Update an instance to primary/master"},{"line_number":178,"context_line":"        param: instance_id    ID of instance that current"},{"line_number":179,"context_line":"                              this role primary/master"},{"line_number":180,"context_line":"        \"\"\""},{"line_number":181,"context_line":"        normal_status \u003d ["},{"line_number":182,"context_line":"            InstanceTasks.NONE,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7271987c_6a557109","line":179,"range":{"start_line":178,"start_character":30,"end_line":179,"end_character":54},"updated":"2025-03-03 15:55:03.000000000","message":"you may need to improve this description","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"77e84267d6fc36ec7fd837c9b29af35a7dbb0f65","unresolved":true,"context_lines":[{"line_number":205,"context_line":"        old_master_slaves \u003d inst_models.DBInstance.find_all("},{"line_number":206,"context_line":"            slave_of_id\u003dold_master.id)"},{"line_number":207,"context_line":"        # Update task status of master and all slaves"},{"line_number":208,"context_line":"        slaves \u003d [slave for slave in old_master_slaves]"},{"line_number":209,"context_line":"        replica_models \u003d [old_master] + slaves"},{"line_number":210,"context_line":"        for dbinfo in replica_models:"},{"line_number":211,"context_line":"            if dbinfo.task_status not in normal_status:"}],"source_content_type":"text/x-python","patch_set":4,"id":"4a4e7cad_55019bdc","line":208,"range":{"start_line":208,"start_character":8,"end_line":208,"end_character":55},"updated":"2025-03-03 15:55:03.000000000","message":"i thinks this code is redundant.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"77e84267d6fc36ec7fd837c9b29af35a7dbb0f65","unresolved":true,"context_lines":[{"line_number":206,"context_line":"            slave_of_id\u003dold_master.id)"},{"line_number":207,"context_line":"        # Update task status of master and all slaves"},{"line_number":208,"context_line":"        slaves \u003d [slave for slave in old_master_slaves]"},{"line_number":209,"context_line":"        replica_models \u003d [old_master] + slaves"},{"line_number":210,"context_line":"        for dbinfo in replica_models:"},{"line_number":211,"context_line":"            if dbinfo.task_status not in normal_status:"},{"line_number":212,"context_line":"                LOG.warning(\"Instance task status %s not in normal_status\","}],"source_content_type":"text/x-python","patch_set":4,"id":"fbab8876_b2106218","line":209,"range":{"start_line":209,"start_character":0,"end_line":209,"end_character":46},"updated":"2025-03-03 15:55:03.000000000","message":"slaves.append(old_master) ?","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"77e84267d6fc36ec7fd837c9b29af35a7dbb0f65","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"e280eed7_36b780c3","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"updated":"2025-03-03 15:55:03.000000000","message":"this logic may be problematic, whatever the `replica.update(slave_of_id\u003dmaster_candidate.id)` result, the codes finally set the `old_master.slave_of_id` and the `master_candidate.slave_of_id`. so if there is something wrong with the database at that time, these replicas\u0027 slave_of_id will be in a inconsistent status permanently, and will never be recovered at the next heartbeats.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"93fbf426e5474abe9b07aadc900ec9ab64ca2d70","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b7c9f9da_e4804256","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"2aecd137_c8f48237","updated":"2025-04-22 14:13:42.000000000","message":"Hi, i think this is a quite rare case. Do you think we should put effort to fix this? i prefer not.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"7e4b878835e0d7b27c15c69979b3a740ae5731df","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"68d797d3_e0836386","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"396f7fac_17470832","updated":"2025-07-28 13:22:03.000000000","message":"hello, I think the only way is to get health status from hearbeat. if we adopt this approach, we just need to implement is_secondary function in driver. Is there any better solution for this ?","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"13eef113691e3028bc333d78fa39e3f32c346fc4","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"396f7fac_17470832","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"44dbfaae_e88a7a6f","updated":"2025-07-28 03:55:20.000000000","message":"so, finnally, which option will we choose?","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"29334abb5e6eb6c38f6e52e32768eee8733325fc","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"2aecd137_c8f48237","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"55261bb2_5f10ed57","updated":"2025-04-15 02:24:11.000000000","message":"Do you any comments? This logic based on logic promote slave for mysql.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"b463c189d4bf01d74a2d2fa708c37f628b26f345","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7802e0ae_ec20b3be","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"68d797d3_e0836386","updated":"2026-01-26 09:11:24.000000000","message":"I haven\u0027t any better solution.\nIf you do have it, please share it so we can discuss it in the story of this patch.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"dfd916a152c7b4c4d44557b18eda6b13bd412caf","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ac0af312_fb44dc19","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"9adedbe9_0e389e33","updated":"2025-05-16 03:19:14.000000000","message":"anything update your opinion?","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"0ef2281acfa09a1653c5c7d281765cbd88ea3af2","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"44dbfaae_e88a7a6f","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"ac0af312_fb44dc19","updated":"2025-05-21 13:17:09.000000000","message":"if we decide to fix this issue. I think this is the only feasible method（get status from heartbeat）.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"d23d017d86650096af8016ce8584acda6be32291","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9adedbe9_0e389e33","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"b7c9f9da_e4804256","updated":"2025-04-23 08:34:15.000000000","message":"yeah, Do you have any ideas? I really being stuck in here.\n\nthe goal is to make it\u0027s can auto update role (aka auto sync) - such as: if trove support mongodb and replicaset - the promote between primary and secondary being automatic (native), so we need sync to make trove\u0027s functions can be work right","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"fed00183391bdf6dd5918e81910ff479c15e261f","unresolved":true,"context_lines":[{"line_number":216,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.PROMOTING)"},{"line_number":217,"context_line":"            dbinfo.save()"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        for replica in replica_models:"},{"line_number":220,"context_line":"            try:"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                if replica.id !\u003d master_candidate.id:"},{"line_number":223,"context_line":"                    # replica.attach_replica"},{"line_number":224,"context_line":"                    replica.update(slave_of_id\u003dmaster_candidate.id)"},{"line_number":225,"context_line":"            except Exception:"},{"line_number":226,"context_line":"                log_fmt \u003d (\"Unable to migrate replica %(slave)s from \""},{"line_number":227,"context_line":"                           \"old replica source %(old_master)s to \""},{"line_number":228,"context_line":"                           \"new source %(new_master)s on promote.\")"},{"line_number":229,"context_line":"                msg_content \u003d {"},{"line_number":230,"context_line":"                    \"slave\": replica.id,"},{"line_number":231,"context_line":"                    \"old_master\": old_master.id,"},{"line_number":232,"context_line":"                    \"new_master\": master_candidate.id}"},{"line_number":233,"context_line":"                LOG.error(log_fmt, msg_content)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        for dbinfo in replica_models:"},{"line_number":236,"context_line":"            setattr(dbinfo, \u0027task_status\u0027, InstanceTasks.NONE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"55261bb2_5f10ed57","line":233,"range":{"start_line":219,"start_character":0,"end_line":233,"end_character":47},"in_reply_to":"e280eed7_36b780c3","updated":"2025-03-27 02:24:48.000000000","message":"don\u0027t worry. this case is rarely and I had doing and run in production for mysql/ redis/ mongoldb/ Postgres high availability with 3 years.\n\nbtw. do you have any idea about this?","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"1f6f3c8b34c6151ddd274d9b63e63c7ce1a32924","unresolved":true,"context_lines":[{"line_number":104,"context_line":"            )"},{"line_number":105,"context_line":"        status.save()"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if payload.get(\u0027is_secondary\u0027) is not None:"},{"line_number":108,"context_line":"            self._update_promote_secondary("},{"line_number":109,"context_line":"                context, instance_id, is_secondary\u003dpayload.get(\u0027is_secondary\u0027))"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"6af0bf42_57bd01aa","line":107,"updated":"2026-01-27 11:51:11.000000000","message":"Hello, Bo!\nI did review on this patch, LGTM.\nIn the story I thought that it would be a kind of auto-failover feature, but right now I see that it\u0027s merely a role synchronization, and it would be very handy for DBA\u0027s.\n\nHowever, maybe we can use a single word \"replica\" in all names instead of \"secondary|slave\"? And \"primary\" instead of \"master\"?\nIt would be clearer, because elsewhere in the code we use primary/replica words.\n\nAlso, I think you can add an implementation of ``is_secondary`` for  MySQL, MariaDB and PostgreSQL services in this patch. Or I can help with that. We have it in one of our pending features (UNSYNC status for replicas). Method name is ``is_replica``, and it returns a boolean value. I\u0027m sure it can be the same method for both our patchsets.","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"28aedbc969de3022fb77eff86aa2f4618f76918f","unresolved":true,"context_lines":[{"line_number":104,"context_line":"            )"},{"line_number":105,"context_line":"        status.save()"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        if payload.get(\u0027is_secondary\u0027) is not None:"},{"line_number":108,"context_line":"            self._update_promote_secondary("},{"line_number":109,"context_line":"                context, instance_id, is_secondary\u003dpayload.get(\u0027is_secondary\u0027))"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"2323fbeb_6dd1e504","line":107,"in_reply_to":"6af0bf42_57bd01aa","updated":"2026-02-04 02:26:18.000000000","message":"Hello， Eric， it would be great you can help with this patch. I also agree with \u0027is_replica\u0027 as it’s more neutral, if you already have such patch, please let me know and push to the Gerrit.","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"1f6f3c8b34c6151ddd274d9b63e63c7ce1a32924","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        if master_candidate.task_status !\u003d InstanceTasks.NONE:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        LOG.info(\u0027Promoting %s as primary.\u0027, instance_id)"},{"line_number":202,"context_line":"        old_master \u003d inst_models.DBInstance.find_by("},{"line_number":203,"context_line":"            id\u003dmaster_candidate.slave_of_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9eee59f9_eb830d17","line":201,"updated":"2026-01-27 11:51:11.000000000","message":"Here is what I took from the code: it isn\u0027t promoting, but merely synchronizing the status in Trove\u0027s db table. The instance was already promoted by a MongoDB or Redis cluster, right?\nProbably we need another message to not confuse anyone.","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"a5186625dfaa4a7c94f950307ca5aa39e3ca2161","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        if master_candidate.task_status !\u003d InstanceTasks.NONE:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        LOG.info(\u0027Promoting %s as primary.\u0027, instance_id)"},{"line_number":202,"context_line":"        old_master \u003d inst_models.DBInstance.find_by("},{"line_number":203,"context_line":"            id\u003dmaster_candidate.slave_of_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"e49e558c_a9058f91","line":201,"in_reply_to":"36cb4f1a_6852934b","updated":"2026-02-02 08:22:45.000000000","message":"In my production, I had run MongoDB ReplicaSet, Redis Sentinel, Postgres with Patroni, MariaDB/ MySQL with MHA (MySQL High Available) for 3 years. It\u0027s worked.","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"00da997de1c278207f38291e4bc873a8c86388d5","unresolved":true,"context_lines":[{"line_number":198,"context_line":"        if master_candidate.task_status !\u003d InstanceTasks.NONE:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        LOG.info(\u0027Promoting %s as primary.\u0027, instance_id)"},{"line_number":202,"context_line":"        old_master \u003d inst_models.DBInstance.find_by("},{"line_number":203,"context_line":"            id\u003dmaster_candidate.slave_of_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ef16eaea_1e2146d2","line":201,"in_reply_to":"9eee59f9_eb830d17","updated":"2026-01-30 03:08:53.000000000","message":"Hi Eric, yes, this is only about role synchronization. It allows the database status to reflect the actual state at the DB layer. Do you think this is necessary for the current datastore instances? Do we need to put effort into merging this commit?","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"a71aca0f4564fa641142031c53021dc1ca1ac9a2","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        if master_candidate.task_status !\u003d InstanceTasks.NONE:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        LOG.info(\u0027Promoting %s as primary.\u0027, instance_id)"},{"line_number":202,"context_line":"        old_master \u003d inst_models.DBInstance.find_by("},{"line_number":203,"context_line":"            id\u003dmaster_candidate.slave_of_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"36cb4f1a_6852934b","line":201,"in_reply_to":"d8543819_6bbd2c39","updated":"2026-02-02 08:20:19.000000000","message":"yeah. I is still working this commit.\nif you want, I can push preview patch for support MongoDB first, after be Redis, Postgres and MySQL/ MariaDB. but, I\u0027m not sure about unit test whether who can support me?","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"f71de68fce27eceb6e04f661fa62d12b5baa6494","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        if master_candidate.task_status !\u003d InstanceTasks.NONE:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        LOG.info(\u0027Promoting %s as primary.\u0027, instance_id)"},{"line_number":202,"context_line":"        old_master \u003d inst_models.DBInstance.find_by("},{"line_number":203,"context_line":"            id\u003dmaster_candidate.slave_of_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"d8543819_6bbd2c39","line":201,"in_reply_to":"dc7e0fb5_a2dfea9d","updated":"2026-01-30 03:21:36.000000000","message":"Ok, Let\u0027s review this again. But I am not sure whether Bo is still working on this.","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"},{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"ac2a6410072da446dd594243a15e12cec6ab8c37","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        if master_candidate.task_status !\u003d InstanceTasks.NONE:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        LOG.info(\u0027Promoting %s as primary.\u0027, instance_id)"},{"line_number":202,"context_line":"        old_master \u003d inst_models.DBInstance.find_by("},{"line_number":203,"context_line":"            id\u003dmaster_candidate.slave_of_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"a4906a9f_ecf4ed7b","line":201,"in_reply_to":"e49e558c_a9058f91","updated":"2026-02-04 01:55:14.000000000","message":"Sounds great! I really appreciate that you can push for support of MongoDB, Redis, etc. If you need help, I can help.","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"},{"author":{"_account_id":36080,"name":"Erkin Mussurmankulov","display_name":"Eric","email":"mangust404@gmail.com","username":"mongoose404","status":"PS Cloud services employee"},"change_message_id":"079bf90fac74998d4b1ae35c8ac349312be5cc5c","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        if master_candidate.task_status !\u003d InstanceTasks.NONE:"},{"line_number":199,"context_line":"            return"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        LOG.info(\u0027Promoting %s as primary.\u0027, instance_id)"},{"line_number":202,"context_line":"        old_master \u003d inst_models.DBInstance.find_by("},{"line_number":203,"context_line":"            id\u003dmaster_candidate.slave_of_id)"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"dc7e0fb5_a2dfea9d","line":201,"in_reply_to":"ef16eaea_1e2146d2","updated":"2026-01-30 03:14:49.000000000","message":"Hello, Wu!\nConsidering the fact that it\u0027s a preliminary commit for the future MongoDB manager, the answer is definitely yes.","commit_id":"8af23e4a201b8b4b45a5e0312420a5c34b23edba"}],"trove/guestagent/datastore/manager.py":[{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"77e84267d6fc36ec7fd837c9b29af35a7dbb0f65","unresolved":true,"context_lines":[{"line_number":192,"context_line":"        LOG.debug(\"Starting to check database service status\")"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"        status \u003d self.get_service_status()"},{"line_number":195,"context_line":"        self.status.set_status(app\u003dself.app, status\u003dstatus)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"    def get_service_status(self):"},{"line_number":198,"context_line":"        return self.status.get_actual_db_status()"}],"source_content_type":"text/x-python","patch_set":4,"id":"2adce66e_8c479318","line":195,"range":{"start_line":195,"start_character":31,"end_line":195,"end_character":44},"updated":"2025-03-03 15:55:03.000000000","message":"i suggest do not break the parameter order. though this works . when we add a new parameter in a function, we usually put it at the last.\n`self.status.set_status(status\u003dstatus, app\u003dself.app,)` is recommend.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"}],"trove/guestagent/datastore/service.py":[{"author":{"_account_id":26285,"name":"wu.chunyang","email":"wchy1001@gmail.com","username":"wu.chunyang"},"change_message_id":"77e84267d6fc36ec7fd837c9b29af35a7dbb0f65","unresolved":true,"context_lines":[{"line_number":590,"context_line":"        LOG.info(\u0027No reset_data_for_restore_snapshot work has been defined.\u0027)"},{"line_number":591,"context_line":"        pass"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    @property"},{"line_number":594,"context_line":"    def is_secondary(self):"},{"line_number":595,"context_line":"        \"\"\"Do actions to get node\u0027s role and return True if this node"},{"line_number":596,"context_line":"           is secondary/ slave. Otherwise return True"},{"line_number":597,"context_line":"        \"\"\""},{"line_number":598,"context_line":"        LOG.debug(\"Doing verify node\u0027s role\")"},{"line_number":599,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ece82dc_98c28fb2","line":599,"range":{"start_line":593,"start_character":0,"end_line":599,"end_character":12},"updated":"2025-03-03 15:55:03.000000000","message":"Don\u0027t we need to implement this function in the sub-class ? i didn\u0027t seen any implementation yet.","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"},{"author":{"_account_id":28691,"name":"Bo Tran","email":"ministry.96.nd@gmail.com","username":"ministry"},"change_message_id":"d743bcb832e05bd431c3bb8ed47ab0a27be36a62","unresolved":true,"context_lines":[{"line_number":590,"context_line":"        LOG.info(\u0027No reset_data_for_restore_snapshot work has been defined.\u0027)"},{"line_number":591,"context_line":"        pass"},{"line_number":592,"context_line":""},{"line_number":593,"context_line":"    @property"},{"line_number":594,"context_line":"    def is_secondary(self):"},{"line_number":595,"context_line":"        \"\"\"Do actions to get node\u0027s role and return True if this node"},{"line_number":596,"context_line":"           is secondary/ slave. Otherwise return True"},{"line_number":597,"context_line":"        \"\"\""},{"line_number":598,"context_line":"        LOG.debug(\"Doing verify node\u0027s role\")"},{"line_number":599,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"fd9413b9_ea587931","line":599,"range":{"start_line":593,"start_character":0,"end_line":599,"end_character":12},"in_reply_to":"1ece82dc_98c28fb2","updated":"2026-05-27 01:43:22.000000000","message":"this is function that being inherited from parent class, we don\u0027t need implement for MySQL or Postgres currently","commit_id":"e410500b9bd9f182bff4a7f485d0b07397ca8593"}]}
