)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":37173,"name":"Alex Fernandes Figueirêdo","display_name":"Alex Figueiredo","email":"alex.fernandesfigueiredo@windriver.com","username":"afernand"},"change_message_id":"ec1fac5fdcc8c0928b9eb6776878b9218d88b7e8","unresolved":true,"context_lines":[{"line_number":12,"context_line":"The method queries the Prometheus CR via CustomObjectsApi using"},{"line_number":13,"context_line":"constants for group, version, plural, and CR name.  It retries up"},{"line_number":14,"context_line":"to PROMETHEUS_READY_RETRIES (60) times with a 3-second sleep between"},{"line_number":15,"context_line":"attempts, matching the cert-manager issue_test_cert pattern.  The"},{"line_number":16,"context_line":"final attempt does not sleep before raising.  Only"},{"line_number":17,"context_line":"kubernetes.client.rest.ApiException is caught inside the loop so"},{"line_number":18,"context_line":"that programming errors (e.g. AttributeError) surface immediately"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"2ea0d74d_6bbc57f3","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":59},"updated":"2026-05-13 13:45:11.000000000","message":"Please check my comment in the code. Instead of relying entirely in the current observed pattern, I recommend making those TIME/RETRY parameters configurable through user overrides. The current observed pattern can be used to define the default config.\n\nCc: @DanielMarques.Caires@windriver.com","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"85ca44c548e7d2ead3ea694114de77a8e594c483","unresolved":true,"context_lines":[{"line_number":12,"context_line":"The method queries the Prometheus CR via CustomObjectsApi using"},{"line_number":13,"context_line":"constants for group, version, plural, and CR name.  It retries up"},{"line_number":14,"context_line":"to PROMETHEUS_READY_RETRIES (60) times with a 3-second sleep between"},{"line_number":15,"context_line":"attempts, matching the cert-manager issue_test_cert pattern.  The"},{"line_number":16,"context_line":"final attempt does not sleep before raising.  Only"},{"line_number":17,"context_line":"kubernetes.client.rest.ApiException is caught inside the loop so"},{"line_number":18,"context_line":"that programming errors (e.g. AttributeError) surface immediately"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"6cd7aa87_55e278e2","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":59},"in_reply_to":"01394048_2b7b19a6","updated":"2026-05-14 11:53:07.000000000","message":"I can see value of doing this in deployments that also scale in system with large number of compute nodes. For Prometheus however, that is not the case. I don\u0027t think it adds value here","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"0a4f3a7572d0ee0821d9d0033a941deb933d87d4","unresolved":true,"context_lines":[{"line_number":12,"context_line":"The method queries the Prometheus CR via CustomObjectsApi using"},{"line_number":13,"context_line":"constants for group, version, plural, and CR name.  It retries up"},{"line_number":14,"context_line":"to PROMETHEUS_READY_RETRIES (60) times with a 3-second sleep between"},{"line_number":15,"context_line":"attempts, matching the cert-manager issue_test_cert pattern.  The"},{"line_number":16,"context_line":"final attempt does not sleep before raising.  Only"},{"line_number":17,"context_line":"kubernetes.client.rest.ApiException is caught inside the loop so"},{"line_number":18,"context_line":"that programming errors (e.g. AttributeError) surface immediately"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"01394048_2b7b19a6","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":59},"in_reply_to":"2ea0d74d_6bbc57f3","updated":"2026-05-13 16:43:04.000000000","message":"@alex.fernandesfigueiredo@windriver.com — before I implement this, could you help me understand the reasons for this ask? I\u0027d like to weigh it against keeping the values as module constants. My concern is that adding tunables here may be overkill for the problem we\u0027re solving. A few data points:\n\nObserved timing on AIO-SX: readiness reached Available\u003dTrue after 6 polls (~15s). The current defaults (60 retries × 3s \u003d ~180s window) give us a 12× headroom over what I actually observed.\n\nChannel concerns if we go with user_overrides: I looked into making retries / intervalSeconds accessible via system helm-override-update. The mechanical path works — sysinv merges user_overrides into the secret that ships to helm — but:\n\nhelm-override-update is the CLI for tuning chart values (PVC sizes, replicas, rules). Using it for a platform-lifecycle poll cadence conflates two concerns.\nAny key we add would leak into the values passed to helm upgrade. For the current chart (kube-prometheus-stack 82.15.0), I verified there\u0027s no values.schema.json, so helm accepts extra keys silently today — but a future chart version shipping a strict schema could reject the apply.\nNo other StarlingX app I\u0027ve found exposes platform-side tunables this way, so operators wouldn\u0027t discover the knob through the chart\u0027s values docs.","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"9a38f52dd3a7b3aee9b5dd5af5b752622fffc6b0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"The method queries the Prometheus CR via CustomObjectsApi using"},{"line_number":13,"context_line":"constants for group, version, plural, and CR name.  It retries up"},{"line_number":14,"context_line":"to PROMETHEUS_READY_RETRIES (60) times with a 3-second sleep between"},{"line_number":15,"context_line":"attempts, matching the cert-manager issue_test_cert pattern.  The"},{"line_number":16,"context_line":"final attempt does not sleep before raising.  Only"},{"line_number":17,"context_line":"kubernetes.client.rest.ApiException is caught inside the loop so"},{"line_number":18,"context_line":"that programming errors (e.g. AttributeError) surface immediately"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"d695dacb_2fb6837d","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":59},"in_reply_to":"6cd7aa87_55e278e2","updated":"2026-05-14 14:39:07.000000000","message":"Moved TIME/RETRY to constants!","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":37173,"name":"Alex Fernandes Figueirêdo","display_name":"Alex Figueiredo","email":"alex.fernandesfigueiredo@windriver.com","username":"afernand"},"change_message_id":"7afc7a686e4b866f1f78e50e2cba98a1b426d1d7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"The method queries the Prometheus CR via CustomObjectsApi using"},{"line_number":13,"context_line":"constants for group, version, plural, and CR name.  It retries up"},{"line_number":14,"context_line":"to PROMETHEUS_READY_RETRIES (60) times with a 3-second sleep between"},{"line_number":15,"context_line":"attempts, matching the cert-manager issue_test_cert pattern.  The"},{"line_number":16,"context_line":"final attempt does not sleep before raising.  Only"},{"line_number":17,"context_line":"kubernetes.client.rest.ApiException is caught inside the loop so"},{"line_number":18,"context_line":"that programming errors (e.g. AttributeError) surface immediately"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9bd9446b_1d8b41ae","line":15,"range":{"start_line":15,"start_character":10,"end_line":15,"end_character":59},"in_reply_to":"d695dacb_2fb6837d","updated":"2026-05-15 13:10:34.000000000","message":"Exposing parameters through helm configs is a powerful strategy to prepare the application to unforeseen issues, operators fine tuning, etc. It\u0027s not possible to anticipate all the possible problems and requirements. However, I\u0027ll respect your decision.","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":37173,"name":"Alex Fernandes Figueirêdo","display_name":"Alex Figueiredo","email":"alex.fernandesfigueiredo@windriver.com","username":"afernand"},"change_message_id":"70413fde995bfe78de62488e55be703207871279","unresolved":true,"context_lines":[{"line_number":42,"context_line":"- test_no_conditions_key_retries"},{"line_number":43,"context_line":"- test_no_status_key_retries"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"TEST PLAN:"},{"line_number":46,"context_line":"PASS - system application-apply \u0026 system application-remove (verified logs)"},{"line_number":47,"context_line":"PASS - Build all prometheus packages"},{"line_number":48,"context_line":"PASS - Build application tarball"},{"line_number":49,"context_line":"PASS - 73/73 unit tests (python3 -m unittest discover)"},{"line_number":50,"context_line":"PASS - Syntax"},{"line_number":51,"context_line":"PASS - Imports"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Story: 2011726"},{"line_number":54,"context_line":"Task: 54322"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"4a330281_a7eb605f","line":51,"range":{"start_line":45,"start_character":0,"end_line":51,"end_character":14},"updated":"2026-05-13 13:49:31.000000000","message":"Please inform the system type in which you have tested your change (AIO-SX, AIO-DX, etc.). Furthermore, please consider the following improvements:\n\n- haven\u0027t you uploaded/applied the prometheus app as part of your change validation? In my understanding, these app lifecycle operation must be included in your test plan.\n- I couldn\u0027t understand what do you mean by \"SYNTAX\" and \"Imports\" test cases. IMHO, this is implicitely covered by higher level test cases (e.g., application upload/apply) and can be removed from your test plan.","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"9a38f52dd3a7b3aee9b5dd5af5b752622fffc6b0","unresolved":false,"context_lines":[{"line_number":42,"context_line":"- test_no_conditions_key_retries"},{"line_number":43,"context_line":"- test_no_status_key_retries"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"TEST PLAN:"},{"line_number":46,"context_line":"PASS - system application-apply \u0026 system application-remove (verified logs)"},{"line_number":47,"context_line":"PASS - Build all prometheus packages"},{"line_number":48,"context_line":"PASS - Build application tarball"},{"line_number":49,"context_line":"PASS - 73/73 unit tests (python3 -m unittest discover)"},{"line_number":50,"context_line":"PASS - Syntax"},{"line_number":51,"context_line":"PASS - Imports"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"Story: 2011726"},{"line_number":54,"context_line":"Task: 54322"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"aea51ca9_fd0af2cd","line":51,"range":{"start_line":45,"start_character":0,"end_line":51,"end_character":14},"in_reply_to":"4a330281_a7eb605f","updated":"2026-05-14 14:39:07.000000000","message":"Done","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":37278,"name":"Mateus Nascimento","display_name":"Mateus Nascimento","email":"Mateus.SoaresdoNascimento@windriver.com","username":"msoaresd"},"change_message_id":"9bdb9865f4240bd9a3e1f0f5261f0aa9a5ed7e0a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7a8bc42f_e0ced468","updated":"2026-05-04 15:13:07.000000000","message":"LGTM overall. Just left a couple of minor suggestions that would be nice to address before merging.","commit_id":"555a4601a59fb2b6e6a579eef4adbaa499d1d2a3"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"17d416ff0819fe364832acb1ea76b5622f63a1cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"02c4180c_6a19e192","updated":"2026-05-12 16:54:30.000000000","message":"After the answer on my question will pump to a +2","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"e2c75d7eaaa65bde7570bede7c5750c6d479c60a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"50f76951_65236827","updated":"2026-05-15 13:29:20.000000000","message":"Awesome work Sridhar!","commit_id":"0b67fa0a39c174746674ffdc06e1b6405dd7e22d"}],"python3-k8sapp-prometheus/k8sapp_prometheus/k8sapp_prometheus/lifecycle/lifecycle_prometheus.py":[{"author":{"_account_id":37278,"name":"Mateus Nascimento","display_name":"Mateus Nascimento","email":"Mateus.SoaresdoNascimento@windriver.com","username":"msoaresd"},"change_message_id":"9bdb9865f4240bd9a3e1f0f5261f0aa9a5ed7e0a","unresolved":true,"context_lines":[{"line_number":231,"context_line":"                        LOG.info(\"Prometheus is ready (attempt %d).\", i)"},{"line_number":232,"context_line":"                        return"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            except Exception as e:"},{"line_number":235,"context_line":"                LOG.warning(\"Prometheus readiness check attempt %d \""},{"line_number":236,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            time.sleep(3)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"619feddf_48bb7a5b","line":236,"range":{"start_line":234,"start_character":0,"end_line":236,"end_character":47},"updated":"2026-05-04 15:13:07.000000000","message":"Probably it is better to use a more specific exception here instead of bare `except Exception` (e.g., `kubernetes.client.rest.ApiException` for the K8s API call), so that programming errors like typos or `AttributeError` aren\u0027t swallowed and silently retried for the full ~180s before being re-surfaced as a generic \"not ready\" timeout that hides the real cause.","commit_id":"555a4601a59fb2b6e6a579eef4adbaa499d1d2a3"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"290fcc521b1e86eb441d220d5ed3a27afbe1d78b","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                        LOG.info(\"Prometheus is ready (attempt %d).\", i)"},{"line_number":232,"context_line":"                        return"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            except Exception as e:"},{"line_number":235,"context_line":"                LOG.warning(\"Prometheus readiness check attempt %d \""},{"line_number":236,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            time.sleep(3)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a95396fa_270aa04c","line":236,"range":{"start_line":234,"start_character":0,"end_line":236,"end_character":47},"in_reply_to":"1c5b6dc9_c938101c","updated":"2026-05-04 22:00:49.000000000","message":"Done","commit_id":"555a4601a59fb2b6e6a579eef4adbaa499d1d2a3"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"1191cae2a2840513ebf38de7456beef5f72df5bc","unresolved":true,"context_lines":[{"line_number":231,"context_line":"                        LOG.info(\"Prometheus is ready (attempt %d).\", i)"},{"line_number":232,"context_line":"                        return"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"            except Exception as e:"},{"line_number":235,"context_line":"                LOG.warning(\"Prometheus readiness check attempt %d \""},{"line_number":236,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            time.sleep(3)"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1c5b6dc9_c938101c","line":236,"range":{"start_line":234,"start_character":0,"end_line":236,"end_character":47},"in_reply_to":"619feddf_48bb7a5b","updated":"2026-05-04 18:38:57.000000000","message":"You can also check if there is any exception that you can use here:\n\nhttps://opendev.org/starlingx/config/src/branch/master/sysinv/sysinv/sysinv/sysinv/common/exception.py","commit_id":"555a4601a59fb2b6e6a579eef4adbaa499d1d2a3"},{"author":{"_account_id":37278,"name":"Mateus Nascimento","display_name":"Mateus Nascimento","email":"Mateus.SoaresdoNascimento@windriver.com","username":"msoaresd"},"change_message_id":"9bdb9865f4240bd9a3e1f0f5261f0aa9a5ed7e0a","unresolved":true,"context_lines":[{"line_number":235,"context_line":"                LOG.warning(\"Prometheus readiness check attempt %d \""},{"line_number":236,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            time.sleep(3)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        raise exception.SysinvException("},{"line_number":241,"context_line":"            \"Prometheus is not ready after the allotted time. \""}],"source_content_type":"text/x-python","patch_set":1,"id":"4b96123d_7d6f5289","line":238,"range":{"start_line":238,"start_character":0,"end_line":238,"end_character":25},"updated":"2026-05-04 15:13:07.000000000","message":"You should guard this with `if i \u003c app_constants.PROMETHEUS_READY_RETRIES`, because the way it is right now it waits 3 seconds for nothing on the last retry before raising the timeout exception.","commit_id":"555a4601a59fb2b6e6a579eef4adbaa499d1d2a3"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"290fcc521b1e86eb441d220d5ed3a27afbe1d78b","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                LOG.warning(\"Prometheus readiness check attempt %d \""},{"line_number":236,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            time.sleep(3)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        raise exception.SysinvException("},{"line_number":241,"context_line":"            \"Prometheus is not ready after the allotted time. \""}],"source_content_type":"text/x-python","patch_set":1,"id":"a29b5832_81564b6d","line":238,"range":{"start_line":238,"start_character":0,"end_line":238,"end_character":25},"in_reply_to":"4b96123d_7d6f5289","updated":"2026-05-04 22:00:49.000000000","message":"Done","commit_id":"555a4601a59fb2b6e6a579eef4adbaa499d1d2a3"},{"author":{"_account_id":38728,"name":"Amit Mahajan","display_name":"Amit Mahajan","email":"Amit.Mahajan@windriver.com","username":"amahajan"},"change_message_id":"dec01d334a14120ada3697dabd8a5b5e3ff1e884","unresolved":true,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"                conditions \u003d cr.get(\u0027status\u0027, {}).get(\u0027conditions\u0027, [])"},{"line_number":228,"context_line":"                for cond in conditions:"},{"line_number":229,"context_line":"                    if cond.get(\u0027type\u0027) \u003d\u003d \u0027Available\u0027 and \\"},{"line_number":230,"context_line":"                            cond.get(\u0027status\u0027) \u003d\u003d \u0027True\u0027:"},{"line_number":231,"context_line":"                        LOG.info(\"Prometheus is ready (attempt %d).\", i)"},{"line_number":232,"context_line":"                        return"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"f53bc78a_69cd7565","line":230,"range":{"start_line":229,"start_character":0,"end_line":230,"end_character":57},"updated":"2026-05-08 17:21:21.000000000","message":"Add a debug/info log in the else part of this if condition. Log should mention the attempt #, along with the information about other conditions you are checking.","commit_id":"38ea5b0c35a6eb3e3dc686d8a60b1e1dfb2f102b"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"0303e15e77ee801959e91492f5b6fba8386e0237","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                conditions \u003d cr.get(\u0027status\u0027, {}).get(\u0027conditions\u0027, [])"},{"line_number":228,"context_line":"                for cond in conditions:"},{"line_number":229,"context_line":"                    if cond.get(\u0027type\u0027) \u003d\u003d \u0027Available\u0027 and \\"},{"line_number":230,"context_line":"                            cond.get(\u0027status\u0027) \u003d\u003d \u0027True\u0027:"},{"line_number":231,"context_line":"                        LOG.info(\"Prometheus is ready (attempt %d).\", i)"},{"line_number":232,"context_line":"                        return"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5284af01_b2a4906b","line":230,"in_reply_to":"9269c4eb_df1f713a","updated":"2026-05-11 17:18:07.000000000","message":"Done","commit_id":"38ea5b0c35a6eb3e3dc686d8a60b1e1dfb2f102b"},{"author":{"_account_id":38572,"name":"Ahmed Syed","display_name":"Ahmed S","email":"ahmed.syed@windriver.com","username":"asyed1"},"change_message_id":"7a9b9a519f215a3fede78eec4b15d6403aa176e6","unresolved":true,"context_lines":[{"line_number":227,"context_line":"                conditions \u003d cr.get(\u0027status\u0027, {}).get(\u0027conditions\u0027, [])"},{"line_number":228,"context_line":"                for cond in conditions:"},{"line_number":229,"context_line":"                    if cond.get(\u0027type\u0027) \u003d\u003d \u0027Available\u0027 and \\"},{"line_number":230,"context_line":"                            cond.get(\u0027status\u0027) \u003d\u003d \u0027True\u0027:"},{"line_number":231,"context_line":"                        LOG.info(\"Prometheus is ready (attempt %d).\", i)"},{"line_number":232,"context_line":"                        return"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9269c4eb_df1f713a","line":230,"in_reply_to":"f53bc78a_69cd7565","updated":"2026-05-11 12:58:49.000000000","message":"+1 to Amit\u0027s comment. When the CR is fetched successfully but Available!\u003dTrue, a debug/info log here would help operators understand what\u0027s happening during the wait. Something like:\n\n```python\nLOG.debug(\"Prometheus readiness attempt %d/%d: Available condition \"\n          \"not met. Current conditions: %s\",\n          i, app_constants.PROMETHEUS_READY_RETRIES, conditions)\n```\n\nThis is especially useful when the CR has other conditions (e.g., Reconciling, Degraded) that explain why it\u0027s not ready yet.","commit_id":"38ea5b0c35a6eb3e3dc686d8a60b1e1dfb2f102b"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"0303e15e77ee801959e91492f5b6fba8386e0237","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"                conditions \u003d cr.get(\u0027status\u0027, {}).get(\u0027conditions\u0027, [])"},{"line_number":228,"context_line":"                for cond in conditions:"},{"line_number":229,"context_line":"                    if cond.get(\u0027type\u0027) \u003d\u003d \u0027Available\u0027 and \\"},{"line_number":230,"context_line":"                            cond.get(\u0027status\u0027) \u003d\u003d \u0027True\u0027:"},{"line_number":231,"context_line":"                        LOG.info(\"Prometheus is ready (attempt %d).\", i)"},{"line_number":232,"context_line":"                        return"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"87aa4506_c20a1c36","line":230,"range":{"start_line":229,"start_character":0,"end_line":230,"end_character":57},"in_reply_to":"f53bc78a_69cd7565","updated":"2026-05-11 17:18:07.000000000","message":"Done","commit_id":"38ea5b0c35a6eb3e3dc686d8a60b1e1dfb2f102b"},{"author":{"_account_id":38572,"name":"Ahmed Syed","display_name":"Ahmed S","email":"ahmed.syed@windriver.com","username":"asyed1"},"change_message_id":"7a9b9a519f215a3fede78eec4b15d6403aa176e6","unresolved":true,"context_lines":[{"line_number":235,"context_line":"                LOG.warning(\"Prometheus readiness check attempt %d \""},{"line_number":236,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            if i \u003c app_constants.PROMETHEUS_READY_RETRIES:"},{"line_number":239,"context_line":"                time.sleep(3)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        raise exception.LifecycleStatusCheckNotReady("}],"source_content_type":"text/x-python","patch_set":2,"id":"e7eca5ea_08639519","line":238,"updated":"2026-05-11 12:58:49.000000000","message":"The ticket spec (CGTS-95305) calls for raising `exception.SysinvException(\"Prometheus is not ready after the allotted time. Check the pod logs.\")`. The implementation raises `LifecycleStatusCheckNotReady` with a different message.\n\nIf `LifecycleStatusCheckNotReady` is intentionally preferred because the framework handles it with a specific status-check failure path, that\u0027s a reasonable improvement — but the ticket description and commit message (which still says \"SysinvException is raised\") should be updated to match.\n\nAlso consider appending actionable guidance to the message, e.g.: \"Prometheus CR condition Available!\u003dTrue after %d attempts. Check the prometheus-operator and prometheus-server pod logs in the monitoring namespace.\"","commit_id":"38ea5b0c35a6eb3e3dc686d8a60b1e1dfb2f102b"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"0303e15e77ee801959e91492f5b6fba8386e0237","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                LOG.warning(\"Prometheus readiness check attempt %d \""},{"line_number":236,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"            if i \u003c app_constants.PROMETHEUS_READY_RETRIES:"},{"line_number":239,"context_line":"                time.sleep(3)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"        raise exception.LifecycleStatusCheckNotReady("}],"source_content_type":"text/x-python","patch_set":2,"id":"94ca622e_4e292b90","line":238,"in_reply_to":"e7eca5ea_08639519","updated":"2026-05-11 17:18:07.000000000","message":"Done","commit_id":"38ea5b0c35a6eb3e3dc686d8a60b1e1dfb2f102b"},{"author":{"_account_id":37173,"name":"Alex Fernandes Figueirêdo","display_name":"Alex Figueiredo","email":"alex.fernandesfigueiredo@windriver.com","username":"afernand"},"change_message_id":"ec1fac5fdcc8c0928b9eb6776878b9218d88b7e8","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        LOG.info(\"Prometheus Operator CRD cleanup complete: \""},{"line_number":208,"context_line":"                 \"%d deleted.\", len(crds))"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def verify_prometheus_ready(self):"},{"line_number":211,"context_line":"        \"\"\"Poll until the Prometheus CR reports Available\u003dTrue, or raise on timeout."},{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        LOG.info(\"Verifying Prometheus readiness.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"89bebbbc_8042f1f7","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":31},"updated":"2026-05-13 13:45:11.000000000","message":"nit: change the name to `verify_prometheus_readiness` or `is_prometheus_ready`","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"9a38f52dd3a7b3aee9b5dd5af5b752622fffc6b0","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        LOG.info(\"Prometheus Operator CRD cleanup complete: \""},{"line_number":208,"context_line":"                 \"%d deleted.\", len(crds))"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def verify_prometheus_ready(self):"},{"line_number":211,"context_line":"        \"\"\"Poll until the Prometheus CR reports Available\u003dTrue, or raise on timeout."},{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        LOG.info(\"Verifying Prometheus readiness.\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"a03f82a8_cc58d6d2","line":210,"range":{"start_line":210,"start_character":8,"end_line":210,"end_character":31},"in_reply_to":"89bebbbc_8042f1f7","updated":"2026-05-14 14:39:07.000000000","message":"Done","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":37173,"name":"Alex Fernandes Figueirêdo","display_name":"Alex Figueiredo","email":"alex.fernandesfigueiredo@windriver.com","username":"afernand"},"change_message_id":"ec1fac5fdcc8c0928b9eb6776878b9218d88b7e8","unresolved":true,"context_lines":[{"line_number":208,"context_line":"                 \"%d deleted.\", len(crds))"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def verify_prometheus_ready(self):"},{"line_number":211,"context_line":"        \"\"\"Poll until the Prometheus CR reports Available\u003dTrue, or raise on timeout."},{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        LOG.info(\"Verifying Prometheus readiness.\")"},{"line_number":214,"context_line":"        kube \u003d kubernetes.KubeOperator()"}],"source_content_type":"text/x-python","patch_set":3,"id":"4becf7df_8d509037","line":211,"range":{"start_line":211,"start_character":11,"end_line":211,"end_character":15},"updated":"2026-05-13 13:45:11.000000000","message":"Make it clear what exactly is been polled/verified on Prometheus side and when (which conditions?) it\u0027s actually considered as ready\"","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"9a38f52dd3a7b3aee9b5dd5af5b752622fffc6b0","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                 \"%d deleted.\", len(crds))"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def verify_prometheus_ready(self):"},{"line_number":211,"context_line":"        \"\"\"Poll until the Prometheus CR reports Available\u003dTrue, or raise on timeout."},{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        LOG.info(\"Verifying Prometheus readiness.\")"},{"line_number":214,"context_line":"        kube \u003d kubernetes.KubeOperator()"}],"source_content_type":"text/x-python","patch_set":3,"id":"f1a4ff5e_0e8c7f54","line":211,"range":{"start_line":211,"start_character":11,"end_line":211,"end_character":15},"in_reply_to":"4becf7df_8d509037","updated":"2026-05-14 14:39:07.000000000","message":"Done","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":37078,"name":"Daniel Marques Caires","display_name":"Daniel Caires","email":"DanielMarques.Caires@windriver.com","username":"dcaires"},"change_message_id":"17d416ff0819fe364832acb1ea76b5622f63a1cd","unresolved":true,"context_lines":[{"line_number":241,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"            if i \u003c app_constants.PROMETHEUS_READY_RETRIES:"},{"line_number":244,"context_line":"                time.sleep(3)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        raise exception.LifecycleStatusCheckNotReady("},{"line_number":247,"context_line":"            \"Prometheus CR \u0027%s\u0027 condition Available!\u003dTrue after %d attempts. \""}],"source_content_type":"text/x-python","patch_set":3,"id":"eabd814f_37d8ec83","line":244,"updated":"2026-05-12 16:54:30.000000000","message":"In your tests, how many logs it showed of waiting for  Available\u003dTrue? Just trying to understand if 3 seconds is not too low","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":37173,"name":"Alex Fernandes Figueirêdo","display_name":"Alex Figueiredo","email":"alex.fernandesfigueiredo@windriver.com","username":"afernand"},"change_message_id":"ec1fac5fdcc8c0928b9eb6776878b9218d88b7e8","unresolved":true,"context_lines":[{"line_number":241,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"            if i \u003c app_constants.PROMETHEUS_READY_RETRIES:"},{"line_number":244,"context_line":"                time.sleep(3)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        raise exception.LifecycleStatusCheckNotReady("},{"line_number":247,"context_line":"            \"Prometheus CR \u0027%s\u0027 condition Available!\u003dTrue after %d attempts. \""}],"source_content_type":"text/x-python","patch_set":3,"id":"d70b3d4c_ace98e38","line":244,"range":{"start_line":244,"start_character":27,"end_line":244,"end_character":28},"updated":"2026-05-13 13:45:11.000000000","message":"To accomodate different runtime/timing scenarios and enable fine tuning, I would recommend adding and fetching the PROMETHEUS_READY_RETRIES and a new PROMETHEUS_READY_INTERVAL (replace the hard-codded 3s values used at `time.sleep`) to prometheus app configs/overrides.","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"9a38f52dd3a7b3aee9b5dd5af5b752622fffc6b0","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"            if i \u003c app_constants.PROMETHEUS_READY_RETRIES:"},{"line_number":244,"context_line":"                time.sleep(3)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        raise exception.LifecycleStatusCheckNotReady("},{"line_number":247,"context_line":"            \"Prometheus CR \u0027%s\u0027 condition Available!\u003dTrue after %d attempts. \""}],"source_content_type":"text/x-python","patch_set":3,"id":"5e4eaaf3_13b2e025","line":244,"in_reply_to":"a5ebfc58_21e6c5c4","updated":"2026-05-14 14:39:07.000000000","message":"Done","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"9a38f52dd3a7b3aee9b5dd5af5b752622fffc6b0","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"            if i \u003c app_constants.PROMETHEUS_READY_RETRIES:"},{"line_number":244,"context_line":"                time.sleep(3)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        raise exception.LifecycleStatusCheckNotReady("},{"line_number":247,"context_line":"            \"Prometheus CR \u0027%s\u0027 condition Available!\u003dTrue after %d attempts. \""}],"source_content_type":"text/x-python","patch_set":3,"id":"83a7b424_6bcd30e6","line":244,"range":{"start_line":244,"start_character":27,"end_line":244,"end_character":28},"in_reply_to":"d70b3d4c_ace98e38","updated":"2026-05-14 14:39:07.000000000","message":"Done","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"09e2f25b21fdbde70ad07433cc8e03001d4f0016","unresolved":true,"context_lines":[{"line_number":241,"context_line":"                            \"failed: %s\", i, e)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"            if i \u003c app_constants.PROMETHEUS_READY_RETRIES:"},{"line_number":244,"context_line":"                time.sleep(3)"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"        raise exception.LifecycleStatusCheckNotReady("},{"line_number":247,"context_line":"            \"Prometheus CR \u0027%s\u0027 condition Available!\u003dTrue after %d attempts. \""}],"source_content_type":"text/x-python","patch_set":3,"id":"a5ebfc58_21e6c5c4","line":244,"in_reply_to":"eabd814f_37d8ec83","updated":"2026-05-13 12:58:14.000000000","message":"Good question. From the AIO-SX verify run log, the readiness check took 6 polls (5 × \"not met\" + 1 × \"ready\") \u003d ~15 seconds total before Prometheus reached Available\u003dTrue. The delays were all from the underlying PVC being unbound and the pod being scheduled, not from our poll cadence.","commit_id":"839ca6b0a62691bb4d2f96d5ff7ef1aa60841419"}],"python3-k8sapp-prometheus/k8sapp_prometheus/k8sapp_prometheus/tests/test_lifecycle_prometheus.py":[{"author":{"_account_id":38572,"name":"Ahmed Syed","display_name":"Ahmed S","email":"ahmed.syed@windriver.com","username":"asyed1"},"change_message_id":"7a9b9a519f215a3fede78eec4b15d6403aa176e6","unresolved":true,"context_lines":[{"line_number":833,"context_line":"                conditions\u003d[{\u0027type\u0027: \u0027Available\u0027, \u0027status\u0027: \u0027False\u0027}])"},{"line_number":834,"context_line":"            with self.assertRaises(_LifecycleStatusCheckNotReady) as ctx:"},{"line_number":835,"context_line":"                self.op.verify_prometheus_ready()"},{"line_number":836,"context_line":"        self.assertIn(\"Available\", str(ctx.exception))"},{"line_number":837,"context_line":""},{"line_number":838,"context_line":"    def test_api_exception_retries_then_raises(self):"},{"line_number":839,"context_line":"        with patch.object(_app_constants, \u0027PROMETHEUS_READY_RETRIES\u0027, 3):"}],"source_content_type":"text/x-python","patch_set":2,"id":"4387234c_ce542b9b","line":836,"updated":"2026-05-11 12:58:49.000000000","message":"The ticket requires a test for \"CR not found → raises with a clear message\". `test_api_exception_retries_then_raises` covers the generic ApiException path, but consider making the \"not found\" case more explicit — e.g., use a 404 status ApiException and assert the error message mentions the CR name or namespace. This would make it clearer that a missing CR produces an actionable error rather than a generic timeout.\n\nAlso consider adding a test case where the CR response has no `status` key at all (just `{\u0027metadata\u0027: {...}}`), not just `{\u0027status\u0027: {}}`. Freshly-created CRs before the operator reconciles may not have a status field.","commit_id":"38ea5b0c35a6eb3e3dc686d8a60b1e1dfb2f102b"},{"author":{"_account_id":38864,"name":"Sridhar Kumar Ettkepalli","display_name":"Sridhar","email":"sridharkumar.ettkepalli@windriver.com","username":"settkepa"},"change_message_id":"0303e15e77ee801959e91492f5b6fba8386e0237","unresolved":false,"context_lines":[{"line_number":833,"context_line":"                conditions\u003d[{\u0027type\u0027: \u0027Available\u0027, \u0027status\u0027: \u0027False\u0027}])"},{"line_number":834,"context_line":"            with self.assertRaises(_LifecycleStatusCheckNotReady) as ctx:"},{"line_number":835,"context_line":"                self.op.verify_prometheus_ready()"},{"line_number":836,"context_line":"        self.assertIn(\"Available\", str(ctx.exception))"},{"line_number":837,"context_line":""},{"line_number":838,"context_line":"    def test_api_exception_retries_then_raises(self):"},{"line_number":839,"context_line":"        with patch.object(_app_constants, \u0027PROMETHEUS_READY_RETRIES\u0027, 3):"}],"source_content_type":"text/x-python","patch_set":2,"id":"61b3c699_d8c41642","line":836,"in_reply_to":"4387234c_ce542b9b","updated":"2026-05-11 17:18:07.000000000","message":"Done","commit_id":"38ea5b0c35a6eb3e3dc686d8a60b1e1dfb2f102b"}]}
