)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1003869,"name":"Couchbase Robot","email":"build-team@couchbase.com","username":"cb-robot","avatars":[{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/d465bd97bd9f40f1453c5b112ef4a021.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"3fac82be677e77d7a69b2b807840be01a4d75359","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"73b0995c_2f0725e6","updated":"2026-04-14 08:04:01.000000000","message":"The commit message \u0027Adding case for cm_alerts_triggered_total\u0027 lacks detail. It should provide more context about the changes made, such as the purpose of the new test case and any relevant configurations. A clearer commit message would be \u0027Add test case for cm_alerts_triggered_total_auto_failover_counter to validate auto-failover metrics increment.\u0027","commit_id":"331f5493e0fbe3f79804461ad3eee004b41d51b2"}],"conf/scalable_stats/alert_counter_metrics.yml":[{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"alert_counter_metrics:"},{"line_number":2,"context_line":"  metric_name: cm_alerts_triggered_total"},{"line_number":3,"context_line":"  alert_type: auto_failover_node"},{"line_number":4,"context_line":"  auto_failover_timeout: 30"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"790f8a8e_3f33cf09","line":1,"updated":"2026-04-14 07:29:25.000000000","message":"we don\u0027t need alert counter specific yml this will contain all kind of metrics ,  we can not start creating yml for every metrics , rename the file to represent general metrics info","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"},{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":2,"context_line":"  metric_name: cm_alerts_triggered_total"},{"line_number":3,"context_line":"  alert_type: auto_failover_node"},{"line_number":4,"context_line":"  auto_failover_timeout: 30"},{"line_number":5,"context_line":"  metric_timeout: 180"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"83ba44ce_ce8bad71","line":5,"updated":"2026-04-14 07:29:25.000000000","message":"this should not contain autofailover related config","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"}],"conf/scalable_stats/stats_basic_ops.conf":[{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":23,"context_line":"  test_range_api_metrics,nodes_init\u003d2,use_https\u003dFalse,GROUP\u003dP0"},{"line_number":24,"context_line":"  test_stats_1000_collections,nodes_init\u003d2,bucket_size\u003d256,kv_quota_percent\u003d50,bucket_spec\u003dsingle_bucket.buckets_1000_collections,num_items\u003d0,replicas\u003d0,services_init\u003dkv:index-kv:index,GROUP\u003dP0"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  test_cm_alerts_triggered_total_auto_failover_counter,nodes_init\u003d2,services_init\u003dkv:index-kv:index,bucket_size\u003d256,cm_alerts_config_file\u003dconf/scalable_stats/alert_counter_metrics.yml,GROUP\u003dP0"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  # Warmup stats test"},{"line_number":29,"context_line":"  test_check_warmup_stat,nodes_init\u003d1,bucket_size\u003d256,component\u003dkv,parse\u003dFalse,GROUP\u003dP0"}],"source_content_type":"text/plain","patch_set":5,"id":"ed80512e_8fadd8f2","line":26,"updated":"2026-04-14 07:29:25.000000000","message":"autofailover does not get trigger with 2 nodes we need atleast 3","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"},{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":23,"context_line":"  test_range_api_metrics,nodes_init\u003d2,use_https\u003dFalse,GROUP\u003dP0"},{"line_number":24,"context_line":"  test_stats_1000_collections,nodes_init\u003d2,bucket_size\u003d256,kv_quota_percent\u003d50,bucket_spec\u003dsingle_bucket.buckets_1000_collections,num_items\u003d0,replicas\u003d0,services_init\u003dkv:index-kv:index,GROUP\u003dP0"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"  test_cm_alerts_triggered_total_auto_failover_counter,nodes_init\u003d2,services_init\u003dkv:index-kv:index,bucket_size\u003d256,cm_alerts_config_file\u003dconf/scalable_stats/alert_counter_metrics.yml,GROUP\u003dP0"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  # Warmup stats test"},{"line_number":29,"context_line":"  test_check_warmup_stat,nodes_init\u003d1,bucket_size\u003d256,component\u003dkv,parse\u003dFalse,GROUP\u003dP0"}],"source_content_type":"text/plain","patch_set":5,"id":"2f1f76d3_8d21c799","line":26,"updated":"2026-04-14 07:29:25.000000000","message":"what is the bucket spec being used ?","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"}],"pytests/scalable_stats/stats_basic_ops.py":[{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":505,"context_line":"                self.fail(\"Failed to enable auto-failover: %s\" % content)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":"            # Trigger #1: stop couchbase-server on target and wait for auto-failover."},{"line_number":508,"context_line":"            shell.stop_couchbase()"},{"line_number":509,"context_line":"            self.stats_basic_ops_util.wait_for_failover_or_assert("},{"line_number":510,"context_line":"                self.cluster_util, self.cluster.master, expected_failover_count\u003d1,"},{"line_number":511,"context_line":"                timeout\u003d240, sleep_fn\u003dself.sleep)"}],"source_content_type":"text/x-python","patch_set":5,"id":"f27ec790_ea3a8e74","line":508,"updated":"2026-04-14 07:29:25.000000000","message":"can we use a loop instead instead of trigger 1 and 2","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"}],"pytests/scalable_stats/stats_basic_ops_util.py":[{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":34,"context_line":"    def __init__(self, log):"},{"line_number":35,"context_line":"        self.log \u003d log"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def load_alert_counter_config(self, test_input):"},{"line_number":38,"context_line":"        config_path \u003d test_input.param("},{"line_number":39,"context_line":"            \"cm_alerts_config_file\","},{"line_number":40,"context_line":"            \"conf/scalable_stats/alert_counter_metrics.yml\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"032ca437_75ed6dc1","line":37,"updated":"2026-04-14 07:29:25.000000000","message":"this method should have a generic name it will be used to load general metrics yml file not just alert counter","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"},{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":54,"context_line":"        matched \u003d metric_helper.get_matching_lines(lines)"},{"line_number":55,"context_line":"        value \u003d metric_helper.get_value(lines)"},{"line_number":56,"context_line":"        self.log.info(\"[%s] %s{type\u003d%s} parsed_value\u003d%s\","},{"line_number":57,"context_line":"                      stage, metric_helper.metric_name, metric_helper.alert_type, value)"},{"line_number":58,"context_line":"        if matched:"},{"line_number":59,"context_line":"            self.log.info(\"[%s] matching metric line(s): %s\", stage, matched[:10])"},{"line_number":60,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":5,"id":"8df33b3a_35b0e580","line":57,"updated":"2026-04-14 07:29:25.000000000","message":"this is not specific method for alerts avoid metric_helper.alert_type mentions","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"},{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":63,"context_line":"        return value"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def wait_for_metric_increment(self, server, metric_helper, expected_floor, sleep_fn,"},{"line_number":66,"context_line":"                                  timeout_sec\u003d120, poll_interval_sec\u003d5):"},{"line_number":67,"context_line":"        end \u003d time.time() + timeout_sec"},{"line_number":68,"context_line":"        last_seen \u003d None"},{"line_number":69,"context_line":"        last_lines \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"048cd83e_78a1f574","line":66,"updated":"2026-04-14 07:29:25.000000000","message":"this method is doing 2 tightly coupled things \nfetching metrics and waiting for it to update decouple these bits","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"},{"author":{"_account_id":1004902,"name":"pulkitM1","email":"pulkit.matta@couchbase.com","username":"pulkitM1","avatars":[{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/a586da1e6c8f572b0030b27f5e366636.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5fedc7ffaecdc81118bbb64045a7a1cce33eca2a","unresolved":true,"context_lines":[{"line_number":89,"context_line":"    def get_failover_count(self, cluster_util, master):"},{"line_number":90,"context_line":"        return len(cluster_util.get_nodes(master, active\u003dFalse, inactive_failed\u003dTrue))"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def wait_for_failover_or_assert(self, cluster_util, master, expected_failover_count, timeout, sleep_fn):"},{"line_number":93,"context_line":"        time_start \u003d time.time()"},{"line_number":94,"context_line":"        time_max_end \u003d time_start + timeout"},{"line_number":95,"context_line":"        actual_failover_count \u003d 0"}],"source_content_type":"text/x-python","patch_set":5,"id":"b98af77f_d8bb9e1a","line":92,"updated":"2026-04-14 07:29:25.000000000","message":"autofailover related methods should not be in  stats util check if we can reuse methods from pytests/failover/AutoFailoverBaseTest.py","commit_id":"87c18e7ee6d8303a7be2d24c64c6b73ec3b8f045"}]}
