)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"f2e06ebc371d3ddea08d5f13e213b68614de62aa","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The Health Manager was not acting when the amphora-agent reported"},{"line_number":10,"context_line":"listeners as DOWN. With this patch, the Health Manager skips updating"},{"line_number":11,"context_line":"the amphora health record and marks the listener operating status as"},{"line_number":12,"context_line":"ERROR. Should a second amphora (active-standby topology) report the"},{"line_number":13,"context_line":"listener as UP, the Octavia listener operating status is elevated to"},{"line_number":14,"context_line":"DEGRADED."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Task: 37700"},{"line_number":17,"context_line":"Story: 2006972"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3fa7e38b_7d7f10df","line":14,"range":{"start_line":12,"start_character":7,"end_line":14,"end_character":9},"updated":"2019-12-02 19:20:50.000000000","message":"I\u0027m not 100% happy with the updated listener operating status when this happens. It may be that the active amphora reports listener DOWN and the standby UP. We\u0027d be elevating the listener operating status to DEGRADED when the active amphora\u0027s listener is not operational and thus not responding. It could also be the other way around, standby amp reports listener DOWN but active amp reports UP. Feedback is welcome.","commit_id":"465a6738c574462b6057c67ac03e478ddf3d9fd2"}],"octavia/controller/healthmanager/health_drivers/update_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"893fad244f3fc69013f196b0e7fef1a7d562baa8","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    update_amp_health \u003d False"},{"line_number":187,"context_line":"                # Do not update amphora health if the reporting listener count"},{"line_number":188,"context_line":"                # does not match the expected listener count"},{"line_number":189,"context_line":"                if len(listeners) !\u003d expected_listener_count:"},{"line_number":190,"context_line":"                    update_amp_health \u003d False"},{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            # If this is not a spare amp, log and skip it."}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9e7c43b7","line":189,"range":{"start_line":189,"start_character":16,"end_line":189,"end_character":18},"updated":"2019-12-02 21:44:31.000000000","message":"s/elif ?","commit_id":"465a6738c574462b6057c67ac03e478ddf3d9fd2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"7230b9d781fb43b5e1a308f230272d6c91843990","unresolved":false,"context_lines":[{"line_number":186,"context_line":"                    update_amp_health \u003d False"},{"line_number":187,"context_line":"                # Do not update amphora health if the reporting listener count"},{"line_number":188,"context_line":"                # does not match the expected listener count"},{"line_number":189,"context_line":"                if len(listeners) !\u003d expected_listener_count:"},{"line_number":190,"context_line":"                    update_amp_health \u003d False"},{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            # If this is not a spare amp, log and skip it."}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_61ce8ab8","line":189,"range":{"start_line":189,"start_character":16,"end_line":189,"end_character":18},"in_reply_to":"3fa7e38b_9e7c43b7","updated":"2019-12-02 22:08:10.000000000","message":"Done","commit_id":"465a6738c574462b6057c67ac03e478ddf3d9fd2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"893fad244f3fc69013f196b0e7fef1a7d562baa8","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                except Exception as e:"},{"line_number":219,"context_line":"                    LOG.info(\"Error deleting amp %s with IP %s Error: %s\","},{"line_number":220,"context_line":"                             health[\u0027id\u0027], srcaddr, e)"},{"line_number":221,"context_line":"            update_amp_health \u003d True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        if update_amp_health:"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_0161d6d4","line":221,"updated":"2019-12-02 21:44:31.000000000","message":"Is this necessary?","commit_id":"465a6738c574462b6057c67ac03e478ddf3d9fd2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"7230b9d781fb43b5e1a308f230272d6c91843990","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                except Exception as e:"},{"line_number":219,"context_line":"                    LOG.info(\"Error deleting amp %s with IP %s Error: %s\","},{"line_number":220,"context_line":"                             health[\u0027id\u0027], srcaddr, e)"},{"line_number":221,"context_line":"            update_amp_health \u003d True"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        if update_amp_health:"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_a1e2422f","line":221,"in_reply_to":"3fa7e38b_0161d6d4","updated":"2019-12-02 22:08:10.000000000","message":"Oops, it is a leftover from a draft patch.","commit_id":"465a6738c574462b6057c67ac03e478ddf3d9fd2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"893fad244f3fc69013f196b0e7fef1a7d562baa8","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            LOG.warning(\u0027Amphora %(id)s health message reports %(found)i \u0027"},{"line_number":253,"context_line":"                        \u0027listeners when %(expected)i expected\u0027,"},{"line_number":254,"context_line":"                        {\u0027id\u0027: health[\u0027id\u0027], \u0027found\u0027: len(listeners),"},{"line_number":255,"context_line":"                         \u0027expected\u0027: expected_listener_count})"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        # Don\u0027t try to update status for spares pool amphora"},{"line_number":258,"context_line":"        if not db_lb:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_217ad276","line":255,"updated":"2019-12-02 21:44:31.000000000","message":"Message not accurate any more based on above change.","commit_id":"465a6738c574462b6057c67ac03e478ddf3d9fd2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"7230b9d781fb43b5e1a308f230272d6c91843990","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            LOG.warning(\u0027Amphora %(id)s health message reports %(found)i \u0027"},{"line_number":253,"context_line":"                        \u0027listeners when %(expected)i expected\u0027,"},{"line_number":254,"context_line":"                        {\u0027id\u0027: health[\u0027id\u0027], \u0027found\u0027: len(listeners),"},{"line_number":255,"context_line":"                         \u0027expected\u0027: expected_listener_count})"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        # Don\u0027t try to update status for spares pool amphora"},{"line_number":258,"context_line":"        if not db_lb:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_c1e73e0f","line":255,"in_reply_to":"3fa7e38b_217ad276","updated":"2019-12-02 22:08:10.000000000","message":"Done","commit_id":"465a6738c574462b6057c67ac03e478ddf3d9fd2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"3469923222e5173cdb99ada76f56cd3360412fbf","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                # FULL \u003d HAProxy listener status not nbconn \u003c maxconn"},{"line_number":291,"context_line":"                elif listener.get(\u0027status\u0027) \u003d\u003d constants.FULL:"},{"line_number":292,"context_line":"                    listener_status \u003d constants.DEGRADED"},{"line_number":293,"context_line":"                    if db_lb[\u0027operating_status\u0027] \u003d\u003d constants.ONLINE:"},{"line_number":294,"context_line":"                        lb_status \u003d constants.DEGRADED"},{"line_number":295,"context_line":"                # DOWN \u003d HAProxy listener status not operational but enabled."},{"line_number":296,"context_line":"                # Something\u0027s off."}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_bd9108fa","line":293,"range":{"start_line":293,"start_character":23,"end_line":293,"end_character":48},"updated":"2019-12-02 19:25:31.000000000","message":"This change is unrelated to this change but I thought about fixing it here nonetheless. \u0027lb_status\u0027 is the operating status which the LB should be updated to. What we want here is the LB operating status marked in the database.","commit_id":"465a6738c574462b6057c67ac03e478ddf3d9fd2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5d4c0244aaac2abdb35717096224b7610ebbdf10","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                except Exception as e:"},{"line_number":211,"context_line":"                    LOG.info(\"Error deleting amp %s with IP %s Error: %s\","},{"line_number":212,"context_line":"                             health[\u0027id\u0027], srcaddr, e)"},{"line_number":213,"context_line":"            expected_listener_count \u003d 0"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        listeners \u003d health[\u0027listeners\u0027]"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_dfec35be","side":"PARENT","line":213,"range":{"start_line":213,"start_character":12,"end_line":213,"end_character":39},"updated":"2020-01-13 22:58:57.000000000","message":"This is incorrect as well. expected_listener_","commit_id":"3c05cce89905a5dcc2caac3f6d81e9dc7b82261e"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"3523fc5ea8c606940f32aad77a76d5d3677983ba","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                except Exception as e:"},{"line_number":211,"context_line":"                    LOG.info(\"Error deleting amp %s with IP %s Error: %s\","},{"line_number":212,"context_line":"                             health[\u0027id\u0027], srcaddr, e)"},{"line_number":213,"context_line":"            expected_listener_count \u003d 0"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        listeners \u003d health[\u0027listeners\u0027]"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_bc64394e","side":"PARENT","line":213,"range":{"start_line":213,"start_character":12,"end_line":213,"end_character":39},"in_reply_to":"3fa7e38b_dfec35be","updated":"2020-01-24 16:11:47.000000000","message":"I don\u0027t follow this either, sorry :/","commit_id":"3c05cce89905a5dcc2caac3f6d81e9dc7b82261e"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5d4c0244aaac2abdb35717096224b7610ebbdf10","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if db_lb:"},{"line_number":165,"context_line":"            if \u0027PENDING\u0027 not in db_lb[\u0027provisioning_status\u0027]:"},{"line_number":166,"context_line":"                expected_listener_count \u003d 0"},{"line_number":167,"context_line":"                for key, listener in db_lb.get(\u0027listeners\u0027, {}).items():"},{"line_number":168,"context_line":"                    # disabled listeners don\u0027t report from the amphora"},{"line_number":169,"context_line":"                    if listener[\u0027enabled\u0027]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_9c5c8b59","line":166,"updated":"2020-01-13 22:58:57.000000000","message":"This is incorrect behavior.\nThe LB may have 50 listeners and still be in a pending state adding one. If the LB is in PENDING, we should ignore the listener count, no matter what it is. We cannot assume this is the first listener on the LB.\nWe want to timestamp the DB no matter what if the LB is in a transitional state such as PENDING_* since we did get a packet from it.","commit_id":"d05fedc41cd9b5d25db7595d41fa48c57a8a6e48"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"3523fc5ea8c606940f32aad77a76d5d3677983ba","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        if db_lb:"},{"line_number":165,"context_line":"            if \u0027PENDING\u0027 not in db_lb[\u0027provisioning_status\u0027]:"},{"line_number":166,"context_line":"                expected_listener_count \u003d 0"},{"line_number":167,"context_line":"                for key, listener in db_lb.get(\u0027listeners\u0027, {}).items():"},{"line_number":168,"context_line":"                    # disabled listeners don\u0027t report from the amphora"},{"line_number":169,"context_line":"                    if listener[\u0027enabled\u0027]:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_85e327d7","line":166,"in_reply_to":"3fa7e38b_9c5c8b59","updated":"2020-01-24 16:11:47.000000000","message":"I may be missing something here so apologies in advance. How do you see the amphora not being timestamped when in a PENDING state?\n\nL161: update_amphora_health \u003d True\nL165: if in PENDING, jump to L229\nL229: update_amphora_health \u003d\u003d True\nL253: timestamp is updated","commit_id":"d05fedc41cd9b5d25db7595d41fa48c57a8a6e48"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"5d4c0244aaac2abdb35717096224b7610ebbdf10","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                session, db_lb, expected_listener_count))"},{"line_number":182,"context_line":"                # Do not update amphora health if at least one listener reports"},{"line_number":183,"context_line":"                # DOWN."},{"line_number":184,"context_line":"                if any(listener[\u0027status\u0027] \u003d\u003d constants.DOWN"},{"line_number":185,"context_line":"                        for listener in listeners.values()):"},{"line_number":186,"context_line":"                    update_amp_health \u003d False"},{"line_number":187,"context_line":"                    LOG.warning(\u0027Amphora %s health message reports \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_df1af5c5","line":184,"updated":"2020-01-13 22:58:57.000000000","message":"Can you link me to where this is set as \"DOWN\" in the code?\nAs I read it, if the HAProxy process is not running, the stats socket will not be available and the agent would not send any message.","commit_id":"d05fedc41cd9b5d25db7595d41fa48c57a8a6e48"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f9cf6c202c473f1ab128a50b379a151ac66e24e2","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                session, db_lb, expected_listener_count))"},{"line_number":182,"context_line":"                # Do not update amphora health if at least one listener reports"},{"line_number":183,"context_line":"                # DOWN."},{"line_number":184,"context_line":"                if any(listener[\u0027status\u0027] \u003d\u003d constants.DOWN"},{"line_number":185,"context_line":"                        for listener in listeners.values()):"},{"line_number":186,"context_line":"                    update_amp_health \u003d False"},{"line_number":187,"context_line":"                    LOG.warning(\u0027Amphora %s health message reports \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"1f493fa4_7018f680","line":184,"in_reply_to":"3fa7e38b_6b330363","updated":"2020-04-20 23:13:51.000000000","message":"But that is a socket file, if the process behind it isn\u0027t running, there is nothing to read and it will fail.","commit_id":"d05fedc41cd9b5d25db7595d41fa48c57a8a6e48"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"3523fc5ea8c606940f32aad77a76d5d3677983ba","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                session, db_lb, expected_listener_count))"},{"line_number":182,"context_line":"                # Do not update amphora health if at least one listener reports"},{"line_number":183,"context_line":"                # DOWN."},{"line_number":184,"context_line":"                if any(listener[\u0027status\u0027] \u003d\u003d constants.DOWN"},{"line_number":185,"context_line":"                        for listener in listeners.values()):"},{"line_number":186,"context_line":"                    update_amp_health \u003d False"},{"line_number":187,"context_line":"                    LOG.warning(\u0027Amphora %s health message reports \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_6b330363","line":184,"in_reply_to":"3fa7e38b_df1af5c5","updated":"2020-01-24 16:11:47.000000000","message":"When haproxy is killed -9\u0027d and systemd does not respawn it, the stat socket file will still exist and the amphora-agent will read it. This case happens on multi-process haproxy amphorae (\u003c\u003d Rocky).\n\nhttps://github.com/openstack/octavia/blob/b6181e272c852034a41df585a8d5047e5207b1a9/octavia/amphorae/backends/health_daemon/health_daemon.py#L120","commit_id":"d05fedc41cd9b5d25db7595d41fa48c57a8a6e48"}]}
