)]}'
{"etc/octavia.conf":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":227,"context_line":"# These \"failover\" timeouts are used during the failover process to probe"},{"line_number":228,"context_line":"# amphorae that are part of the load balancer being failed over."},{"line_number":229,"context_line":"# These values are very low to facilitate \"fail fast\" should an amphora"},{"line_number":230,"context_line":"# note respond in a failure situation."},{"line_number":231,"context_line":"# failover_connection_max_retries \u003d 2"},{"line_number":232,"context_line":"# failover_connection_retry_interval \u003d 5"},{"line_number":233,"context_line":""}],"source_content_type":"text/plain","patch_set":40,"id":"ff570b3c_a5cafa42","line":230,"range":{"start_line":230,"start_character":2,"end_line":230,"end_character":6},"updated":"2020-05-27 20:37:31.000000000","message":"s/not","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":227,"context_line":"# These \"failover\" timeouts are used during the failover process to probe"},{"line_number":228,"context_line":"# amphorae that are part of the load balancer being failed over."},{"line_number":229,"context_line":"# These values are very low to facilitate \"fail fast\" should an amphora"},{"line_number":230,"context_line":"# note respond in a failure situation."},{"line_number":231,"context_line":"# failover_connection_max_retries \u003d 2"},{"line_number":232,"context_line":"# failover_connection_retry_interval \u003d 5"},{"line_number":233,"context_line":""}],"source_content_type":"text/plain","patch_set":40,"id":"ff570b3c_cf1613a8","line":230,"range":{"start_line":230,"start_character":2,"end_line":230,"end_character":6},"in_reply_to":"ff570b3c_a5cafa42","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":293,"context_line":"# user_data_config_drive \u003d False"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"# amphora_delete_retries \u003d 5"},{"line_number":296,"context_line":"# amphora_delete_retry_interval \u003d 5"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"[task_flow]"},{"line_number":299,"context_line":"# TaskFlow engine options are:"}],"source_content_type":"text/plain","patch_set":40,"id":"ff570b3c_252d4afd","line":296,"updated":"2020-05-27 20:37:31.000000000","message":"nit: no comment describing these, but I guess they\u0027re obvious","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":293,"context_line":"# user_data_config_drive \u003d False"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"# amphora_delete_retries \u003d 5"},{"line_number":296,"context_line":"# amphora_delete_retry_interval \u003d 5"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"[task_flow]"},{"line_number":299,"context_line":"# TaskFlow engine options are:"}],"source_content_type":"text/plain","patch_set":40,"id":"ff570b3c_0f112bad","line":296,"in_reply_to":"ff570b3c_252d4afd","updated":"2020-05-28 21:49:56.000000000","message":"Yeah, we have other retry settings that are basically obvious, so not sure we need extra comments here.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":166,"context_line":"# endpoint_type \u003d publicURL"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"[compute]"},{"line_number":169,"context_line":"# The maximum attempts to retry an action with the networking service."},{"line_number":170,"context_line":"# max_retries \u003d 15"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"# Seconds to wait before retrying an action with the networking service."}],"source_content_type":"text/plain","patch_set":45,"id":"bf51134e_df23ccbd","line":169,"range":{"start_line":169,"start_character":51,"end_line":169,"end_character":61},"updated":"2020-06-15 18:38:12.000000000","message":"copy-pasta :D","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":169,"context_line":"# The maximum attempts to retry an action with the networking service."},{"line_number":170,"context_line":"# max_retries \u003d 15"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"# Seconds to wait before retrying an action with the networking service."},{"line_number":173,"context_line":"# retry_interval \u003d 1"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"# The seconds to backoff retry attempts"}],"source_content_type":"text/plain","patch_set":45,"id":"bf51134e_df0c6c44","line":172,"range":{"start_line":172,"start_character":53,"end_line":172,"end_character":63},"updated":"2020-06-15 18:38:12.000000000","message":"nova-networking FTW!","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"}],"octavia/amphorae/backends/agent/api_server/loadbalancer.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        self.stream \u003d stream_"},{"line_number":59,"context_line":"        self.hash \u003d hashlib.md5()  # nosec"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def read(self, l):"},{"line_number":62,"context_line":"        block \u003d self.stream.read(l)"},{"line_number":63,"context_line":"        if block:"},{"line_number":64,"context_line":"            self.hash.update(block)"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_443f96d5","line":61,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                details\u003d\"Unknown action: {0}\".format(action)), status\u003d400)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        self._check_lb_exists(lb_id)"},{"line_number":238,"context_line":"        is_vrrp \u003d os.path.exists(util.keepalived_check_script_path())"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        # Since this script should be created at LB create time"},{"line_number":241,"context_line":"        # we can check for this path to see if VRRP is enabled"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_0a28fc83","line":238,"updated":"2020-06-09 16:33:32.000000000","message":"nit: for consistency with https://review.opendev.org/#/c/705317/40/octavia/amphorae/backends/agent/api_server/keepalivedlvs.py@81, this would be:\n\n  is_vrrp \u003d (CONF.controller_worker.loadbalancer_topology \u003d\u003d consts.TOPOLOGY_ACTIVE_STANDBY)\n\n\n... but I get as-is is shorter.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4a92c0f76c78ee016af66366bf5b1c70446ac628","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                details\u003d\"Unknown action: {0}\".format(action)), status\u003d400)"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        self._check_lb_exists(lb_id)"},{"line_number":238,"context_line":"        is_vrrp \u003d os.path.exists(util.keepalived_check_script_path())"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        # Since this script should be created at LB create time"},{"line_number":241,"context_line":"        # we can check for this path to see if VRRP is enabled"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_5602e50c","line":238,"in_reply_to":"ff570b3c_0a28fc83","updated":"2020-06-09 21:14:14.000000000","message":"lol, I just moved this up a few lines, but yes, now that we have the topology accurate in the config file, we should use it rather than guessing based on file paths.\n(I know, I touched it, so I bought it. grin)","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"0c4ff16df87c592ce6a518fd70db31b0c12991fe","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                    details\u003de.output), status\u003d500)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # If we are not in active/standby we need to send an IP"},{"line_number":268,"context_line":"        # advertisement (GARP or NA). Keepalived handles this for"},{"line_number":269,"context_line":"        # active/standby load balancers."},{"line_number":270,"context_line":"        if not is_vrrp and action in [consts.AMP_ACTION_START,"},{"line_number":271,"context_line":"                                      consts.AMP_ACTION_RELOAD]:"}],"source_content_type":"text/x-python","patch_set":42,"id":"ff570b3c_b9f9e6c8","line":268,"updated":"2020-06-06 06:13:15.000000000","message":"Hi, Michael. Just my personal puzzle: why we need to send an IP advertisement here? Previously, amphora don\u0027t send IP advertisement but it work fine. Dose this cause potential bug if we don\u0027t send an IP advertisement?","commit_id":"c01bc8d6bc08d741e416f796cf9eae8d56a8ae2a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7914659698a952588df18be680f42a395ac9b417","unresolved":false,"context_lines":[{"line_number":265,"context_line":"                    details\u003de.output), status\u003d500)"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        # If we are not in active/standby we need to send an IP"},{"line_number":268,"context_line":"        # advertisement (GARP or NA). Keepalived handles this for"},{"line_number":269,"context_line":"        # active/standby load balancers."},{"line_number":270,"context_line":"        if not is_vrrp and action in [consts.AMP_ACTION_START,"},{"line_number":271,"context_line":"                                      consts.AMP_ACTION_RELOAD]:"}],"source_content_type":"text/x-python","patch_set":42,"id":"ff570b3c_5a76aa0e","line":268,"in_reply_to":"ff570b3c_b9f9e6c8","updated":"2020-06-08 15:59:21.000000000","message":"It is a performance improvement for failover. We have changed the order of booting the replacement VM in this patch, so now we will have both the old amphora and the new one booted at the same time for a short period. By forcing an advertisement here we can improve the service resumption time by letting neutron know that the new amphora is ready and should be the new target.","commit_id":"c01bc8d6bc08d741e416f796cf9eae8d56a8ae2a"}],"octavia/amphorae/backends/agent/api_server/util.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"27223bfad694809898f09cf957f3a89cd6da6891","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        os.makedirs(keepalived_check_scripts_dir())"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    lb_ids \u003d get_loadbalancers()"},{"line_number":345,"context_line":"    # If no LBs are found, so make sure keepalived thinks haproxy is down."},{"line_number":346,"context_line":"    if not lb_ids:"},{"line_number":347,"context_line":"        with open(haproxy_check_script_path(), \u0027w\u0027) as text_file:"},{"line_number":348,"context_line":"            text_file.write(\u0027exit 1\u0027)"},{"line_number":349,"context_line":"        return"},{"line_number":350,"context_line":"    if action \u003d\u003d consts.AMP_ACTION_STOP:"},{"line_number":351,"context_line":"        lb_ids.remove(lb_id)"},{"line_number":352,"context_line":"    args \u003d []"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f4c43b2_b2ffefa8","line":349,"range":{"start_line":345,"start_character":0,"end_line":349,"end_character":14},"updated":"2020-04-15 06:53:15.000000000","message":"This breaks UDP-only LBs by writing an always-failing check to the check_scripts directory.","commit_id":"5b8d64abdbcc34ecc0a81bc50e67fcc888ec0dc5"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7da5f4ad3aa43824b026d5ef5c24dca0455c9bae","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        os.makedirs(keepalived_check_scripts_dir())"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    lb_ids \u003d get_loadbalancers()"},{"line_number":345,"context_line":"    # If no LBs are found, so make sure keepalived thinks haproxy is down."},{"line_number":346,"context_line":"    if not lb_ids:"},{"line_number":347,"context_line":"        with open(haproxy_check_script_path(), \u0027w\u0027) as text_file:"},{"line_number":348,"context_line":"            text_file.write(\u0027exit 1\u0027)"},{"line_number":349,"context_line":"        return"},{"line_number":350,"context_line":"    if action \u003d\u003d consts.AMP_ACTION_STOP:"},{"line_number":351,"context_line":"        lb_ids.remove(lb_id)"},{"line_number":352,"context_line":"    args \u003d []"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f4c43b2_66e0f8fb","line":349,"range":{"start_line":345,"start_character":0,"end_line":349,"end_character":14},"in_reply_to":"3f4c43b2_88843f60","updated":"2020-04-16 06:18:50.000000000","message":"Well, it\u0027s CURRENTLY not in the codebase, you just added it in this patch? So obviously it\u0027s pretty safe to not have it. XD\n... Which is me saying I think that we can, in fact, just delete this.","commit_id":"5b8d64abdbcc34ecc0a81bc50e67fcc888ec0dc5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2f42c85bb609ab0a11094291360ac5dfbb2a5716","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        os.makedirs(keepalived_check_scripts_dir())"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    lb_ids \u003d get_loadbalancers()"},{"line_number":345,"context_line":"    # If no LBs are found, so make sure keepalived thinks haproxy is down."},{"line_number":346,"context_line":"    if not lb_ids:"},{"line_number":347,"context_line":"        with open(haproxy_check_script_path(), \u0027w\u0027) as text_file:"},{"line_number":348,"context_line":"            text_file.write(\u0027exit 1\u0027)"},{"line_number":349,"context_line":"        return"},{"line_number":350,"context_line":"    if action \u003d\u003d consts.AMP_ACTION_STOP:"},{"line_number":351,"context_line":"        lb_ids.remove(lb_id)"},{"line_number":352,"context_line":"    args \u003d []"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f4c43b2_88843f60","line":349,"range":{"start_line":345,"start_character":0,"end_line":349,"end_character":14},"in_reply_to":"3f4c43b2_b2ffefa8","updated":"2020-04-15 15:35:54.000000000","message":"Umm, I don\u0027t think we can just delete this.","commit_id":"5b8d64abdbcc34ecc0a81bc50e67fcc888ec0dc5"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"e8944ea0c8a61861f40c747e48f3d03741389d49","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        os.makedirs(keepalived_check_scripts_dir())"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    lb_ids \u003d get_loadbalancers()"},{"line_number":345,"context_line":"    # If no LBs are found, so make sure keepalived thinks haproxy is down."},{"line_number":346,"context_line":"    if not lb_ids:"},{"line_number":347,"context_line":"        with open(haproxy_check_script_path(), \u0027w\u0027) as text_file:"},{"line_number":348,"context_line":"            text_file.write(\u0027exit 1\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"3f4c43b2_06cad46b","line":345,"updated":"2020-04-16 06:23:15.000000000","message":"I would be more upset about you re-adding this broken (again, NEW) code, but this is the piece you mentioned you would be revisiting tomorrow so I\u0027ll withhold judgement. ;)","commit_id":"2db50e02506e73523f133b0d658bbe4441041246"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"6bd471d84e53b9f19602d537b7ac7d6c75c7de77","unresolved":false,"context_lines":[{"line_number":339,"context_line":"def vrrp_check_script_update(lb_id, action):"},{"line_number":340,"context_line":"    if not os.path.exists(keepalived_dir()):"},{"line_number":341,"context_line":"        os.makedirs(keepalived_dir())"},{"line_number":342,"context_line":"        os.makedirs(keepalived_check_scripts_dir())"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    lb_ids \u003d get_loadbalancers()"},{"line_number":345,"context_line":"    udp_ids \u003d get_udp_listeners()"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_0dbb01c4","line":342,"updated":"2020-05-28 15:14:35.000000000","message":"keepalived dir may exist but check scripts dir may not.\n\nhttps://review.opendev.org/#/c/705317/40/octavia/amphorae/backends/agent/api_server/keepalived.py@50","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":339,"context_line":"def vrrp_check_script_update(lb_id, action):"},{"line_number":340,"context_line":"    if not os.path.exists(keepalived_dir()):"},{"line_number":341,"context_line":"        os.makedirs(keepalived_dir())"},{"line_number":342,"context_line":"        os.makedirs(keepalived_check_scripts_dir())"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    lb_ids \u003d get_loadbalancers()"},{"line_number":345,"context_line":"    udp_ids \u003d get_udp_listeners()"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_ef1317b7","line":342,"in_reply_to":"ff570b3c_0dbb01c4","updated":"2020-05-28 21:49:56.000000000","message":"Yay python3! fixed in a different way now that we are py3 only.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    udp_ids \u003d get_udp_listeners()"},{"line_number":346,"context_line":"    # If no LBs are found, so make sure keepalived thinks haproxy is down."},{"line_number":347,"context_line":"    if not lb_ids:"},{"line_number":348,"context_line":"        if not udp_ids:"},{"line_number":349,"context_line":"            with open(haproxy_check_script_path(), \u0027w\u0027) as text_file:"},{"line_number":350,"context_line":"                text_file.write(\u0027exit 1\u0027)"},{"line_number":351,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_8fda5ee6","line":348,"range":{"start_line":348,"start_character":8,"end_line":348,"end_character":23},"updated":"2020-06-09 16:33:32.000000000","message":"I don\u0027t follow this line addition. UDP listeners are not managed by HAProxy. We should only want to make keepalived think haproxy is down if there are no haproxy-backed listeners. Shouldn\u0027t we set \"exit 1\" regardless of UDP listeners?","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4a92c0f76c78ee016af66366bf5b1c70446ac628","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    udp_ids \u003d get_udp_listeners()"},{"line_number":346,"context_line":"    # If no LBs are found, so make sure keepalived thinks haproxy is down."},{"line_number":347,"context_line":"    if not lb_ids:"},{"line_number":348,"context_line":"        if not udp_ids:"},{"line_number":349,"context_line":"            with open(haproxy_check_script_path(), \u0027w\u0027) as text_file:"},{"line_number":350,"context_line":"                text_file.write(\u0027exit 1\u0027)"},{"line_number":351,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_31a93bdd","line":348,"range":{"start_line":348,"start_character":8,"end_line":348,"end_character":23},"in_reply_to":"ff570b3c_8fda5ee6","updated":"2020-06-09 21:14:14.000000000","message":"Well, by setting exit 1, we will down the VIP, so if there were only UDP listeners, the VIP would down and those UDP listeners would fail.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":399,"context_line":"            interface \u003d network_utils.get_interface_name("},{"line_number":400,"context_line":"                vip, net_ns\u003dconsts.AMPHORA_NAMESPACE)"},{"line_number":401,"context_line":"            ip_advertisement.send_ip_advertisement("},{"line_number":402,"context_line":"                interface, vip, net_ns\u003dconsts.AMPHORA_NAMESPACE)"},{"line_number":403,"context_line":"    except Exception as e:"},{"line_number":404,"context_line":"        LOG.debug(\u0027Send VIP advertisement failed due to :%s. \u0027"},{"line_number":405,"context_line":"                  \u0027This amphora may not be the MASTER. Ignoring.\u0027, str(e))"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_e570720b","line":402,"updated":"2020-05-27 20:37:31.000000000","message":"Just thinking out loud that if the try/except was inside the for loop, you would at least try to send an advertisement for all the VIPs even if a single one failed.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":399,"context_line":"            interface \u003d network_utils.get_interface_name("},{"line_number":400,"context_line":"                vip, net_ns\u003dconsts.AMPHORA_NAMESPACE)"},{"line_number":401,"context_line":"            ip_advertisement.send_ip_advertisement("},{"line_number":402,"context_line":"                interface, vip, net_ns\u003dconsts.AMPHORA_NAMESPACE)"},{"line_number":403,"context_line":"    except Exception as e:"},{"line_number":404,"context_line":"        LOG.debug(\u0027Send VIP advertisement failed due to :%s. \u0027"},{"line_number":405,"context_line":"                  \u0027This amphora may not be the MASTER. Ignoring.\u0027, str(e))"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_cfc9f325","line":402,"in_reply_to":"ff570b3c_e570720b","updated":"2020-05-28 21:49:56.000000000","message":"This is an \"optimization\" in that if it fails, there may be a slightly longer outage time on standalone failover. I could add an additional try/catch block here inside the vip iterator, but seems slightly over kill. Really the important part here is that if this a-d-v-e-r-t-i-s-m-e-n-t (don\u0027t want to block this comment, grin) fails for some strange reason, we don\u0027t want to abort the failover.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"octavia/amphorae/backends/utils/ip_advertisement.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fdaf164291149557bd76d58fd7b5120a2ff6981c","unresolved":false,"context_lines":[{"line_number":179,"context_line":"            LOG.error(\u0027Unknown IP version for address: \"%s\". Skipping\u0027,"},{"line_number":180,"context_line":"                      ip_address)"},{"line_number":181,"context_line":"    except Exception as e:"},{"line_number":182,"context_line":"        LOG.error(\u0027Unknown IP version for address: \"%s\", error: %s. Skipping\u0027,"},{"line_number":183,"context_line":"                  ip_address, str(e))"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_c04f0068","line":182,"updated":"2020-05-28 22:40:36.000000000","message":"Actually, in this case the failure probably wasn\u0027t due to the IP version, so the string could be changed.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"}],"octavia/amphorae/backends/utils/network_utils.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    try:"},{"line_number":32,"context_line":"        normalized_addr \u003d ipaddress.ip_address(ip_address).compressed"},{"line_number":33,"context_line":"    except ValueError:"},{"line_number":34,"context_line":"        raise exceptions.InvalidIPAddress(ip_addr\u003dip_address)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    for addr in rtnl_api.get_addr(address\u003dip_address):"},{"line_number":37,"context_line":"        # Save the interface index as IPv6 records don\u0027t list a textual"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_a5595a5c","line":34,"updated":"2020-05-27 20:37:31.000000000","message":"I don\u0027t know where else this is called from except below, but it seems like this could be in the caller so we fail early without the pyroute2 call at all.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    try:"},{"line_number":32,"context_line":"        normalized_addr \u003d ipaddress.ip_address(ip_address).compressed"},{"line_number":33,"context_line":"    except ValueError:"},{"line_number":34,"context_line":"        raise exceptions.InvalidIPAddress(ip_addr\u003dip_address)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    for addr in rtnl_api.get_addr(address\u003dip_address):"},{"line_number":37,"context_line":"        # Save the interface index as IPv6 records don\u0027t list a textual"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_cf65731f","line":34,"in_reply_to":"ff570b3c_a5595a5c","updated":"2020-05-28 21:49:56.000000000","message":"Have you heard of software gold plating? lol\nYes, this is a private method, so a fair comment but a bit of an optimization for the exception case. Moving.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    :raises octavia.common.exceptions.NotFound: No interface was found."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    if net_ns:"},{"line_number":76,"context_line":"        with pyroute2.NetNS(net_ns) as rtnl_api:"},{"line_number":77,"context_line":"            interface \u003d _find_interface(ip_address, rtnl_api)"},{"line_number":78,"context_line":"    else:"},{"line_number":79,"context_line":"        with pyroute2.IPRoute() as rtnl_api:"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_454b1e86","line":76,"updated":"2020-05-27 20:37:31.000000000","message":"One of the side-effects of this is that if the namespace didn\u0027t exist on the system, it will be created.  Passing flags\u003d0 will not do that but have the consequence of a different type of failure when _find_interface() is called.  Just wanted to make sure that was known.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    :raises octavia.common.exceptions.NotFound: No interface was found."},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    if net_ns:"},{"line_number":76,"context_line":"        with pyroute2.NetNS(net_ns) as rtnl_api:"},{"line_number":77,"context_line":"            interface \u003d _find_interface(ip_address, rtnl_api)"},{"line_number":78,"context_line":"    else:"},{"line_number":79,"context_line":"        with pyroute2.IPRoute() as rtnl_api:"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_4ffe8338","line":76,"in_reply_to":"ff570b3c_454b1e86","updated":"2020-05-28 21:49:56.000000000","message":"Yes, everything is \"namespace already exists\" safe. We also have instance reboot recovery code outside the agent that can rebuild the namespace prior to the agent starting. Everything in our code should safely handle the netns already existing.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"octavia/amphorae/drivers/haproxy/rest_api_driver.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        # See how many non-UDP listeners we have left"},{"line_number":357,"context_line":"        non_udp_listener_count \u003d len(["},{"line_number":358,"context_line":"            1 for l in listener.load_balancer.listeners"},{"line_number":359,"context_line":"            if l.protocol !\u003d consts.PROTOCOL_UDP])"},{"line_number":360,"context_line":"        if non_udp_listener_count \u003e 0:"},{"line_number":361,"context_line":"            # We have other listeners, so just update is fine."}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_c42a868e","line":358,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"}],"octavia/amphorae/drivers/keepalived/vrrp_rest_driver.py":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # The Mixed class must define a self.client object for the"},{"line_number":30,"context_line":"        # AmphoraApiClient"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def update_vrrp_conf(self, loadbalancer, amphorae_network_config, amphora,"},{"line_number":33,"context_line":"                         timeout_dict\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Update amphorae of the loadbalancer with a new VRRP configuration"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_47f93f7e","line":32,"updated":"2020-06-09 16:33:32.000000000","message":"Need to update method signature in VRRPDriverMixin and in NoopAmphoraLoadBalancerDriver.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # The Mixed class must define a self.client object for the"},{"line_number":30,"context_line":"        # AmphoraApiClient"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def update_vrrp_conf(self, loadbalancer, amphorae_network_config, amphora,"},{"line_number":33,"context_line":"                         timeout_dict\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Update amphorae of the loadbalancer with a new VRRP configuration"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_a7649b4a","line":32,"range":{"start_line":32,"start_character":45,"end_line":32,"end_character":68},"updated":"2020-06-09 16:33:32.000000000","message":"amphorae_network_config can be dropped","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # The Mixed class must define a self.client object for the"},{"line_number":30,"context_line":"        # AmphoraApiClient"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def update_vrrp_conf(self, loadbalancer, amphorae_network_config, amphora,"},{"line_number":33,"context_line":"                         timeout_dict\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Update amphorae of the loadbalancer with a new VRRP configuration"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_8c6bcc83","line":32,"in_reply_to":"ff570b3c_47f93f7e","updated":"2020-06-09 23:15:09.000000000","message":"Just slightly out of date.... sigh","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        # The Mixed class must define a self.client object for the"},{"line_number":30,"context_line":"        # AmphoraApiClient"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def update_vrrp_conf(self, loadbalancer, amphorae_network_config, amphora,"},{"line_number":33,"context_line":"                         timeout_dict\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Update amphorae of the loadbalancer with a new VRRP configuration"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_ac07b0c9","line":32,"range":{"start_line":32,"start_character":45,"end_line":32,"end_character":68},"in_reply_to":"ff570b3c_a7649b4a","updated":"2020-06-09 23:15:09.000000000","message":"I don\u0027t think so, see my comment below.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def update_vrrp_conf(self, loadbalancer, amphorae_network_config, amphora,"},{"line_number":33,"context_line":"                         timeout_dict\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Update amphorae of the loadbalancer with a new VRRP configuration"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param loadbalancer: loadbalancer object"},{"line_number":37,"context_line":"        :param amphorae_network_config: amphorae network configurations"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_27224b02","line":34,"range":{"start_line":34,"start_character":18,"end_line":34,"end_character":26},"updated":"2020-06-09 16:33:32.000000000","message":"s/amphorae/amphora/","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def update_vrrp_conf(self, loadbalancer, amphorae_network_config, amphora,"},{"line_number":33,"context_line":"                         timeout_dict\u003dNone):"},{"line_number":34,"context_line":"        \"\"\"Update amphorae of the loadbalancer with a new VRRP configuration"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param loadbalancer: loadbalancer object"},{"line_number":37,"context_line":"        :param amphorae_network_config: amphorae network configurations"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_6c4f5834","line":34,"range":{"start_line":34,"start_character":18,"end_line":34,"end_character":26},"in_reply_to":"ff570b3c_27224b02","updated":"2020-06-09 23:15:09.000000000","message":"Done","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"\"\"Update amphorae of the loadbalancer with a new VRRP configuration"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param loadbalancer: loadbalancer object"},{"line_number":37,"context_line":"        :param amphorae_network_config: amphorae network configurations"},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        if amphora.status !\u003d constants.AMPHORA_ALLOCATED:"},{"line_number":40,"context_line":"            LOG.debug(\u0027update_vrrp_conf called for un-allocated amphora %s. \u0027"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_e785f3d0","line":37,"updated":"2020-06-09 16:33:32.000000000","message":"add \u0027amphora\u0027 and \u0027timeout_dict\u0027 to docstring","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        \"\"\"Update amphorae of the loadbalancer with a new VRRP configuration"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        :param loadbalancer: loadbalancer object"},{"line_number":37,"context_line":"        :param amphorae_network_config: amphorae network configurations"},{"line_number":38,"context_line":"        \"\"\""},{"line_number":39,"context_line":"        if amphora.status !\u003d constants.AMPHORA_ALLOCATED:"},{"line_number":40,"context_line":"            LOG.debug(\u0027update_vrrp_conf called for un-allocated amphora %s. \u0027"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_8c52acdd","line":37,"in_reply_to":"ff570b3c_e785f3d0","updated":"2020-06-09 23:15:09.000000000","message":"Done","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        LOG.debug(\"Update amphora %s VRRP configuration.\", amphora.id)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        self._populate_amphora_api_version(amphora)"},{"line_number":49,"context_line":"        # Get the VIP subnet prefix for the amphora"},{"line_number":50,"context_line":"        # For amphorav2 amphorae_network_config will be list of dicts"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            vip_cidr \u003d amphorae_network_config[amphora.id].vip_subnet.cidr"},{"line_number":53,"context_line":"        except AttributeError:"},{"line_number":54,"context_line":"            vip_cidr \u003d amphorae_network_config[amphora.id]["},{"line_number":55,"context_line":"                constants.VIP_SUBNET][constants.CIDR]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # Generate Keepalived configuration from loadbalancer object"},{"line_number":58,"context_line":"        config \u003d templater.build_keepalived_config("}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_c2fedd03","line":55,"range":{"start_line":49,"start_character":8,"end_line":55,"end_character":53},"updated":"2020-06-09 16:33:32.000000000","message":"vip_cidr \u003d amphora.vip_subnet.cidr","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        LOG.debug(\"Update amphora %s VRRP configuration.\", amphora.id)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        self._populate_amphora_api_version(amphora)"},{"line_number":49,"context_line":"        # Get the VIP subnet prefix for the amphora"},{"line_number":50,"context_line":"        # For amphorav2 amphorae_network_config will be list of dicts"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            vip_cidr \u003d amphorae_network_config[amphora.id].vip_subnet.cidr"},{"line_number":53,"context_line":"        except AttributeError:"},{"line_number":54,"context_line":"            vip_cidr \u003d amphorae_network_config[amphora.id]["},{"line_number":55,"context_line":"                constants.VIP_SUBNET][constants.CIDR]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # Generate Keepalived configuration from loadbalancer object"},{"line_number":58,"context_line":"        config \u003d templater.build_keepalived_config("}],"source_content_type":"text/x-python","patch_set":41,"id":"bf51134e_02196b78","line":55,"range":{"start_line":49,"start_character":8,"end_line":55,"end_character":53},"in_reply_to":"ff570b3c_5122efbb","updated":"2020-06-15 18:38:12.000000000","message":"Sorry, my bad.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        LOG.debug(\"Update amphora %s VRRP configuration.\", amphora.id)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        self._populate_amphora_api_version(amphora)"},{"line_number":49,"context_line":"        # Get the VIP subnet prefix for the amphora"},{"line_number":50,"context_line":"        # For amphorav2 amphorae_network_config will be list of dicts"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            vip_cidr \u003d amphorae_network_config[amphora.id].vip_subnet.cidr"},{"line_number":53,"context_line":"        except AttributeError:"},{"line_number":54,"context_line":"            vip_cidr \u003d amphorae_network_config[amphora.id]["},{"line_number":55,"context_line":"                constants.VIP_SUBNET][constants.CIDR]"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # Generate Keepalived configuration from loadbalancer object"},{"line_number":58,"context_line":"        config \u003d templater.build_keepalived_config("}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_5122efbb","line":55,"range":{"start_line":49,"start_character":8,"end_line":55,"end_character":53},"in_reply_to":"ff570b3c_c2fedd03","updated":"2020-06-09 23:15:09.000000000","message":"Where do you see vip_subnet on an amphora object?\nAm I missing something?\nhttps://github.com/openstack/octavia/blob/master/octavia/common/data_models.py#L556","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            loadbalancer, amphora, vip_cidr)"},{"line_number":60,"context_line":"        self.clients[amphora.api_version].upload_vrrp_config(amphora, config)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def stop_vrrp_service(self, loadbalancer):"},{"line_number":63,"context_line":"        \"\"\"Stop the vrrp services running on the loadbalancer\u0027s amphorae"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        :param loadbalancer: loadbalancer object"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_62b3914e","line":62,"updated":"2020-06-09 16:33:32.000000000","message":"I was wondering why this method has not been touched. Seems it\u0027s called in AmphoraVRRPStop but this task is not part of any flow. Cleanup?","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            loadbalancer, amphora, vip_cidr)"},{"line_number":60,"context_line":"        self.clients[amphora.api_version].upload_vrrp_config(amphora, config)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def stop_vrrp_service(self, loadbalancer):"},{"line_number":63,"context_line":"        \"\"\"Stop the vrrp services running on the loadbalancer\u0027s amphorae"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        :param loadbalancer: loadbalancer object"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_0de053cc","line":62,"in_reply_to":"ff570b3c_4cf6d4da","updated":"2020-06-15 18:38:12.000000000","message":"Sure","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            loadbalancer, amphora, vip_cidr)"},{"line_number":60,"context_line":"        self.clients[amphora.api_version].upload_vrrp_config(amphora, config)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def stop_vrrp_service(self, loadbalancer):"},{"line_number":63,"context_line":"        \"\"\"Stop the vrrp services running on the loadbalancer\u0027s amphorae"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        :param loadbalancer: loadbalancer object"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_4cf6d4da","line":62,"in_reply_to":"ff570b3c_62b3914e","updated":"2020-06-09 23:15:09.000000000","message":"Maybe in a followup? If I do that it will make the patch even larger.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            self._populate_amphora_api_version(amp)"},{"line_number":75,"context_line":"            self.clients[amp.api_version].stop_vrrp(amp)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def start_vrrp_service(self, amphora, timeout_dict\u003dNone):"},{"line_number":78,"context_line":"        \"\"\"Start the VRRP services on an amphorae."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        :param amphora: amphora object"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_87f3579e","line":77,"updated":"2020-06-09 16:33:32.000000000","message":"ditto: method signature","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            self._populate_amphora_api_version(amp)"},{"line_number":75,"context_line":"            self.clients[amp.api_version].stop_vrrp(amp)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def start_vrrp_service(self, amphora, timeout_dict\u003dNone):"},{"line_number":78,"context_line":"        \"\"\"Start the VRRP services on an amphorae."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        :param amphora: amphora object"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_ac3050a0","line":77,"in_reply_to":"ff570b3c_87f3579e","updated":"2020-06-09 23:15:09.000000000","message":"Done","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.clients[amphora.api_version].start_vrrp(amphora,"},{"line_number":95,"context_line":"                                                     timeout_dict\u003dtimeout_dict)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def reload_vrrp_service(self, loadbalancer):"},{"line_number":98,"context_line":"        \"\"\"Reload the VRRP services of all amphorae of the loadbalancer"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        :param loadbalancer: loadbalancer object"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_022295a4","line":97,"updated":"2020-06-09 16:33:32.000000000","message":"Similar to comment in stop method, method not called anywhere? Cleanup?","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.clients[amphora.api_version].start_vrrp(amphora,"},{"line_number":95,"context_line":"                                                     timeout_dict\u003dtimeout_dict)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def reload_vrrp_service(self, loadbalancer):"},{"line_number":98,"context_line":"        \"\"\"Reload the VRRP services of all amphorae of the loadbalancer"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        :param loadbalancer: loadbalancer object"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_2cf3a0e9","line":97,"in_reply_to":"ff570b3c_022295a4","updated":"2020-06-09 23:15:09.000000000","message":"Maybe in a followup? If I do that it will make the patch even larger.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.clients[amphora.api_version].start_vrrp(amphora,"},{"line_number":95,"context_line":"                                                     timeout_dict\u003dtimeout_dict)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def reload_vrrp_service(self, loadbalancer):"},{"line_number":98,"context_line":"        \"\"\"Reload the VRRP services of all amphorae of the loadbalancer"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        :param loadbalancer: loadbalancer object"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_4dea4bac","line":97,"in_reply_to":"ff570b3c_2cf3a0e9","updated":"2020-06-15 18:38:12.000000000","message":"Yup.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"}],"octavia/amphorae/drivers/noop_driver/driver.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def update(self, loadbalancer):"},{"line_number":50,"context_line":"        LOG.debug(\"Amphora %s no-op, update listener %s, vip %s\","},{"line_number":51,"context_line":"                  self.__class__.__name__,"},{"line_number":52,"context_line":"                  tuple(l.protocol_port for l in loadbalancer.listeners),"},{"line_number":53,"context_line":"                  loadbalancer.vip.ip_address)"},{"line_number":54,"context_line":"        self.amphoraconfig["},{"line_number":55,"context_line":"            (tuple(l.protocol_port for l in loadbalancer.listeners),"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_a425d2c4","line":52,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                  tuple(l.protocol_port for l in loadbalancer.listeners),"},{"line_number":53,"context_line":"                  loadbalancer.vip.ip_address)"},{"line_number":54,"context_line":"        self.amphoraconfig["},{"line_number":55,"context_line":"            (tuple(l.protocol_port for l in loadbalancer.listeners),"},{"line_number":56,"context_line":"             loadbalancer.vip.ip_address)] \u003d (loadbalancer.listeners,"},{"line_number":57,"context_line":"                                              loadbalancer.vip,"},{"line_number":58,"context_line":"                                              \u0027active\u0027)"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_84208eb2","line":55,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"}],"octavia/api/drivers/utils.py":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        new_vip_dict[\u0027vip_subnet_id\u0027] \u003d vip_dict[\u0027subnet_id\u0027]"},{"line_number":546,"context_line":"    if \u0027qos_policy_id\u0027 in vip_dict:"},{"line_number":547,"context_line":"        new_vip_dict[\u0027vip_qos_policy_id\u0027] \u003d vip_dict[\u0027qos_policy_id\u0027]"},{"line_number":548,"context_line":"    if constants.OCTAVIA_OWNED in vip_dict:"},{"line_number":549,"context_line":"        new_vip_dict[constants.OCTAVIA_OWNED] \u003d vip_dict["},{"line_number":550,"context_line":"            constants.OCTAVIA_OWNED]"},{"line_number":551,"context_line":"    return new_vip_dict"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_7d80568c","line":548,"updated":"2020-06-09 16:33:32.000000000","message":"\u0027octavia_owned\u0027 is not defined in the vip data model in octavia-lib.\n\nhttps://github.com/openstack/octavia-lib/blob/6bec133036498ca76969905b69c18892fccd79ec/octavia_lib/api/drivers/data_models.py#L285\n\nhttps://docs.openstack.org/octavia/latest/contributor/guides/providers.html#octavia-provider-driver-api","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        new_vip_dict[\u0027vip_subnet_id\u0027] \u003d vip_dict[\u0027subnet_id\u0027]"},{"line_number":546,"context_line":"    if \u0027qos_policy_id\u0027 in vip_dict:"},{"line_number":547,"context_line":"        new_vip_dict[\u0027vip_qos_policy_id\u0027] \u003d vip_dict[\u0027qos_policy_id\u0027]"},{"line_number":548,"context_line":"    if constants.OCTAVIA_OWNED in vip_dict:"},{"line_number":549,"context_line":"        new_vip_dict[constants.OCTAVIA_OWNED] \u003d vip_dict["},{"line_number":550,"context_line":"            constants.OCTAVIA_OWNED]"},{"line_number":551,"context_line":"    return new_vip_dict"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_ecad289c","line":548,"in_reply_to":"ff570b3c_7d80568c","updated":"2020-06-09 23:15:09.000000000","message":"Yes, this is a bit of a hack. No driver should ever claim that other than the octavia driver.\nIt is magically inserted in allowed_address_pairs.py line 525.\nProvider drivers will never include that in their dictionaries, so it is transparent to them.\nBasically if the API or the amphora driver create the port, it is octavia owned, otherwise it is not.\nNasty little challenge in api/v2/controllers/load_balancer.py ~ line 472","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        vip_obj.subnet_id \u003d vip_dictionary[\u0027vip_subnet_id\u0027]"},{"line_number":564,"context_line":"    if \u0027vip_qos_policy_id\u0027 in vip_dictionary:"},{"line_number":565,"context_line":"        vip_obj.qos_policy_id \u003d vip_dictionary[\u0027vip_qos_policy_id\u0027]"},{"line_number":566,"context_line":"    if constants.OCTAVIA_OWNED in vip_dictionary:"},{"line_number":567,"context_line":"        vip_obj.octavia_owned \u003d vip_dictionary[constants.OCTAVIA_OWNED]"},{"line_number":568,"context_line":"    return vip_obj"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_98657820","line":566,"updated":"2020-06-09 16:33:32.000000000","message":"ditto","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":563,"context_line":"        vip_obj.subnet_id \u003d vip_dictionary[\u0027vip_subnet_id\u0027]"},{"line_number":564,"context_line":"    if \u0027vip_qos_policy_id\u0027 in vip_dictionary:"},{"line_number":565,"context_line":"        vip_obj.qos_policy_id \u003d vip_dictionary[\u0027vip_qos_policy_id\u0027]"},{"line_number":566,"context_line":"    if constants.OCTAVIA_OWNED in vip_dictionary:"},{"line_number":567,"context_line":"        vip_obj.octavia_owned \u003d vip_dictionary[constants.OCTAVIA_OWNED]"},{"line_number":568,"context_line":"    return vip_obj"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_2c8f202f","line":566,"in_reply_to":"ff570b3c_98657820","updated":"2020-06-09 23:15:09.000000000","message":"see above comment","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"}],"octavia/api/v2/controllers/load_balancer.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":531,"context_line":"        pools_required \u003d set()"},{"line_number":532,"context_line":"        # Look through listeners and find any extra pools, and move them to the"},{"line_number":533,"context_line":"        # top level so they are created first."},{"line_number":534,"context_line":"        for l in listeners:"},{"line_number":535,"context_line":"            default_pool \u003d l.get(\u0027default_pool\u0027)"},{"line_number":536,"context_line":"            pool_name \u003d ("},{"line_number":537,"context_line":"                default_pool.get(\u0027name\u0027) if default_pool else None)"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_04359ef7","line":534,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":617,"context_line":""},{"line_number":618,"context_line":"        # Now create all of the listeners"},{"line_number":619,"context_line":"        new_lists \u003d []"},{"line_number":620,"context_line":"        for l in listeners:"},{"line_number":621,"context_line":"            default_pool \u003d l.pop(\u0027default_pool\u0027, None)"},{"line_number":622,"context_line":"            # If there\u0027s a default pool, replace it with the ID"},{"line_number":623,"context_line":"            if default_pool:"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_643c5ae2","line":620,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"}],"octavia/common/config.py":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"6bd471d84e53b9f19602d537b7ac7d6c75c7de77","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                      \u0027seconds for active amphora.\u0027)),"},{"line_number":308,"context_line":"    cfg.IntOpt(\u0027failover_connection_max_retries\u0027,"},{"line_number":309,"context_line":"               default\u003d2,"},{"line_number":310,"context_line":"               help\u003d_(\u0027Retry threshold for connecting to an amphora in \u0027"},{"line_number":311,"context_line":"                      \u0027failover.\u0027)),"},{"line_number":312,"context_line":"    cfg.IntOpt(\u0027failover_connection_rety_interval\u0027,"},{"line_number":313,"context_line":"               default\u003d5,"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_67a57c04","line":310,"updated":"2020-05-28 15:14:35.000000000","message":"Time unit is missing (seconds)","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                      \u0027seconds for active amphora.\u0027)),"},{"line_number":308,"context_line":"    cfg.IntOpt(\u0027failover_connection_max_retries\u0027,"},{"line_number":309,"context_line":"               default\u003d2,"},{"line_number":310,"context_line":"               help\u003d_(\u0027Retry threshold for connecting to an amphora in \u0027"},{"line_number":311,"context_line":"                      \u0027failover.\u0027)),"},{"line_number":312,"context_line":"    cfg.IntOpt(\u0027failover_connection_rety_interval\u0027,"},{"line_number":313,"context_line":"               default\u003d5,"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_520d8a33","line":310,"in_reply_to":"ff570b3c_67a57c04","updated":"2020-05-28 21:49:56.000000000","message":"This is not a time based setting, it is the number of retries that should be attempted.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":309,"context_line":"               default\u003d2,"},{"line_number":310,"context_line":"               help\u003d_(\u0027Retry threshold for connecting to an amphora in \u0027"},{"line_number":311,"context_line":"                      \u0027failover.\u0027)),"},{"line_number":312,"context_line":"    cfg.IntOpt(\u0027failover_connection_rety_interval\u0027,"},{"line_number":313,"context_line":"               default\u003d5,"},{"line_number":314,"context_line":"               help\u003d_(\u0027Retry timeout between connection attempts in \u0027"},{"line_number":315,"context_line":"                      \u0027seconds for amphora in failover.\u0027)),"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_f73ae9ca","line":312,"range":{"start_line":312,"start_character":36,"end_line":312,"end_character":40},"updated":"2020-05-27 20:37:31.000000000","message":"s/retry\n\nI haven\u0027t got to the tests yet but strange one of them didn\u0027t catch this.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":309,"context_line":"               default\u003d2,"},{"line_number":310,"context_line":"               help\u003d_(\u0027Retry threshold for connecting to an amphora in \u0027"},{"line_number":311,"context_line":"                      \u0027failover.\u0027)),"},{"line_number":312,"context_line":"    cfg.IntOpt(\u0027failover_connection_rety_interval\u0027,"},{"line_number":313,"context_line":"               default\u003d5,"},{"line_number":314,"context_line":"               help\u003d_(\u0027Retry timeout between connection attempts in \u0027"},{"line_number":315,"context_line":"                      \u0027seconds for amphora in failover.\u0027)),"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_52362ae9","line":312,"range":{"start_line":312,"start_character":36,"end_line":312,"end_character":40},"in_reply_to":"ff570b3c_f73ae9ca","updated":"2020-05-28 21:49:56.000000000","message":"Done, it\u0027s likely because we use the oslo config fixture in the tests to assure the test parameters.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"octavia/common/constants.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":386,"context_line":"POOL_CHILD_COUNT \u003d \u0027pool_child_count\u0027"},{"line_number":387,"context_line":"POOL_ID \u003d \u0027pool_id\u0027"},{"line_number":388,"context_line":"POOL_UPDATES \u003d \u0027pool_updates\u0027"},{"line_number":389,"context_line":"PROJECT_ID \u003d \u0027project_id\u0027"},{"line_number":390,"context_line":"PORT \u003d \u0027port\u0027"},{"line_number":391,"context_line":"PORT_ID \u003d \u0027port_id\u0027"},{"line_number":392,"context_line":"PORTS \u003d \u0027ports\u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_97728dac","line":389,"updated":"2020-05-27 20:37:31.000000000","message":"Should be after PORTS.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":386,"context_line":"POOL_CHILD_COUNT \u003d \u0027pool_child_count\u0027"},{"line_number":387,"context_line":"POOL_ID \u003d \u0027pool_id\u0027"},{"line_number":388,"context_line":"POOL_UPDATES \u003d \u0027pool_updates\u0027"},{"line_number":389,"context_line":"PROJECT_ID \u003d \u0027project_id\u0027"},{"line_number":390,"context_line":"PORT \u003d \u0027port\u0027"},{"line_number":391,"context_line":"PORT_ID \u003d \u0027port_id\u0027"},{"line_number":392,"context_line":"PORTS \u003d \u0027ports\u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_32573605","line":389,"in_reply_to":"ff570b3c_97728dac","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":540,"context_line":"AMPHORA_POST_VIP_PLUG \u003d \u0027amphora-post-vip-plug\u0027"},{"line_number":541,"context_line":"AMPHORA_RELOAD_LISTENER \u003d \u0027amphora-reload-listener\u0027"},{"line_number":542,"context_line":"AMPHORA_TO_ERROR_ON_REVERT \u003d \u0027amphora-to-error-on-revert\u0027"},{"line_number":543,"context_line":"AMPHORAE_POST_NETWORK_PLUG \u003d \u0027amphora-post-network-plug\u0027"},{"line_number":544,"context_line":"ATTACH_PORT \u003d \u0027attach-port\u0027"},{"line_number":545,"context_line":"CALCULATE_AMPHORA_DELTA \u003d \u0027calculate-amphora-delta\u0027"},{"line_number":546,"context_line":"CREATE_VIP_BASE_PORT \u003d \u0027create-vip-base-port\u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_37b8e128","line":543,"range":{"start_line":543,"start_character":0,"end_line":543,"end_character":8},"updated":"2020-05-27 20:37:31.000000000","message":"Why the E here?  And doesn\u0027t match the string","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":540,"context_line":"AMPHORA_POST_VIP_PLUG \u003d \u0027amphora-post-vip-plug\u0027"},{"line_number":541,"context_line":"AMPHORA_RELOAD_LISTENER \u003d \u0027amphora-reload-listener\u0027"},{"line_number":542,"context_line":"AMPHORA_TO_ERROR_ON_REVERT \u003d \u0027amphora-to-error-on-revert\u0027"},{"line_number":543,"context_line":"AMPHORAE_POST_NETWORK_PLUG \u003d \u0027amphora-post-network-plug\u0027"},{"line_number":544,"context_line":"ATTACH_PORT \u003d \u0027attach-port\u0027"},{"line_number":545,"context_line":"CALCULATE_AMPHORA_DELTA \u003d \u0027calculate-amphora-delta\u0027"},{"line_number":546,"context_line":"CREATE_VIP_BASE_PORT \u003d \u0027create-vip-base-port\u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_f275be99","line":543,"range":{"start_line":543,"start_character":0,"end_line":543,"end_character":8},"in_reply_to":"ff570b3c_37b8e128","updated":"2020-05-28 21:49:56.000000000","message":"Yes, the string should be amphorae here.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":548,"context_line":"DELETE_PORT \u003d \u0027delete-port\u0027"},{"line_number":549,"context_line":"DISABLE_AMP_HEALTH_MONITORING \u003d \u0027disable-amphora-health-monitoring\u0027"},{"line_number":550,"context_line":"GET_AMPHORA_NETWORK_CONFIGS_BY_ID \u003d \u0027get-amphora-network-configs-by-id\u0027"},{"line_number":551,"context_line":"GET_AMPHORAE_FROM_LB \u003d \u0027get-amphorae-from-lb\u0027"},{"line_number":552,"context_line":"HANDLE_NETWORK_DELTA \u003d \u0027handle-network-delta\u0027"},{"line_number":553,"context_line":"MARK_AMPHORA_DELETED \u003d \u0027mark-amphora-deleted\u0027"},{"line_number":554,"context_line":"MARK_AMPHORA_PENDING_DELETE \u003d \u0027mark-amphora-pending-delete\u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_b77d1170","line":551,"range":{"start_line":551,"start_character":4,"end_line":551,"end_character":12},"updated":"2020-05-27 20:37:31.000000000","message":"E here as well, but does match the string, should be consistent and not have it IMO","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":548,"context_line":"DELETE_PORT \u003d \u0027delete-port\u0027"},{"line_number":549,"context_line":"DISABLE_AMP_HEALTH_MONITORING \u003d \u0027disable-amphora-health-monitoring\u0027"},{"line_number":550,"context_line":"GET_AMPHORA_NETWORK_CONFIGS_BY_ID \u003d \u0027get-amphora-network-configs-by-id\u0027"},{"line_number":551,"context_line":"GET_AMPHORAE_FROM_LB \u003d \u0027get-amphorae-from-lb\u0027"},{"line_number":552,"context_line":"HANDLE_NETWORK_DELTA \u003d \u0027handle-network-delta\u0027"},{"line_number":553,"context_line":"MARK_AMPHORA_DELETED \u003d \u0027mark-amphora-deleted\u0027"},{"line_number":554,"context_line":"MARK_AMPHORA_PENDING_DELETE \u003d \u0027mark-amphora-pending-delete\u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_3270d6a5","line":551,"range":{"start_line":551,"start_character":4,"end_line":551,"end_character":12},"in_reply_to":"ff570b3c_b77d1170","updated":"2020-05-28 21:49:56.000000000","message":"This string looks correct to me.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"octavia/common/utils.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":72,"context_line":"def is_ipv4(ip_address):"},{"line_number":73,"context_line":"    \"\"\"Check if ip address is IPv4 address.\"\"\""},{"line_number":74,"context_line":"    ip \u003d netaddr.IPAddress(ip_address)"},{"line_number":75,"context_line":"    return ip.version \u003d\u003d 4"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def is_ipv6(ip_address):"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_d76d259a","line":75,"updated":"2020-05-27 20:37:31.000000000","message":"Could be:\n\nreturn netaddr.valid_ipv4(ip_address)\n\nAlthough that doesn\u0027t throw an exception if it\u0027s completely invalid.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":72,"context_line":"def is_ipv4(ip_address):"},{"line_number":73,"context_line":"    \"\"\"Check if ip address is IPv4 address.\"\"\""},{"line_number":74,"context_line":"    ip \u003d netaddr.IPAddress(ip_address)"},{"line_number":75,"context_line":"    return ip.version \u003d\u003d 4"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"def is_ipv6(ip_address):"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_b26346dc","line":75,"in_reply_to":"ff570b3c_d76d259a","updated":"2020-05-28 21:49:56.000000000","message":"exceptions are your friend.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":117,"context_line":"def get_vip_security_group_name(loadbalancer_id):"},{"line_number":118,"context_line":"    if loadbalancer_id:"},{"line_number":119,"context_line":"        return constants.VIP_SECURITY_GROUP_PREFIX + loadbalancer_id"},{"line_number":120,"context_line":"    return None"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"def get_compatible_value(value):"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_770419c7","line":120,"updated":"2020-05-27 20:37:31.000000000","message":"None is implied, although pep8 sometimes complains about it","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":117,"context_line":"def get_vip_security_group_name(loadbalancer_id):"},{"line_number":118,"context_line":"    if loadbalancer_id:"},{"line_number":119,"context_line":"        return constants.VIP_SECURITY_GROUP_PREFIX + loadbalancer_id"},{"line_number":120,"context_line":"    return None"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"def get_compatible_value(value):"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_72aecee7","line":120,"in_reply_to":"ff570b3c_770419c7","updated":"2020-05-28 21:49:56.000000000","message":"Yep, this was a pylint thing as I remember, but we may have excluded that now. I think it was all paths must return or something like that. R1708 Maybe?","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"octavia/controller/worker/v1/controller_worker.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"e36a9ab8e393967718da6a04f65265b8ec833627","unresolved":false,"context_lines":[{"line_number":874,"context_line":"                    flavor[constants.LOADBALANCER_TOPOLOGY] \u003d ("},{"line_number":875,"context_line":"                        loadbalancer.topology)"},{"line_number":876,"context_line":"                else:"},{"line_number":877,"context_line":"                    flavor \u003d {constants.LOADBALANCER_TOPOLOGY:"},{"line_number":878,"context_line":"                              loadbalancer.topology}"},{"line_number":879,"context_line":"                if loadbalancer.availability_zone:"},{"line_number":880,"context_line":"                    az_metadata \u003d ("},{"line_number":881,"context_line":"                        self._az_repo.get_availability_zone_metadata_dict("}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_f680388e","line":878,"range":{"start_line":877,"start_character":20,"end_line":878,"end_character":52},"updated":"2020-03-26 13:03:47.000000000","message":"So, now we setup flavor anyway? Previously it can be empty.","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4464acf04320fcd14fa9b9b1d3eda5436be06191","unresolved":false,"context_lines":[{"line_number":874,"context_line":"                    flavor[constants.LOADBALANCER_TOPOLOGY] \u003d ("},{"line_number":875,"context_line":"                        loadbalancer.topology)"},{"line_number":876,"context_line":"                else:"},{"line_number":877,"context_line":"                    flavor \u003d {constants.LOADBALANCER_TOPOLOGY:"},{"line_number":878,"context_line":"                              loadbalancer.topology}"},{"line_number":879,"context_line":"                if loadbalancer.availability_zone:"},{"line_number":880,"context_line":"                    az_metadata \u003d ("},{"line_number":881,"context_line":"                        self._az_repo.get_availability_zone_metadata_dict("}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_dd5dd579","line":878,"range":{"start_line":877,"start_character":20,"end_line":878,"end_character":52},"in_reply_to":"df33271e_f680388e","updated":"2020-04-01 18:27:29.000000000","message":"Well, I\u0027m leveraging the existing flavor code here by injecting the topology into the flavor used for the failover.\nWe already have code that looks for this at amp build time, so why not reuse it. This flavor is not stored in the DB, just the flavor dictionary used by the flow.","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"bcf99709565edd2db8550238ddd32a2100ceccdd","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"                    self._az_repo.get_availability_zone_metadata_dict("},{"line_number":1032,"context_line":"                        db_apis.get_session(), lb.availability_zone))"},{"line_number":1033,"context_line":"            else:"},{"line_number":1034,"context_line":"                stored_params[constants.AVAILABILITY_ZONE] \u003d {}"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"            failover_lb_tf \u003d self._taskflow_load(lb_failover_flow,"},{"line_number":1037,"context_line":"                                                 store\u003dstored_params)"}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_4e31205a","line":1034,"updated":"2020-04-01 04:18:42.000000000","message":"Need to also add SERVER_GROUP_ID if it\u0027s set, see above in the amphora failover section","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4464acf04320fcd14fa9b9b1d3eda5436be06191","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"                    self._az_repo.get_availability_zone_metadata_dict("},{"line_number":1032,"context_line":"                        db_apis.get_session(), lb.availability_zone))"},{"line_number":1033,"context_line":"            else:"},{"line_number":1034,"context_line":"                stored_params[constants.AVAILABILITY_ZONE] \u003d {}"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"            failover_lb_tf \u003d self._taskflow_load(lb_failover_flow,"},{"line_number":1037,"context_line":"                                                 store\u003dstored_params)"}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_bd9731ec","line":1034,"in_reply_to":"df33271e_4e31205a","updated":"2020-04-01 18:27:29.000000000","message":"Done","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"e9c184dda86a7fc739c9a5a513c9b1dadb171984","unresolved":false,"context_lines":[{"line_number":1038,"context_line":"            else:"},{"line_number":1039,"context_line":"                stored_params[constants.AVAILABILITY_ZONE] \u003d {}"},{"line_number":1040,"context_line":""},{"line_number":1041,"context_line":"            if lb.server_group_id:"},{"line_number":1042,"context_line":"                stored_params[constants.SERVER_GROUP_ID] \u003d lb.server_group_id"},{"line_number":1043,"context_line":""},{"line_number":1044,"context_line":"            failover_lb_tf \u003d self._taskflow_load(lb_failover_flow,"}],"source_content_type":"text/x-python","patch_set":21,"id":"df33271e_00a7cd0c","line":1041,"updated":"2020-04-01 21:57:50.000000000","message":"This can be None but still end up here. Just pass this no matter what and remove the conditionals IMO.","commit_id":"be87e2eb362fc1d40cd2b4cfb4d9f685e52ec4de"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"dbc644a55c7f8dde6d25fcec4de578d3f1de1bb5","unresolved":false,"context_lines":[{"line_number":890,"context_line":"                             constants.FLAVOR: flavor,"},{"line_number":891,"context_line":"                             constants.LOADBALANCER: loadbalancer,"},{"line_number":892,"context_line":"                             constants.SERVER_GROUP_ID: getattr("},{"line_number":893,"context_line":"                                 loadbalancer, \u0027server_group_id\u0027, None),"},{"line_number":894,"context_line":"                             constants.LOADBALANCER_ID: lb_id,"},{"line_number":895,"context_line":"                             constants.VIP: vip}"},{"line_number":896,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_c38faf27","line":893,"updated":"2020-04-01 23:38:20.000000000","message":"I don\u0027t THINK this needs to be a getattr? The LB object should always have the same attributes, right? Even if it\u0027s None.","commit_id":"f39933bb897a2462cd337cff1e0eaead8f5cd03d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"dbc644a55c7f8dde6d25fcec4de578d3f1de1bb5","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"            stored_params \u003d {constants.LOADBALANCER: lb,"},{"line_number":1028,"context_line":"                             constants.BUILD_TYPE_PRIORITY:"},{"line_number":1029,"context_line":"                                 constants.LB_CREATE_FAILOVER_PRIORITY,"},{"line_number":1030,"context_line":"                             constants.SERVER_GROUP_ID: getattr("},{"line_number":1031,"context_line":"                                 lb, \u0027server_group_id\u0027, None),"},{"line_number":1032,"context_line":"                             constants.LOADBALANCER_ID: lb.id,"},{"line_number":1033,"context_line":"                             constants.FLAVOR: flavor}"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_2383fb05","line":1030,"updated":"2020-04-01 23:38:20.000000000","message":"same","commit_id":"f39933bb897a2462cd337cff1e0eaead8f5cd03d"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                          \u0027there is no record of this amphora in the \u0027"},{"line_number":840,"context_line":"                          \u0027database. Check that the [house_keeping] \u0027"},{"line_number":841,"context_line":"                          \u0027amphora_expiry_age configuration setting is not \u0027"},{"line_number":842,"context_line":"                          \u0027too short. Skipping Failover.\u0027, amphora_id)"},{"line_number":843,"context_line":"                raise exceptions.NotFound(resource\u003dconstants.AMPHORA,"},{"line_number":844,"context_line":"                                          id\u003damphora_id)"},{"line_number":845,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_3702a1b5","line":842,"range":{"start_line":842,"start_character":47,"end_line":842,"end_character":48},"updated":"2020-05-27 20:37:31.000000000","message":"nit: s/f","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":839,"context_line":"                          \u0027there is no record of this amphora in the \u0027"},{"line_number":840,"context_line":"                          \u0027database. Check that the [house_keeping] \u0027"},{"line_number":841,"context_line":"                          \u0027amphora_expiry_age configuration setting is not \u0027"},{"line_number":842,"context_line":"                          \u0027too short. Skipping Failover.\u0027, amphora_id)"},{"line_number":843,"context_line":"                raise exceptions.NotFound(resource\u003dconstants.AMPHORA,"},{"line_number":844,"context_line":"                                          id\u003damphora_id)"},{"line_number":845,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_92e1e22d","line":842,"range":{"start_line":842,"start_character":47,"end_line":842,"end_character":48},"in_reply_to":"ff570b3c_3702a1b5","updated":"2020-05-28 21:49:56.000000000","message":"You didn\u0027t know I trademarked \"Skipping Failover\"? grin\nfixed.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"6bd471d84e53b9f19602d537b7ac7d6c75c7de77","unresolved":false,"context_lines":[{"line_number":949,"context_line":"                constants.CONN_MAX_RETRIES:"},{"line_number":950,"context_line":"                    CONF.haproxy_amphora.failover_connection_max_retries,"},{"line_number":951,"context_line":"                constants.CONN_RETRY_INTERVAL:"},{"line_number":952,"context_line":"                    CONF.haproxy_amphora.failover_connection_rety_interval}"},{"line_number":953,"context_line":"            amps \u003d []"},{"line_number":954,"context_line":"            selected_amp \u003d None"},{"line_number":955,"context_line":"            for amp in load_balancer.amphorae:"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_876410e7","line":952,"range":{"start_line":952,"start_character":41,"end_line":952,"end_character":74},"updated":"2020-05-28 15:14:35.000000000","message":"failover_connection_retry_interval","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":949,"context_line":"                constants.CONN_MAX_RETRIES:"},{"line_number":950,"context_line":"                    CONF.haproxy_amphora.failover_connection_max_retries,"},{"line_number":951,"context_line":"                constants.CONN_RETRY_INTERVAL:"},{"line_number":952,"context_line":"                    CONF.haproxy_amphora.failover_connection_rety_interval}"},{"line_number":953,"context_line":"            amps \u003d []"},{"line_number":954,"context_line":"            selected_amp \u003d None"},{"line_number":955,"context_line":"            for amp in load_balancer.amphorae:"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_f2d13e59","line":952,"range":{"start_line":952,"start_character":41,"end_line":952,"end_character":74},"in_reply_to":"ff570b3c_876410e7","updated":"2020-05-28 21:49:56.000000000","message":"consistently wrong, nice.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":840,"context_line":"                          \u0027database. Check that the [house_keeping] \u0027"},{"line_number":841,"context_line":"                          \u0027amphora_expiry_age configuration setting is not \u0027"},{"line_number":842,"context_line":"                          \u0027too short. Skipping failover.\u0027, amphora_id)"},{"line_number":843,"context_line":"                raise exceptions.NotFound(resource\u003dconstants.AMPHORA,"},{"line_number":844,"context_line":"                                          id\u003damphora_id)"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"            if amphora.status \u003d\u003d constants.DELETED:"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_0a10eb4d","line":843,"range":{"start_line":843,"start_character":33,"end_line":843,"end_character":41},"updated":"2020-06-09 16:33:32.000000000","message":"Per the docstring, this would be AmphoraNotFound. And AmphoraNotFound is in octavia/**network**/base.py??","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":840,"context_line":"                          \u0027database. Check that the [house_keeping] \u0027"},{"line_number":841,"context_line":"                          \u0027amphora_expiry_age configuration setting is not \u0027"},{"line_number":842,"context_line":"                          \u0027too short. Skipping failover.\u0027, amphora_id)"},{"line_number":843,"context_line":"                raise exceptions.NotFound(resource\u003dconstants.AMPHORA,"},{"line_number":844,"context_line":"                                          id\u003damphora_id)"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"            if amphora.status \u003d\u003d constants.DELETED:"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_2c3ba0c8","line":843,"range":{"start_line":843,"start_character":33,"end_line":843,"end_character":41},"in_reply_to":"ff570b3c_0a10eb4d","updated":"2020-06-09 23:15:09.000000000","message":"Fixed the docstring","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":905,"context_line":"                                                   log\u003dLOG):"},{"line_number":906,"context_line":"                failover_amphora_tf.run()"},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"            LOG.info(\"Successfully completed the failover for an amphora: %s\","},{"line_number":909,"context_line":"                     {\"id\": amphora_id,"},{"line_number":910,"context_line":"                      \"load_balancer_id\": lb_id,"},{"line_number":911,"context_line":"                      \"lb_network_ip\": amphora.lb_network_ip,"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_d3018e6c","line":908,"updated":"2020-06-09 16:33:32.000000000","message":"I\u0027m yet not convinced I see how it provides value. In fact, it may just do the opposite of good -- it is misleading. The amphora id, lb_network_ip and compute_id will get new values assigned. But I understand this log message was already in our codebase (https://review.opendev.org/#/c/667316/). Anyway, this is a noop comment.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"39299afc0509890f0da81b7dd3c5b549c408d986","unresolved":false,"context_lines":[{"line_number":905,"context_line":"                                                   log\u003dLOG):"},{"line_number":906,"context_line":"                failover_amphora_tf.run()"},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"            LOG.info(\"Successfully completed the failover for an amphora: %s\","},{"line_number":909,"context_line":"                     {\"id\": amphora_id,"},{"line_number":910,"context_line":"                      \"load_balancer_id\": lb_id,"},{"line_number":911,"context_line":"                      \"lb_network_ip\": amphora.lb_network_ip,"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_2c3600e9","line":908,"in_reply_to":"ff570b3c_d3018e6c","updated":"2020-06-09 23:15:09.000000000","message":"I fully agree and didn\u0027t want this message in the first place. Even worse it includes \"role\" which is super misleading given it is a setting and not a status.","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":957,"context_line":"                    continue"},{"line_number":958,"context_line":"                if selected_amp is None:"},{"line_number":959,"context_line":"                    try:"},{"line_number":960,"context_line":"                        if amphora_driver.get_interface_from_ip("},{"line_number":961,"context_line":"                                amp, load_balancer.vip.ip_address,"},{"line_number":962,"context_line":"                                timeout_dict):"},{"line_number":963,"context_line":"                            # This is a potential ACTIVE, add it to the list"}],"source_content_type":"text/x-python","patch_set":41,"id":"ff570b3c_738fe2cc","line":960,"updated":"2020-06-09 16:33:32.000000000","message":"Nice!","commit_id":"d502d039a248ceee5c9b8686e82920f729f6e5c2"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4a9c0694b97571c04b7ce8dae34e9014f773838b","unresolved":false,"context_lines":[{"line_number":823,"context_line":"    def failover_amphora(self, amphora_id):"},{"line_number":824,"context_line":"        \"\"\"Perform failover operations for an amphora."},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"        Note: This expects the load balancer to already be in"},{"line_number":827,"context_line":"        provisioning_status\u003dPENDING_UPDATE state."},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"        :param amphora_id: ID for amphora to failover"},{"line_number":830,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_e748a188","line":827,"range":{"start_line":826,"start_character":8,"end_line":827,"end_character":49},"updated":"2020-06-10 05:23:15.000000000","message":"I don\u0027t understand the sentence\u0027s mean, maybe due to I am not a native english speaker. You mean that only PENDING_UPDATE load balancer can be failover?","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"57224c55e53349037b5d050b696587b5b1105b23","unresolved":false,"context_lines":[{"line_number":823,"context_line":"    def failover_amphora(self, amphora_id):"},{"line_number":824,"context_line":"        \"\"\"Perform failover operations for an amphora."},{"line_number":825,"context_line":""},{"line_number":826,"context_line":"        Note: This expects the load balancer to already be in"},{"line_number":827,"context_line":"        provisioning_status\u003dPENDING_UPDATE state."},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"        :param amphora_id: ID for amphora to failover"},{"line_number":830,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_750b8d2a","line":827,"range":{"start_line":826,"start_character":8,"end_line":827,"end_character":49},"in_reply_to":"ff570b3c_e748a188","updated":"2020-06-10 19:00:51.000000000","message":"This means that when this method is called, it expects the load balancer to already be in the PENDING_UPDATE state if this amphora is associated to one. Basically that the load balancer should already be locked already.","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"64a9bebc9e5a92fb419cdd2257a19ddb4caf9838","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    def batch_update_members(self, old_member_ids, new_member_ids,"},{"line_number":487,"context_line":"                             updated_members):"},{"line_number":488,"context_line":"        old_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":489,"context_line":"                       for mid in old_member_ids]"},{"line_number":490,"context_line":"        new_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":491,"context_line":"                       for mid in new_member_ids]"},{"line_number":492,"context_line":"        updated_members \u003d ["}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_27558f51","line":489,"updated":"2020-06-16 01:00:15.000000000","message":"pep8: F821 undefined name \u0027RETRY_BACKOFF\u0027","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"64a9bebc9e5a92fb419cdd2257a19ddb4caf9838","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    def batch_update_members(self, old_member_ids, new_member_ids,"},{"line_number":487,"context_line":"                             updated_members):"},{"line_number":488,"context_line":"        old_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":489,"context_line":"                       for mid in old_member_ids]"},{"line_number":490,"context_line":"        new_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":491,"context_line":"                       for mid in new_member_ids]"},{"line_number":492,"context_line":"        updated_members \u003d ["}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_c7601336","line":489,"updated":"2020-06-16 01:00:15.000000000","message":"pep8: F821 undefined name \u0027RETRY_INITIAL_DELAY\u0027","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"64a9bebc9e5a92fb419cdd2257a19ddb4caf9838","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    def batch_update_members(self, old_member_ids, new_member_ids,"},{"line_number":487,"context_line":"                             updated_members):"},{"line_number":488,"context_line":"        old_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":489,"context_line":"                       for mid in old_member_ids]"},{"line_number":490,"context_line":"        new_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":491,"context_line":"                       for mid in new_member_ids]"},{"line_number":492,"context_line":"        updated_members \u003d ["}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_07520b68","line":489,"updated":"2020-06-16 01:00:15.000000000","message":"pep8: F821 undefined name \u0027RETRY_MAX\u0027","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":486,"context_line":"    def batch_update_members(self, old_member_ids, new_member_ids,"},{"line_number":487,"context_line":"                             updated_members):"},{"line_number":488,"context_line":"        old_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":489,"context_line":"                       for mid in old_member_ids]"},{"line_number":490,"context_line":"        new_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":491,"context_line":"                       for mid in new_member_ids]"},{"line_number":492,"context_line":"        updated_members \u003d ["}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_6b9a6963","line":489,"in_reply_to":"bf51134e_07520b68","updated":"2020-06-18 23:13:14.000000000","message":"Neat, haven\u0027t seen this before. A patch merged on master that added a reference to these, so when zuul ran and rebased this patch, these magically appeared. The file location is in the rebased file, not this one.","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"64a9bebc9e5a92fb419cdd2257a19ddb4caf9838","unresolved":false,"context_lines":[{"line_number":487,"context_line":"                             updated_members):"},{"line_number":488,"context_line":"        old_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":489,"context_line":"                       for mid in old_member_ids]"},{"line_number":490,"context_line":"        new_members \u003d [self._member_repo.get(db_apis.get_session(), id\u003dmid)"},{"line_number":491,"context_line":"                       for mid in new_member_ids]"},{"line_number":492,"context_line":"        updated_members \u003d ["},{"line_number":493,"context_line":"            (self._member_repo.get(db_apis.get_session(), id\u003dm.get(\u0027id\u0027)), m)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_674f87bd","line":490,"updated":"2020-06-16 01:00:15.000000000","message":"pep8: F821 undefined name \u0027RETRY_ATTEMPTS\u0027","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"}],"octavia/controller/worker/v1/flows/amphora_flows.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"e36a9ab8e393967718da6a04f65265b8ec833627","unresolved":false,"context_lines":[{"line_number":604,"context_line":"            is_spare\u003dis_spare))"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        failover_amp_flow.add("},{"line_number":607,"context_line":"            # TODO(johnsom) Pick or setup config settings for these"},{"line_number":608,"context_line":"            self.get_delete_amphora_flow(failed_amphora, retry_attempts\u003d5,"},{"line_number":609,"context_line":"                                         retry_interval\u003d5))"},{"line_number":610,"context_line":"        failover_amp_flow.add("}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_361aa07c","line":607,"range":{"start_line":607,"start_character":36,"end_line":607,"end_character":67},"updated":"2020-03-26 13:03:47.000000000","message":"I would make this configurable.","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"19603595be82a3121eafc36976d297e139ae3cd5","unresolved":false,"context_lines":[{"line_number":604,"context_line":"            is_spare\u003dis_spare))"},{"line_number":605,"context_line":""},{"line_number":606,"context_line":"        failover_amp_flow.add("},{"line_number":607,"context_line":"            # TODO(johnsom) Pick or setup config settings for these"},{"line_number":608,"context_line":"            self.get_delete_amphora_flow(failed_amphora, retry_attempts\u003d5,"},{"line_number":609,"context_line":"                                         retry_interval\u003d5))"},{"line_number":610,"context_line":"        failover_amp_flow.add("}],"source_content_type":"text/x-python","patch_set":20,"id":"3f4c43b2_ae9a0ec2","line":607,"range":{"start_line":607,"start_character":36,"end_line":607,"end_character":67},"in_reply_to":"df33271e_361aa07c","updated":"2020-04-13 23:50:31.000000000","message":"Done","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"dbc644a55c7f8dde6d25fcec4de578d3f1de1bb5","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                name\u003dsf_name + \u0027-\u0027 + constants.UPDATE_CERT_EXPIRATION,"},{"line_number":132,"context_line":"                requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM)))"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        if require_server_group_id_condition:"},{"line_number":135,"context_line":"            create_amp_for_lb_subflow.add(compute_tasks.CertComputeCreate("},{"line_number":136,"context_line":"                name\u003dsf_name + \u0027-\u0027 + constants.CERT_COMPUTE_CREATE,"},{"line_number":137,"context_line":"                requires\u003d("}],"source_content_type":"text/x-python","patch_set":21,"id":"df33271e_0386b713","line":134,"updated":"2020-04-01 23:38:20.000000000","message":"Oh I didn\u0027t even think about how much prettier this removal would make things. \u003c3","commit_id":"be87e2eb362fc1d40cd2b4cfb4d9f685e52ec4de"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"e9c184dda86a7fc739c9a5a513c9b1dadb171984","unresolved":false,"context_lines":[{"line_number":311,"context_line":"            inject\u003d{constants.AMPHORA: amphora}))"},{"line_number":312,"context_line":"        if amphora.vrrp_port_id:"},{"line_number":313,"context_line":"            delete_amphora_flow.add(network_tasks.DeletePort("},{"line_number":314,"context_line":"                name\u003dconstants.DELETE_PORT + \u0027-\u0027 + str(amphora.vrrp_port_id),"},{"line_number":315,"context_line":"                inject\u003d{constants.PORT_ID: amphora.vrrp_port_id,"},{"line_number":316,"context_line":"                        constants.PASSIVE_FAILURE: True}))"},{"line_number":317,"context_line":"        # TODO(johnsom) What about cleaning up any member ports?"}],"source_content_type":"text/x-python","patch_set":21,"id":"df33271e_e09d89bc","line":314,"updated":"2020-04-01 21:57:50.000000000","message":"Need to add the amp-id to this name, because multiple amps can have the same port-id in some cases.","commit_id":"be87e2eb362fc1d40cd2b4cfb4d9f685e52ec4de"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"dbc644a55c7f8dde6d25fcec4de578d3f1de1bb5","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.CERT_COMPUTE_CREATE,"},{"line_number":132,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM,"},{"line_number":133,"context_line":"                      constants.BUILD_TYPE_PRIORITY,"},{"line_number":134,"context_line":"                      constants.FLAVOR, constants.AVAILABILITY_ZONE),"},{"line_number":135,"context_line":"            provides\u003dconstants.COMPUTE_ID))"},{"line_number":136,"context_line":"        create_amp_for_lb_subflow.add(database_tasks.UpdateAmphoraComputeId("},{"line_number":137,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.UPDATE_AMPHORA_COMPUTEID,"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_437b9f26","line":134,"updated":"2020-04-01 23:38:20.000000000","message":"Not a huge dan of collapsing the requires tho, I really liked one-line-per. Ah well, not a deal-breaker, just makes my conflict resolution harder ever so slightly.","commit_id":"f39933bb897a2462cd337cff1e0eaead8f5cd03d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"b39de436ecf2d70c55940186caccc67d7543a42f","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.CERT_COMPUTE_CREATE,"},{"line_number":132,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM,"},{"line_number":133,"context_line":"                      constants.BUILD_TYPE_PRIORITY,"},{"line_number":134,"context_line":"                      constants.FLAVOR, constants.AVAILABILITY_ZONE),"},{"line_number":135,"context_line":"            provides\u003dconstants.COMPUTE_ID))"},{"line_number":136,"context_line":"        create_amp_for_lb_subflow.add(database_tasks.UpdateAmphoraComputeId("},{"line_number":137,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.UPDATE_AMPHORA_COMPUTEID,"}],"source_content_type":"text/x-python","patch_set":22,"id":"df33271e_a3c42b41","line":134,"in_reply_to":"df33271e_437b9f26","updated":"2020-04-01 23:43:45.000000000","message":"Carriage return conservation project","commit_id":"f39933bb897a2462cd337cff1e0eaead8f5cd03d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"8feade98725279250cb892601d231cc7db5093fe","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        create_amp_for_lb_subflow.add(compute_tasks.CertComputeCreate("},{"line_number":131,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.CERT_COMPUTE_CREATE,"},{"line_number":132,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM,"},{"line_number":133,"context_line":"                      constants.BUILD_TYPE_PRIORITY,"},{"line_number":134,"context_line":"                      constants.FLAVOR, constants.AVAILABILITY_ZONE),"},{"line_number":135,"context_line":"            provides\u003dconstants.COMPUTE_ID))"},{"line_number":136,"context_line":"        create_amp_for_lb_subflow.add(database_tasks.UpdateAmphoraComputeId("}],"source_content_type":"text/x-python","patch_set":26,"id":"3f4c43b2_cd904e52","line":133,"updated":"2020-04-13 11:39:11.000000000","message":"Now we\u0027re just expecting to pass SERVER_GROUP_ID to everything, right? So it should be in the `requires` list here.","commit_id":"728c4eac24390516847c43b250d0b5bc35cf05bc"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"19603595be82a3121eafc36976d297e139ae3cd5","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        create_amp_for_lb_subflow.add(compute_tasks.CertComputeCreate("},{"line_number":131,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.CERT_COMPUTE_CREATE,"},{"line_number":132,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM,"},{"line_number":133,"context_line":"                      constants.BUILD_TYPE_PRIORITY,"},{"line_number":134,"context_line":"                      constants.FLAVOR, constants.AVAILABILITY_ZONE),"},{"line_number":135,"context_line":"            provides\u003dconstants.COMPUTE_ID))"},{"line_number":136,"context_line":"        create_amp_for_lb_subflow.add(database_tasks.UpdateAmphoraComputeId("}],"source_content_type":"text/x-python","patch_set":26,"id":"3f4c43b2_35dacde8","line":133,"in_reply_to":"3f4c43b2_cd904e52","updated":"2020-04-13 23:50:31.000000000","message":"Yeah, I had it as optional before, but I think to have better testing/tracking we should force this to be required. I have made that change.","commit_id":"728c4eac24390516847c43b250d0b5bc35cf05bc"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# Copyright 2020 Red Hat, Inc. All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_b727d164","line":2,"updated":"2020-05-27 20:37:31.000000000","message":"nit: didn\u0027t think we still updated headers","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# Copyright 2020 Red Hat, Inc. All rights reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_1244b21a","line":2,"in_reply_to":"ff570b3c_b727d164","updated":"2020-05-28 21:49:56.000000000","message":"The guidance I have (granted historical) is we append if it is a significant amount of code.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            database_tasks.UpdateAmphoraDBCertExpiration("},{"line_number":53,"context_line":"                requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM)))"},{"line_number":54,"context_line":"        create_amphora_flow.add(compute_tasks.CertComputeCreate("},{"line_number":55,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM,"},{"line_number":56,"context_line":"                      constants.BUILD_TYPE_PRIORITY, constants.FLAVOR,"},{"line_number":57,"context_line":"                      constants.AVAILABILITY_ZONE),"},{"line_number":58,"context_line":"            provides\u003dconstants.COMPUTE_ID))"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_985ac3f0","line":55,"updated":"2020-06-18 14:14:53.000000000","message":"server_group_id is now also required but is missing here.","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            database_tasks.UpdateAmphoraDBCertExpiration("},{"line_number":53,"context_line":"                requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM)))"},{"line_number":54,"context_line":"        create_amphora_flow.add(compute_tasks.CertComputeCreate("},{"line_number":55,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.SERVER_PEM,"},{"line_number":56,"context_line":"                      constants.BUILD_TYPE_PRIORITY, constants.FLAVOR,"},{"line_number":57,"context_line":"                      constants.AVAILABILITY_ZONE),"},{"line_number":58,"context_line":"            provides\u003dconstants.COMPUTE_ID))"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_ab600103","line":55,"in_reply_to":"bf51134e_985ac3f0","updated":"2020-06-18 23:13:14.000000000","message":"Done","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"}],"octavia/controller/worker/v1/flows/load_balancer_flows.py":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"6bd471d84e53b9f19602d537b7ac7d6c75c7de77","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        return update_LB_flow"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def get_failover_LB_flow(self, amps, lb):"},{"line_number":361,"context_line":"        \"\"\"Failover a standalone load balancer."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        1. Validate the VIP port is correct and present."}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_87e1b0ff","line":360,"range":{"start_line":360,"start_character":8,"end_line":360,"end_character":28},"updated":"2020-05-28 15:14:35.000000000","message":"nit: for consistency, method name would be \u0027get_failover_load_balancer_flow\u0027","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        return update_LB_flow"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def get_failover_LB_flow(self, amps, lb):"},{"line_number":361,"context_line":"        \"\"\"Failover a standalone load balancer."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        1. Validate the VIP port is correct and present."}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_72f88ec3","line":360,"range":{"start_line":360,"start_character":8,"end_line":360,"end_character":28},"in_reply_to":"ff570b3c_87e1b0ff","updated":"2020-05-28 21:49:56.000000000","message":"There are other load balancer flow methods here that are \"LB\".\nget_post_lb_amp_association_flow\n\nI mean do we really want to have method names as long as the line length? I agree we are not consistent across the code.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            requires\u003d(constants.LOADBALANCER_ID, constants.VIP),"},{"line_number":71,"context_line":"            provides\u003dconstants.LOADBALANCER))"},{"line_number":72,"context_line":"        lb_create_flow.add(network_tasks.UpdateVIPSecurityGroup("},{"line_number":73,"context_line":"            requires\u003dconstants.LOADBALANCER_ID))"},{"line_number":74,"context_line":"        lb_create_flow.add(network_tasks.GetSubnetFromVIP("},{"line_number":75,"context_line":"            requires\u003dconstants.LOADBALANCER,"},{"line_number":76,"context_line":"            provides\u003dconstants.SUBNET))"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_ce683c23","line":73,"range":{"start_line":73,"start_character":31,"end_line":73,"end_character":46},"updated":"2020-06-15 18:38:12.000000000","message":"Why this change when we\u0027ve got the object from the task above? This adds an extra DB roundtrip.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            requires\u003d(constants.LOADBALANCER_ID, constants.VIP),"},{"line_number":71,"context_line":"            provides\u003dconstants.LOADBALANCER))"},{"line_number":72,"context_line":"        lb_create_flow.add(network_tasks.UpdateVIPSecurityGroup("},{"line_number":73,"context_line":"            requires\u003dconstants.LOADBALANCER_ID))"},{"line_number":74,"context_line":"        lb_create_flow.add(network_tasks.GetSubnetFromVIP("},{"line_number":75,"context_line":"            requires\u003dconstants.LOADBALANCER,"},{"line_number":76,"context_line":"            provides\u003dconstants.SUBNET))"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_205f3542","line":73,"range":{"start_line":73,"start_character":31,"end_line":73,"end_character":46},"in_reply_to":"bf51134e_676307de","updated":"2020-06-18 14:14:53.000000000","message":"Ok, I suspected that was the reason. We are inconsistent in how we pass information into tasks -- it\u0027s either data object or UUID -- but with the v2 driver I think this is/will be standardized.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            requires\u003d(constants.LOADBALANCER_ID, constants.VIP),"},{"line_number":71,"context_line":"            provides\u003dconstants.LOADBALANCER))"},{"line_number":72,"context_line":"        lb_create_flow.add(network_tasks.UpdateVIPSecurityGroup("},{"line_number":73,"context_line":"            requires\u003dconstants.LOADBALANCER_ID))"},{"line_number":74,"context_line":"        lb_create_flow.add(network_tasks.GetSubnetFromVIP("},{"line_number":75,"context_line":"            requires\u003dconstants.LOADBALANCER,"},{"line_number":76,"context_line":"            provides\u003dconstants.SUBNET))"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_676307de","line":73,"range":{"start_line":73,"start_character":31,"end_line":73,"end_character":46},"in_reply_to":"bf51134e_ce683c23","updated":"2020-06-16 00:15:08.000000000","message":"The V2 driver can\u0027t use the DB object. This came in as part of the v2 (jobboard) changes and I rebased.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        if topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY:"},{"line_number":241,"context_line":"            post_create_LB_flow.add(database_tasks.GetAmphoraeFromLoadbalancer("},{"line_number":242,"context_line":"                requires\u003dconstants.LOADBALANCER_ID,"},{"line_number":243,"context_line":"                provides\u003dconstants.AMPHORAE))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"            vrrp_subflow \u003d self.amp_flows.get_vrrp_subflow(prefix)"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_a4452773","line":242,"range":{"start_line":242,"start_character":35,"end_line":242,"end_character":50},"updated":"2020-06-15 18:38:12.000000000","message":"ditto (DB roundtrip)","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        if topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY:"},{"line_number":241,"context_line":"            post_create_LB_flow.add(database_tasks.GetAmphoraeFromLoadbalancer("},{"line_number":242,"context_line":"                requires\u003dconstants.LOADBALANCER_ID,"},{"line_number":243,"context_line":"                provides\u003dconstants.AMPHORAE))"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"            vrrp_subflow \u003d self.amp_flows.get_vrrp_subflow(prefix)"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_a79a3fc2","line":242,"range":{"start_line":242,"start_character":35,"end_line":242,"end_character":50},"in_reply_to":"bf51134e_a4452773","updated":"2020-06-16 00:15:08.000000000","message":"Same V2 stuff","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        return update_LB_flow"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def get_failover_LB_flow(self, amps, lb):"},{"line_number":361,"context_line":"        \"\"\"Failover a standalone load balancer."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        1. Validate the VIP port is correct and present."},{"line_number":364,"context_line":"        2. Build a replacement amphroa."}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_a4136766","line":361,"range":{"start_line":361,"start_character":22,"end_line":361,"end_character":32},"updated":"2020-06-15 18:38:12.000000000","message":"\"Failover a load balancer\"?","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":358,"context_line":"        return update_LB_flow"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def get_failover_LB_flow(self, amps, lb):"},{"line_number":361,"context_line":"        \"\"\"Failover a standalone load balancer."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        1. Validate the VIP port is correct and present."},{"line_number":364,"context_line":"        2. Build a replacement amphroa."}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_e77d576f","line":361,"range":{"start_line":361,"start_character":22,"end_line":361,"end_character":32},"in_reply_to":"bf51134e_a4136766","updated":"2020-06-16 00:15:08.000000000","message":"Done","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        \"\"\"Failover a standalone load balancer."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        1. Validate the VIP port is correct and present."},{"line_number":364,"context_line":"        2. Build a replacement amphroa."},{"line_number":365,"context_line":"        3. Delete the failed amphora."},{"line_number":366,"context_line":"        4. Configure the replacement amphroa listeners."},{"line_number":367,"context_line":"        5. Configure VRRP for the listeners."}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_2407571f","line":364,"range":{"start_line":364,"start_character":31,"end_line":364,"end_character":38},"updated":"2020-06-15 18:38:12.000000000","message":"typo","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        \"\"\"Failover a standalone load balancer."},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"        1. Validate the VIP port is correct and present."},{"line_number":364,"context_line":"        2. Build a replacement amphroa."},{"line_number":365,"context_line":"        3. Delete the failed amphora."},{"line_number":366,"context_line":"        4. Configure the replacement amphroa listeners."},{"line_number":367,"context_line":"        5. Configure VRRP for the listeners."}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_c782d34f","line":364,"range":{"start_line":364,"start_character":31,"end_line":364,"end_character":38},"in_reply_to":"bf51134e_2407571f","updated":"2020-06-16 00:15:08.000000000","message":"Done","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        1. Validate the VIP port is correct and present."},{"line_number":364,"context_line":"        2. Build a replacement amphroa."},{"line_number":365,"context_line":"        3. Delete the failed amphora."},{"line_number":366,"context_line":"        4. Configure the replacement amphroa listeners."},{"line_number":367,"context_line":"        5. Configure VRRP for the listeners."},{"line_number":368,"context_line":"        6. Build the second replacement amphora."},{"line_number":369,"context_line":"        7. Delete the second failed amphora."}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_ea3c09c1","line":366,"range":{"start_line":366,"start_character":37,"end_line":366,"end_character":44},"updated":"2020-06-15 18:38:12.000000000","message":"typo","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":363,"context_line":"        1. Validate the VIP port is correct and present."},{"line_number":364,"context_line":"        2. Build a replacement amphroa."},{"line_number":365,"context_line":"        3. Delete the failed amphora."},{"line_number":366,"context_line":"        4. Configure the replacement amphroa listeners."},{"line_number":367,"context_line":"        5. Configure VRRP for the listeners."},{"line_number":368,"context_line":"        6. Build the second replacement amphora."},{"line_number":369,"context_line":"        7. Delete the second failed amphora."}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_27974f93","line":366,"range":{"start_line":366,"start_character":37,"end_line":366,"end_character":44},"in_reply_to":"bf51134e_ea3c09c1","updated":"2020-06-16 00:15:08.000000000","message":"Done","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":462,"context_line":"                    role\u003dnew_amp_role))"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        if lb.topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY:"},{"line_number":465,"context_line":"            failover_LB_flow.add(database_tasks.MarkAmphoraBackupInDB("},{"line_number":466,"context_line":"                name\u003dconstants.MARK_AMP_BACKUP_INDB,"},{"line_number":467,"context_line":"                requires\u003dconstants.AMPHORA))"},{"line_number":468,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_30602ecf","line":465,"updated":"2020-06-15 18:38:12.000000000","message":"Won\u0027t the amphora be already marked as BACKUP (and role priority) here thanks to get_amphora_for_lb_failover_subflow?","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":462,"context_line":"                    role\u003dnew_amp_role))"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        if lb.topology \u003d\u003d constants.TOPOLOGY_ACTIVE_STANDBY:"},{"line_number":465,"context_line":"            failover_LB_flow.add(database_tasks.MarkAmphoraBackupInDB("},{"line_number":466,"context_line":"                name\u003dconstants.MARK_AMP_BACKUP_INDB,"},{"line_number":467,"context_line":"                requires\u003dconstants.AMPHORA))"},{"line_number":468,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_87d61b4f","line":465,"in_reply_to":"bf51134e_30602ecf","updated":"2020-06-16 00:15:08.000000000","message":"VRRP isn\u0027t handled in get_amphora_for_lb_failover_subflow and if the flow used a spares pool we need to set this.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            failover_LB_flow.add("},{"line_number":472,"context_line":"                self.amp_flows.get_delete_amphora_flow("},{"line_number":473,"context_line":"                    failed_amp,"},{"line_number":474,"context_line":"                    retry_attempts\u003d("},{"line_number":475,"context_line":"                        CONF.controller_worker.amphora_delete_retries),"},{"line_number":476,"context_line":"                    retry_interval\u003d("},{"line_number":477,"context_line":"                        CONF.controller_worker.amphora_delete_retry_interval)))"},{"line_number":478,"context_line":"            failover_LB_flow.add(database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":479,"context_line":"                requires\u003dconstants.AMPHORA,"},{"line_number":480,"context_line":"                inject\u003d{constants.AMPHORA: failed_amp}))"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_70ed8624","line":477,"range":{"start_line":474,"start_character":20,"end_line":477,"end_character":77},"updated":"2020-06-15 18:38:12.000000000","message":"get_delete_amphora_flow has sane defaults and matching these, so skip setting here?","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            failover_LB_flow.add("},{"line_number":472,"context_line":"                self.amp_flows.get_delete_amphora_flow("},{"line_number":473,"context_line":"                    failed_amp,"},{"line_number":474,"context_line":"                    retry_attempts\u003d("},{"line_number":475,"context_line":"                        CONF.controller_worker.amphora_delete_retries),"},{"line_number":476,"context_line":"                    retry_interval\u003d("},{"line_number":477,"context_line":"                        CONF.controller_worker.amphora_delete_retry_interval)))"},{"line_number":478,"context_line":"            failover_LB_flow.add(database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":479,"context_line":"                requires\u003dconstants.AMPHORA,"},{"line_number":480,"context_line":"                inject\u003d{constants.AMPHORA: failed_amp}))"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_4751a3d8","line":477,"range":{"start_line":474,"start_character":20,"end_line":477,"end_character":77},"in_reply_to":"bf51134e_70ed8624","updated":"2020-06-16 00:15:08.000000000","message":"Fair point, done.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                        CONF.controller_worker.amphora_delete_retries),"},{"line_number":476,"context_line":"                    retry_interval\u003d("},{"line_number":477,"context_line":"                        CONF.controller_worker.amphora_delete_retry_interval)))"},{"line_number":478,"context_line":"            failover_LB_flow.add(database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":479,"context_line":"                requires\u003dconstants.AMPHORA,"},{"line_number":480,"context_line":"                inject\u003d{constants.AMPHORA: failed_amp}))"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_103eca28","line":478,"range":{"start_line":478,"start_character":48,"end_line":478,"end_character":78},"updated":"2020-06-15 18:38:12.000000000","message":"get_delete_amphora_flow includes this task. Skip it here?","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                        CONF.controller_worker.amphora_delete_retries),"},{"line_number":476,"context_line":"                    retry_interval\u003d("},{"line_number":477,"context_line":"                        CONF.controller_worker.amphora_delete_retry_interval)))"},{"line_number":478,"context_line":"            failover_LB_flow.add(database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":479,"context_line":"                requires\u003dconstants.AMPHORA,"},{"line_number":480,"context_line":"                inject\u003d{constants.AMPHORA: failed_amp}))"},{"line_number":481,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_8709fbde","line":478,"range":{"start_line":478,"start_character":48,"end_line":478,"end_character":78},"in_reply_to":"bf51134e_103eca28","updated":"2020-06-16 00:15:08.000000000","message":"Yeah, not sure why that was duplicated.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        # Configure the listener(s)"},{"line_number":488,"context_line":"        # We will run update on this amphora again later if this is"},{"line_number":489,"context_line":"        # an active/standby load balancer because we what this amp"},{"line_number":490,"context_line":"        # functional as soon as possible. It must run again to update"},{"line_number":491,"context_line":"        # the configurations for the new peers."},{"line_number":492,"context_line":"        failover_LB_flow.add(amphora_driver_tasks.AmpListenersUpdate("}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_9013fab8","line":489,"range":{"start_line":489,"start_character":53,"end_line":489,"end_character":57},"updated":"2020-06-15 18:38:12.000000000","message":"want?","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"        # Configure the listener(s)"},{"line_number":488,"context_line":"        # We will run update on this amphora again later if this is"},{"line_number":489,"context_line":"        # an active/standby load balancer because we what this amp"},{"line_number":490,"context_line":"        # functional as soon as possible. It must run again to update"},{"line_number":491,"context_line":"        # the configurations for the new peers."},{"line_number":492,"context_line":"        failover_LB_flow.add(amphora_driver_tasks.AmpListenersUpdate("}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_c745b319","line":489,"range":{"start_line":489,"start_character":53,"end_line":489,"end_character":57},"in_reply_to":"bf51134e_9013fab8","updated":"2020-06-16 00:15:08.000000000","message":"Done","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":553,"context_line":"                if failed_amp.role in (constants.ROLE_MASTER,"},{"line_number":554,"context_line":"                                       constants.ROLE_BACKUP):"},{"line_number":555,"context_line":"                    amp_role \u003d \u0027master_or_backup\u0027"},{"line_number":556,"context_line":"                elif failed_amp.role \u003d\u003d constants.ROLE_STANDALONE:"},{"line_number":557,"context_line":"                    amp_role \u003d \u0027standalone\u0027"},{"line_number":558,"context_line":"                elif failed_amp.role is None:"},{"line_number":559,"context_line":"                    amp_role \u003d \u0027spare\u0027"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_d30d7c91","line":556,"updated":"2020-06-15 18:38:12.000000000","message":"Hmm. amp_role will always be \"master_or_backup\" in this topology\u003d\u003dactive-standby block. However, whatever? I\u0027m fine leaving this as-is.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":600,"context_line":"                failover_LB_flow.add("},{"line_number":601,"context_line":"                    self.amp_flows.get_delete_amphora_flow("},{"line_number":602,"context_line":"                        failed_amp,"},{"line_number":603,"context_line":"                        retry_attempts\u003d("},{"line_number":604,"context_line":"                            CONF.controller_worker.amphora_delete_retries),"},{"line_number":605,"context_line":"                        retry_interval\u003d("},{"line_number":606,"context_line":"                            CONF.controller_worker."},{"line_number":607,"context_line":"                            amphora_delete_retry_interval)))"},{"line_number":608,"context_line":"                failover_LB_flow.add("},{"line_number":609,"context_line":"                    database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":610,"context_line":"                        name\u003d(new_amp_role + \u0027-\u0027 +"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_fe93275b","line":607,"range":{"start_line":603,"start_character":24,"end_line":607,"end_character":58},"updated":"2020-06-15 18:38:12.000000000","message":"ditto","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":600,"context_line":"                failover_LB_flow.add("},{"line_number":601,"context_line":"                    self.amp_flows.get_delete_amphora_flow("},{"line_number":602,"context_line":"                        failed_amp,"},{"line_number":603,"context_line":"                        retry_attempts\u003d("},{"line_number":604,"context_line":"                            CONF.controller_worker.amphora_delete_retries),"},{"line_number":605,"context_line":"                        retry_interval\u003d("},{"line_number":606,"context_line":"                            CONF.controller_worker."},{"line_number":607,"context_line":"                            amphora_delete_retry_interval)))"},{"line_number":608,"context_line":"                failover_LB_flow.add("},{"line_number":609,"context_line":"                    database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":610,"context_line":"                        name\u003d(new_amp_role + \u0027-\u0027 +"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_27f8efc2","line":607,"range":{"start_line":603,"start_character":24,"end_line":607,"end_character":58},"in_reply_to":"bf51134e_fe93275b","updated":"2020-06-16 00:15:08.000000000","message":"Done","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                      \u0027Deleting.\u0027, amp.id, lb.id)"},{"line_number":624,"context_line":"            delete_extra_amps_flow.add("},{"line_number":625,"context_line":"                self.amp_flows.get_delete_amphora_flow("},{"line_number":626,"context_line":"                    amp, retry_attempts\u003d5, retry_interval\u003d5))"},{"line_number":627,"context_line":"            delete_extra_amps_flow.add("},{"line_number":628,"context_line":"                database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":629,"context_line":"                    name\u003d(amp.id + \u0027-\u0027 +"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_ded623c4","line":626,"range":{"start_line":626,"start_character":25,"end_line":626,"end_character":59},"updated":"2020-06-15 18:38:12.000000000","message":"Should get from CONF, however same comment as before applies here: method has default values and from CONF.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":623,"context_line":"                      \u0027Deleting.\u0027, amp.id, lb.id)"},{"line_number":624,"context_line":"            delete_extra_amps_flow.add("},{"line_number":625,"context_line":"                self.amp_flows.get_delete_amphora_flow("},{"line_number":626,"context_line":"                    amp, retry_attempts\u003d5, retry_interval\u003d5))"},{"line_number":627,"context_line":"            delete_extra_amps_flow.add("},{"line_number":628,"context_line":"                database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":629,"context_line":"                    name\u003d(amp.id + \u0027-\u0027 +"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_07f5ebcb","line":626,"range":{"start_line":626,"start_character":25,"end_line":626,"end_character":59},"in_reply_to":"bf51134e_ded623c4","updated":"2020-06-16 00:15:08.000000000","message":"Done","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                self.amp_flows.get_delete_amphora_flow("},{"line_number":626,"context_line":"                    amp, retry_attempts\u003d5, retry_interval\u003d5))"},{"line_number":627,"context_line":"            delete_extra_amps_flow.add("},{"line_number":628,"context_line":"                database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":629,"context_line":"                    name\u003d(amp.id + \u0027-\u0027 +"},{"line_number":630,"context_line":"                          constants.DISABLE_AMP_HEALTH_MONITORING),"},{"line_number":631,"context_line":"                    requires\u003dconstants.AMPHORA,"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_5ef4d35b","line":628,"range":{"start_line":628,"start_character":31,"end_line":628,"end_character":61},"updated":"2020-06-15 18:38:12.000000000","message":"ditto, no need? get_delete_amphora_flow includes this task.","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"36a7b80b36d641699c2eb988d9e9e9a642fcc291","unresolved":false,"context_lines":[{"line_number":625,"context_line":"                self.amp_flows.get_delete_amphora_flow("},{"line_number":626,"context_line":"                    amp, retry_attempts\u003d5, retry_interval\u003d5))"},{"line_number":627,"context_line":"            delete_extra_amps_flow.add("},{"line_number":628,"context_line":"                database_tasks.DisableAmphoraHealthMonitoring("},{"line_number":629,"context_line":"                    name\u003d(amp.id + \u0027-\u0027 +"},{"line_number":630,"context_line":"                          constants.DISABLE_AMP_HEALTH_MONITORING),"},{"line_number":631,"context_line":"                    requires\u003dconstants.AMPHORA,"}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_6702e7b6","line":628,"range":{"start_line":628,"start_character":31,"end_line":628,"end_character":61},"in_reply_to":"bf51134e_5ef4d35b","updated":"2020-06-16 00:15:08.000000000","message":"Done","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"}],"octavia/controller/worker/v1/tasks/amphora_driver_tasks.py":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4a9c0694b97571c04b7ce8dae34e9014f773838b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.task_utils \u003d task_utilities.TaskUtils()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class AmpListenersUpdate(BaseAmphoraTask):"},{"line_number":52,"context_line":"    \"\"\"Task to update the listeners on one amphora.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def execute(self, loadbalancer, amphora, timeout_dict\u003dNone):"},{"line_number":55,"context_line":"        # Note, we don\u0027t want this to cause a revert as it may be used"},{"line_number":56,"context_line":"        # in a failover flow with both amps failing. Skip it and let"},{"line_number":57,"context_line":"        # health manager fix it."},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            self.amphora_driver.update_amphora_listeners("},{"line_number":60,"context_line":"                loadbalancer, amphora, timeout_dict)"},{"line_number":61,"context_line":"        except Exception as e:"},{"line_number":62,"context_line":"            LOG.error(\u0027Failed to update listeners on amphora %s. Skipping \u0027"},{"line_number":63,"context_line":"                      \u0027this amphora as it is failing to update due to: %s\u0027,"},{"line_number":64,"context_line":"                      amphora.id, str(e))"},{"line_number":65,"context_line":"            self.amphora_repo.update(db_apis.get_session(), amphora.id,"},{"line_number":66,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class AmphoraeListenersUpdate(BaseAmphoraTask):"},{"line_number":70,"context_line":"    \"\"\"Task to update the listeners on one amphora.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def execute(self, loadbalancer, amphora_index, amphorae,"},{"line_number":73,"context_line":"                timeout_dict\u003dNone):"},{"line_number":74,"context_line":"        # Note, we don\u0027t want this to cause a revert as it may be used"},{"line_number":75,"context_line":"        # in a failover flow with both amps failing. Skip it and let"},{"line_number":76,"context_line":"        # health manager fix it."},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            self.amphora_driver.update_amphora_listeners("},{"line_number":79,"context_line":"                loadbalancer, amphorae[amphora_index], timeout_dict)"},{"line_number":80,"context_line":"        except Exception as e:"},{"line_number":81,"context_line":"            amphora_id \u003d amphorae[amphora_index].id"},{"line_number":82,"context_line":"            LOG.error(\u0027Failed to update listeners on amphora %s. Skipping \u0027"},{"line_number":83,"context_line":"                      \u0027this amphora as it is failing to update due to: %s\u0027,"},{"line_number":84,"context_line":"                      amphora_id, str(e))"},{"line_number":85,"context_line":"            self.amphora_repo.update(db_apis.get_session(), amphora_id,"},{"line_number":86,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class ListenersUpdate(BaseAmphoraTask):"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_840d6037","line":86,"range":{"start_line":51,"start_character":0,"end_line":86,"end_character":60},"updated":"2020-06-10 05:23:15.000000000","message":"Why we need the two method simultaneously? I think they do same thing.","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"57224c55e53349037b5d050b696587b5b1105b23","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.task_utils \u003d task_utilities.TaskUtils()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class AmpListenersUpdate(BaseAmphoraTask):"},{"line_number":52,"context_line":"    \"\"\"Task to update the listeners on one amphora.\"\"\""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def execute(self, loadbalancer, amphora, timeout_dict\u003dNone):"},{"line_number":55,"context_line":"        # Note, we don\u0027t want this to cause a revert as it may be used"},{"line_number":56,"context_line":"        # in a failover flow with both amps failing. Skip it and let"},{"line_number":57,"context_line":"        # health manager fix it."},{"line_number":58,"context_line":"        try:"},{"line_number":59,"context_line":"            self.amphora_driver.update_amphora_listeners("},{"line_number":60,"context_line":"                loadbalancer, amphora, timeout_dict)"},{"line_number":61,"context_line":"        except Exception as e:"},{"line_number":62,"context_line":"            LOG.error(\u0027Failed to update listeners on amphora %s. Skipping \u0027"},{"line_number":63,"context_line":"                      \u0027this amphora as it is failing to update due to: %s\u0027,"},{"line_number":64,"context_line":"                      amphora.id, str(e))"},{"line_number":65,"context_line":"            self.amphora_repo.update(db_apis.get_session(), amphora.id,"},{"line_number":66,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class AmphoraeListenersUpdate(BaseAmphoraTask):"},{"line_number":70,"context_line":"    \"\"\"Task to update the listeners on one amphora.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def execute(self, loadbalancer, amphora_index, amphorae,"},{"line_number":73,"context_line":"                timeout_dict\u003dNone):"},{"line_number":74,"context_line":"        # Note, we don\u0027t want this to cause a revert as it may be used"},{"line_number":75,"context_line":"        # in a failover flow with both amps failing. Skip it and let"},{"line_number":76,"context_line":"        # health manager fix it."},{"line_number":77,"context_line":"        try:"},{"line_number":78,"context_line":"            self.amphora_driver.update_amphora_listeners("},{"line_number":79,"context_line":"                loadbalancer, amphorae[amphora_index], timeout_dict)"},{"line_number":80,"context_line":"        except Exception as e:"},{"line_number":81,"context_line":"            amphora_id \u003d amphorae[amphora_index].id"},{"line_number":82,"context_line":"            LOG.error(\u0027Failed to update listeners on amphora %s. Skipping \u0027"},{"line_number":83,"context_line":"                      \u0027this amphora as it is failing to update due to: %s\u0027,"},{"line_number":84,"context_line":"                      amphora_id, str(e))"},{"line_number":85,"context_line":"            self.amphora_repo.update(db_apis.get_session(), amphora_id,"},{"line_number":86,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class ListenersUpdate(BaseAmphoraTask):"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_b03373f6","line":86,"range":{"start_line":51,"start_character":0,"end_line":86,"end_character":60},"in_reply_to":"ff570b3c_840d6037","updated":"2020-06-10 19:00:51.000000000","message":"One expects a list of amphora and an index into that list, the other only takes a singe amphora.\nThe one with the index is used in parallel flows, such that different threads will work on different amphora at the same time. To build these flows, we need to build the two branches at flow creation time, but at that point we don\u0027t know which amphora will be acted upon (I.e. the flow may create a new amphora). So, this way we can parallelize work on an arbitrary list of amphora.","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4a9c0694b97571c04b7ce8dae34e9014f773838b","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        return interface"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"class AmphoraVRRPUpdate(BaseAmphoraTask):"},{"line_number":328,"context_line":"    \"\"\"Task to update the VRRP configuration of an amphora.\"\"\""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def execute(self, loadbalancer_id, amphorae_network_config, amphora,"},{"line_number":331,"context_line":"                amp_vrrp_int, timeout_dict\u003dNone):"},{"line_number":332,"context_line":"        \"\"\"Execute update_vrrp_conf.\"\"\""},{"line_number":333,"context_line":"        loadbalancer \u003d self.loadbalancer_repo.get(db_apis.get_session(),"},{"line_number":334,"context_line":"                                                  id\u003dloadbalancer_id)"},{"line_number":335,"context_line":"        # Note, we don\u0027t want this to cause a revert as it may be used"},{"line_number":336,"context_line":"        # in a failover flow with both amps failing. Skip it and let"},{"line_number":337,"context_line":"        # health manager fix it."},{"line_number":338,"context_line":"        amphora.vrrp_interface \u003d amp_vrrp_int"},{"line_number":339,"context_line":"        try:"},{"line_number":340,"context_line":"            self.amphora_driver.update_vrrp_conf("},{"line_number":341,"context_line":"                loadbalancer, amphorae_network_config, amphora, timeout_dict)"},{"line_number":342,"context_line":"        except Exception as e:"},{"line_number":343,"context_line":"            LOG.error(\u0027Failed to update VRRP configuration amphora %s. \u0027"},{"line_number":344,"context_line":"                      \u0027Skipping this amphora as it is failing to update due \u0027"},{"line_number":345,"context_line":"                      \u0027to: %s\u0027, amphora.id, str(e))"},{"line_number":346,"context_line":"            self.amphora_repo.update(db_apis.get_session(), amphora.id,"},{"line_number":347,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        LOG.debug(\"Uploaded VRRP configuration of amphora %s.\", amphora.id)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"class AmphoraIndexVRRPUpdate(BaseAmphoraTask):"},{"line_number":353,"context_line":"    \"\"\"Task to update the VRRP configuration of an amphora.\"\"\""},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def execute(self, loadbalancer_id, amphorae_network_config, amphora_index,"},{"line_number":356,"context_line":"                amphorae, amp_vrrp_int, timeout_dict\u003dNone):"},{"line_number":357,"context_line":"        \"\"\"Execute update_vrrp_conf.\"\"\""},{"line_number":358,"context_line":"        loadbalancer \u003d self.loadbalancer_repo.get(db_apis.get_session(),"},{"line_number":359,"context_line":"                                                  id\u003dloadbalancer_id)"},{"line_number":360,"context_line":"        # Note, we don\u0027t want this to cause a revert as it may be used"},{"line_number":361,"context_line":"        # in a failover flow with both amps failing. Skip it and let"},{"line_number":362,"context_line":"        # health manager fix it."},{"line_number":363,"context_line":"        amphora_id \u003d amphorae[amphora_index].id"},{"line_number":364,"context_line":"        amphorae[amphora_index].vrrp_interface \u003d amp_vrrp_int"},{"line_number":365,"context_line":"        try:"},{"line_number":366,"context_line":"            self.amphora_driver.update_vrrp_conf("},{"line_number":367,"context_line":"                loadbalancer, amphorae_network_config, amphorae[amphora_index],"},{"line_number":368,"context_line":"                timeout_dict)"},{"line_number":369,"context_line":"        except Exception as e:"},{"line_number":370,"context_line":"            LOG.error(\u0027Failed to update VRRP configuration amphora %s. \u0027"},{"line_number":371,"context_line":"                      \u0027Skipping this amphora as it is failing to update due \u0027"},{"line_number":372,"context_line":"                      \u0027to: %s\u0027, amphora_id, str(e))"},{"line_number":373,"context_line":"            self.amphora_repo.update(db_apis.get_session(), amphora_id,"},{"line_number":374,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        LOG.debug(\"Uploaded VRRP configuration of amphora %s.\", amphora_id)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"class AmphoraVRRPStop(BaseAmphoraTask):"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_e4337cf5","line":376,"range":{"start_line":327,"start_character":0,"end_line":376,"end_character":75},"updated":"2020-06-10 05:23:15.000000000","message":"ditto","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"57224c55e53349037b5d050b696587b5b1105b23","unresolved":false,"context_lines":[{"line_number":324,"context_line":"        return interface"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"class AmphoraVRRPUpdate(BaseAmphoraTask):"},{"line_number":328,"context_line":"    \"\"\"Task to update the VRRP configuration of an amphora.\"\"\""},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"    def execute(self, loadbalancer_id, amphorae_network_config, amphora,"},{"line_number":331,"context_line":"                amp_vrrp_int, timeout_dict\u003dNone):"},{"line_number":332,"context_line":"        \"\"\"Execute update_vrrp_conf.\"\"\""},{"line_number":333,"context_line":"        loadbalancer \u003d self.loadbalancer_repo.get(db_apis.get_session(),"},{"line_number":334,"context_line":"                                                  id\u003dloadbalancer_id)"},{"line_number":335,"context_line":"        # Note, we don\u0027t want this to cause a revert as it may be used"},{"line_number":336,"context_line":"        # in a failover flow with both amps failing. Skip it and let"},{"line_number":337,"context_line":"        # health manager fix it."},{"line_number":338,"context_line":"        amphora.vrrp_interface \u003d amp_vrrp_int"},{"line_number":339,"context_line":"        try:"},{"line_number":340,"context_line":"            self.amphora_driver.update_vrrp_conf("},{"line_number":341,"context_line":"                loadbalancer, amphorae_network_config, amphora, timeout_dict)"},{"line_number":342,"context_line":"        except Exception as e:"},{"line_number":343,"context_line":"            LOG.error(\u0027Failed to update VRRP configuration amphora %s. \u0027"},{"line_number":344,"context_line":"                      \u0027Skipping this amphora as it is failing to update due \u0027"},{"line_number":345,"context_line":"                      \u0027to: %s\u0027, amphora.id, str(e))"},{"line_number":346,"context_line":"            self.amphora_repo.update(db_apis.get_session(), amphora.id,"},{"line_number":347,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        LOG.debug(\"Uploaded VRRP configuration of amphora %s.\", amphora.id)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"class AmphoraIndexVRRPUpdate(BaseAmphoraTask):"},{"line_number":353,"context_line":"    \"\"\"Task to update the VRRP configuration of an amphora.\"\"\""},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def execute(self, loadbalancer_id, amphorae_network_config, amphora_index,"},{"line_number":356,"context_line":"                amphorae, amp_vrrp_int, timeout_dict\u003dNone):"},{"line_number":357,"context_line":"        \"\"\"Execute update_vrrp_conf.\"\"\""},{"line_number":358,"context_line":"        loadbalancer \u003d self.loadbalancer_repo.get(db_apis.get_session(),"},{"line_number":359,"context_line":"                                                  id\u003dloadbalancer_id)"},{"line_number":360,"context_line":"        # Note, we don\u0027t want this to cause a revert as it may be used"},{"line_number":361,"context_line":"        # in a failover flow with both amps failing. Skip it and let"},{"line_number":362,"context_line":"        # health manager fix it."},{"line_number":363,"context_line":"        amphora_id \u003d amphorae[amphora_index].id"},{"line_number":364,"context_line":"        amphorae[amphora_index].vrrp_interface \u003d amp_vrrp_int"},{"line_number":365,"context_line":"        try:"},{"line_number":366,"context_line":"            self.amphora_driver.update_vrrp_conf("},{"line_number":367,"context_line":"                loadbalancer, amphorae_network_config, amphorae[amphora_index],"},{"line_number":368,"context_line":"                timeout_dict)"},{"line_number":369,"context_line":"        except Exception as e:"},{"line_number":370,"context_line":"            LOG.error(\u0027Failed to update VRRP configuration amphora %s. \u0027"},{"line_number":371,"context_line":"                      \u0027Skipping this amphora as it is failing to update due \u0027"},{"line_number":372,"context_line":"                      \u0027to: %s\u0027, amphora_id, str(e))"},{"line_number":373,"context_line":"            self.amphora_repo.update(db_apis.get_session(), amphora_id,"},{"line_number":374,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"        LOG.debug(\"Uploaded VRRP configuration of amphora %s.\", amphora_id)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"class AmphoraVRRPStop(BaseAmphoraTask):"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_d04f0768","line":376,"range":{"start_line":327,"start_character":0,"end_line":376,"end_character":75},"in_reply_to":"ff570b3c_e4337cf5","updated":"2020-06-10 19:00:51.000000000","message":"Same reason as above.","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class AmphoraeListenersUpdate(BaseAmphoraTask):"},{"line_number":70,"context_line":"    \"\"\"Task to update the listeners on one amphora.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def execute(self, loadbalancer, amphora_index, amphorae,"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_1b8a491a","line":69,"range":{"start_line":69,"start_character":6,"end_line":69,"end_character":29},"updated":"2020-06-18 14:14:53.000000000","message":"This task name is misleading (only a single amp is updated) and is largely the same implementation as AmpListenersUpdate. How about inheriting from AmpListenersUpdate? As for the name, \"AmpIndexListenersUpdate\" to be consistent with AmphoraIndexListenersReload and others??\n\nnit-picking ¯\\_(ツ)_/¯","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                                     status\u003dconstants.ERROR)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class AmphoraeListenersUpdate(BaseAmphoraTask):"},{"line_number":70,"context_line":"    \"\"\"Task to update the listeners on one amphora.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def execute(self, loadbalancer, amphora_index, amphorae,"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_760a4c21","line":69,"range":{"start_line":69,"start_character":6,"end_line":69,"end_character":29},"in_reply_to":"bf51134e_1b8a491a","updated":"2020-06-18 23:13:14.000000000","message":"Yeah, fair point. Fixed.","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class AmphoraIndexListenersReload(BaseAmphoraTask):"},{"line_number":123,"context_line":"    \"\"\"Task to start all listeners on an amphora.\"\"\""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def execute(self, loadbalancer, amphorae, amphora_index,"},{"line_number":126,"context_line":"                timeout_dict\u003dNone):"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_db77313a","line":123,"range":{"start_line":123,"start_character":15,"end_line":123,"end_character":20},"updated":"2020-06-18 14:14:53.000000000","message":"reload?","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"class AmphoraIndexListenersReload(BaseAmphoraTask):"},{"line_number":123,"context_line":"    \"\"\"Task to start all listeners on an amphora.\"\"\""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def execute(self, loadbalancer, amphorae, amphora_index,"},{"line_number":126,"context_line":"                timeout_dict\u003dNone):"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_b613445c","line":123,"range":{"start_line":123,"start_character":15,"end_line":123,"end_character":20},"in_reply_to":"bf51134e_db77313a","updated":"2020-06-18 23:13:14.000000000","message":"Done","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def execute(self, loadbalancer, amphorae, amphora_index,"},{"line_number":126,"context_line":"                timeout_dict\u003dNone):"},{"line_number":127,"context_line":"        \"\"\"Execute listener start routines for listeners on an amphora.\"\"\""},{"line_number":128,"context_line":"        if loadbalancer.listeners:"},{"line_number":129,"context_line":"            self.amphora_driver.reload("},{"line_number":130,"context_line":"                loadbalancer, amphorae[amphora_index], timeout_dict)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_bb74fd36","line":127,"range":{"start_line":127,"start_character":28,"end_line":127,"end_character":33},"updated":"2020-06-18 14:14:53.000000000","message":"ditto","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def execute(self, loadbalancer, amphorae, amphora_index,"},{"line_number":126,"context_line":"                timeout_dict\u003dNone):"},{"line_number":127,"context_line":"        \"\"\"Execute listener start routines for listeners on an amphora.\"\"\""},{"line_number":128,"context_line":"        if loadbalancer.listeners:"},{"line_number":129,"context_line":"            self.amphora_driver.reload("},{"line_number":130,"context_line":"                loadbalancer, amphorae[amphora_index], timeout_dict)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_960e0030","line":127,"range":{"start_line":127,"start_character":28,"end_line":127,"end_character":33},"in_reply_to":"bf51134e_bb74fd36","updated":"2020-06-18 23:13:14.000000000","message":"Done","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                loadbalancer, amphorae[amphora_index], timeout_dict)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def revert(self, loadbalancer, *args, **kwargs):"},{"line_number":133,"context_line":"        \"\"\"Handle failed listeners starts.\"\"\""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        LOG.warning(\"Reverting listener reload.\")"},{"line_number":136,"context_line":"        for listener in loadbalancer.listeners:"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_9ba2d999","line":133,"range":{"start_line":133,"start_character":35,"end_line":133,"end_character":41},"updated":"2020-06-18 14:14:53.000000000","message":"ditto","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                loadbalancer, amphorae[amphora_index], timeout_dict)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def revert(self, loadbalancer, *args, **kwargs):"},{"line_number":133,"context_line":"        \"\"\"Handle failed listeners starts.\"\"\""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        LOG.warning(\"Reverting listener reload.\")"},{"line_number":136,"context_line":"        for listener in loadbalancer.listeners:"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_d6187876","line":133,"range":{"start_line":133,"start_character":35,"end_line":133,"end_character":41},"in_reply_to":"bf51134e_9ba2d999","updated":"2020-06-18 23:13:14.000000000","message":"Done","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    def execute(self, loadbalancer, added_ports):"},{"line_number":212,"context_line":"        \"\"\"Execute post_network_plug routine.\"\"\""},{"line_number":213,"context_line":"        amp_post_plug \u003d AmphoraPostNetworkPlug()"},{"line_number":214,"context_line":"        # We need to make sure we have the fresh list of amphora"},{"line_number":215,"context_line":"        amphorae \u003d self.amphora_repo.get_all("},{"line_number":216,"context_line":"            db_apis.get_session(), load_balancer_id\u003dloadbalancer.id,"},{"line_number":217,"context_line":"            status\u003dconstants.AMPHORA_ALLOCATED)[0]"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_3b72ade6","line":214,"updated":"2020-06-18 14:14:53.000000000","message":"Are we not trusting flows to provide up-to-date data?\nThe pattern I\u0027ve seen is adding ReloadLoadBalancer to the flow when needed. Other option is changeing \"loadbalancer\" param to \"loadbalancer_id\".","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    def execute(self, loadbalancer, added_ports):"},{"line_number":212,"context_line":"        \"\"\"Execute post_network_plug routine.\"\"\""},{"line_number":213,"context_line":"        amp_post_plug \u003d AmphoraPostNetworkPlug()"},{"line_number":214,"context_line":"        # We need to make sure we have the fresh list of amphora"},{"line_number":215,"context_line":"        amphorae \u003d self.amphora_repo.get_all("},{"line_number":216,"context_line":"            db_apis.get_session(), load_balancer_id\u003dloadbalancer.id,"},{"line_number":217,"context_line":"            status\u003dconstants.AMPHORA_ALLOCATED)[0]"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_76588c31","line":214,"in_reply_to":"bf51134e_3b72ade6","updated":"2020-06-18 23:13:14.000000000","message":"I am not trusting the in-flow update. I think it is not behaving like we think it is. I\u0027m moving away from the \"reload\" tasks as I can. There is an interaction between the flow storage and the sqlalchemy session caching that I haven\u0027t stopped to figure out as we are dropping passing DB objects in flows for v2.","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        LOG.debug(\"Started VRRP on amphora %s.\", amphora.id)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"class AmphoraIndexVRRPStart(BaseAmphoraTask):"},{"line_number":400,"context_line":"    \"\"\"Task to start keepalived on an amphora."},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    This will reload keepalived if it is already running."}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_584dcb70","line":399,"updated":"2020-06-18 14:14:53.000000000","message":"Similar comment to AmphoraeListenersUpdate.","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":396,"context_line":"        LOG.debug(\"Started VRRP on amphora %s.\", amphora.id)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"class AmphoraIndexVRRPStart(BaseAmphoraTask):"},{"line_number":400,"context_line":"    \"\"\"Task to start keepalived on an amphora."},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    This will reload keepalived if it is already running."}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_169f90b4","line":399,"in_reply_to":"bf51134e_584dcb70","updated":"2020-06-18 23:13:14.000000000","message":"Really I hope at the end of these transitions (failover, v2, etc.) we can remove the \"index\" word and go back to only having one type. The index versions were added to enable parallel sub-flows. This removes the tasks that iterate across the amphora to do updates.","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"}],"octavia/controller/worker/v1/tasks/compute_tasks.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        :returns: None"},{"line_number":311,"context_line":"        \"\"\""},{"line_number":312,"context_line":"        LOG.debug(\u0027Attaching port: %s to compute: %s\u0027,"},{"line_number":313,"context_line":"                  amphora.compute_id, port.id)"},{"line_number":314,"context_line":"        self.compute.attach_network_or_port(amphora.compute_id,"},{"line_number":315,"context_line":"                                            port_id\u003dport.id)"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_778ed927","line":313,"updated":"2020-05-27 20:37:31.000000000","message":"Arguments in the wrong order","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        :returns: None"},{"line_number":311,"context_line":"        \"\"\""},{"line_number":312,"context_line":"        LOG.debug(\u0027Attaching port: %s to compute: %s\u0027,"},{"line_number":313,"context_line":"                  amphora.compute_id, port.id)"},{"line_number":314,"context_line":"        self.compute.attach_network_or_port(amphora.compute_id,"},{"line_number":315,"context_line":"                                            port_id\u003dport.id)"},{"line_number":316,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_d2d51a1d","line":313,"in_reply_to":"ff570b3c_778ed927","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        \"\"\"Attach a port to an amphora instance."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        :param amphora: The amphora to attach the port to."},{"line_number":311,"context_line":"        :param port: The port to attache to the amphora."},{"line_number":312,"context_line":"        :returns: None"},{"line_number":313,"context_line":"        \"\"\""},{"line_number":314,"context_line":"        LOG.debug(\u0027Attaching port: %s to compute: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_18223301","line":311,"range":{"start_line":311,"start_character":33,"end_line":311,"end_character":40},"updated":"2020-06-18 14:14:53.000000000","message":"typo","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        \"\"\"Attach a port to an amphora instance."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        :param amphora: The amphora to attach the port to."},{"line_number":311,"context_line":"        :param port: The port to attache to the amphora."},{"line_number":312,"context_line":"        :returns: None"},{"line_number":313,"context_line":"        \"\"\""},{"line_number":314,"context_line":"        LOG.debug(\u0027Attaching port: %s to compute: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_9693a0a3","line":311,"range":{"start_line":311,"start_character":33,"end_line":311,"end_character":40},"in_reply_to":"bf51134e_18223301","updated":"2020-06-18 23:13:14.000000000","message":"Done","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":319,"context_line":"    def revert(self, amphora, port, *args, **kwargs):"},{"line_number":320,"context_line":"        \"\"\"Revert our port attach."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        :param amphora: The amphora to attach the port to."},{"line_number":323,"context_line":"        :param port: The port to attache to the amphora."},{"line_number":324,"context_line":"        \"\"\""},{"line_number":325,"context_line":"        LOG.warning(\u0027Reverting port: %s attach to compute: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_b867c751","line":322,"range":{"start_line":322,"start_character":39,"end_line":322,"end_character":57},"updated":"2020-06-18 14:14:53.000000000","message":"detach the port from?","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":319,"context_line":"    def revert(self, amphora, port, *args, **kwargs):"},{"line_number":320,"context_line":"        \"\"\"Revert our port attach."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        :param amphora: The amphora to attach the port to."},{"line_number":323,"context_line":"        :param port: The port to attache to the amphora."},{"line_number":324,"context_line":"        \"\"\""},{"line_number":325,"context_line":"        LOG.warning(\u0027Reverting port: %s attach to compute: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_f692dc9d","line":322,"range":{"start_line":322,"start_character":39,"end_line":322,"end_character":57},"in_reply_to":"bf51134e_b867c751","updated":"2020-06-18 23:13:14.000000000","message":"Done","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        \"\"\"Revert our port attach."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        :param amphora: The amphora to attach the port to."},{"line_number":323,"context_line":"        :param port: The port to attache to the amphora."},{"line_number":324,"context_line":"        \"\"\""},{"line_number":325,"context_line":"        LOG.warning(\u0027Reverting port: %s attach to compute: %s\u0027,"},{"line_number":326,"context_line":"                    port.id, amphora.compute_id)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_9883e3cc","line":323,"range":{"start_line":323,"start_character":33,"end_line":323,"end_character":40},"updated":"2020-06-18 14:14:53.000000000","message":"typo","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        \"\"\"Revert our port attach."},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        :param amphora: The amphora to attach the port to."},{"line_number":323,"context_line":"        :param port: The port to attache to the amphora."},{"line_number":324,"context_line":"        \"\"\""},{"line_number":325,"context_line":"        LOG.warning(\u0027Reverting port: %s attach to compute: %s\u0027,"},{"line_number":326,"context_line":"                    port.id, amphora.compute_id)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_d68d187c","line":323,"range":{"start_line":323,"start_character":33,"end_line":323,"end_character":40},"in_reply_to":"bf51134e_9883e3cc","updated":"2020-06-18 23:13:14.000000000","message":"Done","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"}],"octavia/controller/worker/v1/tasks/database_tasks.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"e36a9ab8e393967718da6a04f65265b8ec833627","unresolved":false,"context_lines":[{"line_number":1616,"context_line":""},{"line_number":1617,"context_line":"        :param loadbalancer_id: Load balancer ID for which a VRRP group"},{"line_number":1618,"context_line":"               should be created"},{"line_number":1619,"context_line":"        :returns: Updated load balancer"},{"line_number":1620,"context_line":"        \"\"\""},{"line_number":1621,"context_line":"        try:"},{"line_number":1622,"context_line":"            self.repos.vrrpgroup.create("}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_e13070eb","line":1619,"range":{"start_line":1619,"start_character":8,"end_line":1619,"end_character":39},"updated":"2020-03-26 13:03:47.000000000","message":"should be dropped as well","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"4464acf04320fcd14fa9b9b1d3eda5436be06191","unresolved":false,"context_lines":[{"line_number":1616,"context_line":""},{"line_number":1617,"context_line":"        :param loadbalancer_id: Load balancer ID for which a VRRP group"},{"line_number":1618,"context_line":"               should be created"},{"line_number":1619,"context_line":"        :returns: Updated load balancer"},{"line_number":1620,"context_line":"        \"\"\""},{"line_number":1621,"context_line":"        try:"},{"line_number":1622,"context_line":"            self.repos.vrrpgroup.create("}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_1dd8ddec","line":1619,"range":{"start_line":1619,"start_character":8,"end_line":1619,"end_character":39},"in_reply_to":"df33271e_e13070eb","updated":"2020-04-01 18:27:29.000000000","message":"Done","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":1191,"context_line":""},{"line_number":1192,"context_line":"        LOG.debug(\"Mark ACTIVE in DB for load balancer id: %s \""},{"line_number":1193,"context_line":"                  \"and updating status for listener ids: %s\", loadbalancer.id,"},{"line_number":1194,"context_line":"                  \u0027, \u0027.join([l.id for l in listeners]))"},{"line_number":1195,"context_line":"        self.loadbalancer_repo.update(db_apis.get_session(),"},{"line_number":1196,"context_line":"                                      loadbalancer.id,"},{"line_number":1197,"context_line":"                                      provisioning_status\u003dconstants.ACTIVE)"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_241b8281","line":1194,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"        LOG.warning(\"Reverting mark load balancer and listeners active in DB \""},{"line_number":1211,"context_line":"                    \"for load balancer id %(LB)s and listener ids: %(list)s\","},{"line_number":1212,"context_line":"                    {\u0027LB\u0027: loadbalancer.id,"},{"line_number":1213,"context_line":"                     \u0027list\u0027: \u0027, \u0027.join([l.id for l in listeners])})"},{"line_number":1214,"context_line":"        self.task_utils.mark_loadbalancer_prov_status_error(loadbalancer.id)"},{"line_number":1215,"context_line":"        for listener in listeners:"},{"line_number":1216,"context_line":"            self.task_utils.mark_listener_prov_status_error(listener.id)"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_041e3e6f","line":1213,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":1591,"context_line":"        :returns: The load balancer object"},{"line_number":1592,"context_line":"        \"\"\""},{"line_number":1593,"context_line":""},{"line_number":1594,"context_line":"        LOG.debug(\"Get load balancer from DB for load balancer id: %s \","},{"line_number":1595,"context_line":"                  loadbalancer_id)"},{"line_number":1596,"context_line":"        return self.loadbalancer_repo.get(db_apis.get_session(),"},{"line_number":1597,"context_line":"                                          id\u003dloadbalancer_id)"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_37ac618b","line":1594,"range":{"start_line":1594,"start_character":69,"end_line":1594,"end_character":70},"updated":"2020-05-27 20:37:31.000000000","message":"nit: extra trailing space","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":1591,"context_line":"        :returns: The load balancer object"},{"line_number":1592,"context_line":"        \"\"\""},{"line_number":1593,"context_line":""},{"line_number":1594,"context_line":"        LOG.debug(\"Get load balancer from DB for load balancer id: %s \","},{"line_number":1595,"context_line":"                  loadbalancer_id)"},{"line_number":1596,"context_line":"        return self.loadbalancer_repo.get(db_apis.get_session(),"},{"line_number":1597,"context_line":"                                          id\u003dloadbalancer_id)"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_52e10afc","line":1594,"range":{"start_line":1594,"start_character":69,"end_line":1594,"end_character":70},"in_reply_to":"ff570b3c_37ac618b","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"e5c37ee04b0b3b1d35560c4884a1f455a07593f1","unresolved":false,"context_lines":[{"line_number":1544,"context_line":""},{"line_number":1545,"context_line":""},{"line_number":1546,"context_line":"class GetAmphoraeFromLoadbalancer(BaseDatabaseTask):"},{"line_number":1547,"context_line":"    \"\"\"Task to pull the listeners from a loadbalancer.\"\"\""},{"line_number":1548,"context_line":""},{"line_number":1549,"context_line":"    def execute(self, loadbalancer_id):"},{"line_number":1550,"context_line":"        \"\"\"Pull the amphorae from a loadbalancer."}],"source_content_type":"text/x-python","patch_set":45,"id":"bf51134e_44188bd2","line":1547,"range":{"start_line":1547,"start_character":24,"end_line":1547,"end_character":33},"updated":"2020-06-15 18:38:12.000000000","message":"amphorae","commit_id":"c4e15190b14bcbf5ee5cc2d5976a929427f126fe"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"99fa43f9450a38a4a5052973d825f06c5f8b248d","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        \"\"\"Update amphora failover details in the database."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        :param amphora: The amphora to update"},{"line_number":456,"context_line":"        :param amp_data: data_models.Amphora object with update data"},{"line_number":457,"context_line":"        :returns: None"},{"line_number":458,"context_line":"        \"\"\""},{"line_number":459,"context_line":"        # role and vrrp_priority will be updated later."}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_d888bbc7","line":456,"updated":"2020-06-18 14:14:53.000000000","message":"Docstring needs updating","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"54ac0fd0db862e848a53222c998681e466e952f9","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        \"\"\"Update amphora failover details in the database."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        :param amphora: The amphora to update"},{"line_number":456,"context_line":"        :param amp_data: data_models.Amphora object with update data"},{"line_number":457,"context_line":"        :returns: None"},{"line_number":458,"context_line":"        \"\"\""},{"line_number":459,"context_line":"        # role and vrrp_priority will be updated later."}],"source_content_type":"text/x-python","patch_set":46,"id":"bf51134e_d6e2382f","line":456,"in_reply_to":"bf51134e_d888bbc7","updated":"2020-06-18 23:13:14.000000000","message":"Done","commit_id":"a75a2786e06f61d044323c319d1cecc6af0aaeb0"}],"octavia/controller/worker/v1/tasks/network_tasks.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"e36a9ab8e393967718da6a04f65265b8ec833627","unresolved":false,"context_lines":[{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def execute(self, loadbalancer_id):"},{"line_number":532,"context_line":"        LOG.debug(\"Retrieving vip network details.\")"},{"line_number":533,"context_line":"        lb_repo \u003d repositories.LoadBalancerRepository()"},{"line_number":534,"context_line":"        loadbalancer \u003d lb_repo.get(db_apis.get_session(), id\u003dloadbalancer_id)"},{"line_number":535,"context_line":"        return self.network_driver.get_network_configs(loadbalancer)"},{"line_number":536,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"df33271e_c140cc38","line":533,"range":{"start_line":533,"start_character":8,"end_line":533,"end_character":55},"updated":"2020-03-26 13:03:47.000000000","message":"used multiple times - move to init?","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"19603595be82a3121eafc36976d297e139ae3cd5","unresolved":false,"context_lines":[{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    def execute(self, loadbalancer_id):"},{"line_number":532,"context_line":"        LOG.debug(\"Retrieving vip network details.\")"},{"line_number":533,"context_line":"        lb_repo \u003d repositories.LoadBalancerRepository()"},{"line_number":534,"context_line":"        loadbalancer \u003d lb_repo.get(db_apis.get_session(), id\u003dloadbalancer_id)"},{"line_number":535,"context_line":"        return self.network_driver.get_network_configs(loadbalancer)"},{"line_number":536,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3f4c43b2_0b94d48a","line":533,"range":{"start_line":533,"start_character":8,"end_line":533,"end_character":55},"in_reply_to":"df33271e_c140cc38","updated":"2020-04-13 23:50:31.000000000","message":"Done","commit_id":"2aed6f33749e5dc464a48b0bba91abc90ec1e6fd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":768,"context_line":"            if port.status \u003d\u003d constants.DOWN:"},{"line_number":769,"context_line":"                LOG.debug(\u0027Disabled port: %s\u0027, port_id)"},{"line_number":770,"context_line":"                return"},{"line_number":771,"context_line":"            LOG.debug(\u0027Port %s is %s instead of %s, waiting.\u0027,"},{"line_number":772,"context_line":"                      port_id, port.status, constants.DOWN)"},{"line_number":773,"context_line":"            time.sleep(CONF.networking.retry_interval)"},{"line_number":774,"context_line":"        LOG.error(\u0027Port %s failed to go DOWN. Port status is still %s. \u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_572d95fb","line":771,"range":{"start_line":771,"start_character":48,"end_line":771,"end_character":50},"updated":"2020-05-27 20:37:31.000000000","message":"nit: could just be DOWN as that is all this method does","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":768,"context_line":"            if port.status \u003d\u003d constants.DOWN:"},{"line_number":769,"context_line":"                LOG.debug(\u0027Disabled port: %s\u0027, port_id)"},{"line_number":770,"context_line":"                return"},{"line_number":771,"context_line":"            LOG.debug(\u0027Port %s is %s instead of %s, waiting.\u0027,"},{"line_number":772,"context_line":"                      port_id, port.status, constants.DOWN)"},{"line_number":773,"context_line":"            time.sleep(CONF.networking.retry_interval)"},{"line_number":774,"context_line":"        LOG.error(\u0027Port %s failed to go DOWN. Port status is still %s. \u0027"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_72e6ce18","line":771,"range":{"start_line":771,"start_character":48,"end_line":771,"end_character":50},"in_reply_to":"ff570b3c_572d95fb","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"2843d898acdb157b068c6bda81c447776a17daff","unresolved":false,"context_lines":[{"line_number":667,"context_line":"class DeletePort(BaseNetworkTask):"},{"line_number":668,"context_line":"    \"\"\"Task to delete a network port.\"\"\""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    @tenacity.retry(retry\u003dtenacity.retry_if_exception_type(),"},{"line_number":671,"context_line":"                    stop\u003dtenacity.stop_after_attempt(2),"},{"line_number":672,"context_line":"                    wait\u003dtenacity.wait_exponential(multiplier\u003d1, min\u003d1,"},{"line_number":673,"context_line":"                                                   max\u003d10), reraise\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":42,"id":"ff570b3c_0aa54e47","line":670,"updated":"2020-06-09 16:33:32.000000000","message":"A team decision from the PTG was to continue to add more retry/timeout configuration variables.","commit_id":"c01bc8d6bc08d741e416f796cf9eae8d56a8ae2a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"320019e42c3939ebc52ce4813c4fb884956a93d5","unresolved":false,"context_lines":[{"line_number":667,"context_line":"class DeletePort(BaseNetworkTask):"},{"line_number":668,"context_line":"    \"\"\"Task to delete a network port.\"\"\""},{"line_number":669,"context_line":""},{"line_number":670,"context_line":"    @tenacity.retry(retry\u003dtenacity.retry_if_exception_type(),"},{"line_number":671,"context_line":"                    stop\u003dtenacity.stop_after_attempt(2),"},{"line_number":672,"context_line":"                    wait\u003dtenacity.wait_exponential(multiplier\u003d1, min\u003d1,"},{"line_number":673,"context_line":"                                                   max\u003d10), reraise\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":42,"id":"ff570b3c_d126e668","line":670,"in_reply_to":"ff570b3c_0aa54e47","updated":"2020-06-11 01:52:47.000000000","message":"Done","commit_id":"c01bc8d6bc08d741e416f796cf9eae8d56a8ae2a"}],"octavia/controller/worker/v1/tasks/retry_tasks.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#  Copyright 2019 Red Hat, Inc. All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_d766c555","line":1,"range":{"start_line":1,"start_character":13,"end_line":1,"end_character":17},"updated":"2020-05-27 20:37:31.000000000","message":"s/2020, unless this change took this long :)","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#  Copyright 2019 Red Hat, Inc. All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_12b952e8","line":1,"range":{"start_line":1,"start_character":13,"end_line":1,"end_character":17},"in_reply_to":"ff570b3c_d766c555","updated":"2020-05-28 21:49:56.000000000","message":"It indeed did span the new year holiday.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"octavia/network/drivers/neutron/allowed_address_pairs.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"27223bfad694809898f09cf957f3a89cd6da6891","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                          load_balancer.vip.subnet_id,"},{"line_number":454,"context_line":"                          load_balancer.vip.network_id,"},{"line_number":455,"context_line":"                          port.fixed_ips, port.network_id)"},{"line_number":456,"context_line":"                self.delete_port(load_balancer.vip.port_id)"},{"line_number":457,"context_line":"            except base.PortNotFound:"},{"line_number":458,"context_line":"                LOG.warning(\u0027VIP port %s is missing from neutron. Rebuilding.\u0027,"},{"line_number":459,"context_line":"                            load_balancer.vip.port_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f4c43b2_52282b33","line":456,"updated":"2020-04-15 06:53:15.000000000","message":"During the create flow, if a user passes in their own port, this seems to detect a mismatch 100% of the time (because we didn\u0027t pick the IP address for the VIP yet so it\u0027s expecting None) and it will *delete a port we don\u0027t own*. This is ultra-bad.","commit_id":"5b8d64abdbcc34ecc0a81bc50e67fcc888ec0dc5"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2f42c85bb609ab0a11094291360ac5dfbb2a5716","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                          load_balancer.vip.subnet_id,"},{"line_number":454,"context_line":"                          load_balancer.vip.network_id,"},{"line_number":455,"context_line":"                          port.fixed_ips, port.network_id)"},{"line_number":456,"context_line":"                self.delete_port(load_balancer.vip.port_id)"},{"line_number":457,"context_line":"            except base.PortNotFound:"},{"line_number":458,"context_line":"                LOG.warning(\u0027VIP port %s is missing from neutron. Rebuilding.\u0027,"},{"line_number":459,"context_line":"                            load_balancer.vip.port_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f4c43b2_688d7330","line":456,"in_reply_to":"3f4c43b2_52282b33","updated":"2020-04-15 15:35:54.000000000","message":"We have a \"port owned by octavia\" field in the DB we should probably use.","commit_id":"5b8d64abdbcc34ecc0a81bc50e67fcc888ec0dc5"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"7da5f4ad3aa43824b026d5ef5c24dca0455c9bae","unresolved":false,"context_lines":[{"line_number":453,"context_line":"                          load_balancer.vip.subnet_id,"},{"line_number":454,"context_line":"                          load_balancer.vip.network_id,"},{"line_number":455,"context_line":"                          port.fixed_ips, port.network_id)"},{"line_number":456,"context_line":"                self.delete_port(load_balancer.vip.port_id)"},{"line_number":457,"context_line":"            except base.PortNotFound:"},{"line_number":458,"context_line":"                LOG.warning(\u0027VIP port %s is missing from neutron. Rebuilding.\u0027,"},{"line_number":459,"context_line":"                            load_balancer.vip.port_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"3f4c43b2_a6e160ff","line":456,"in_reply_to":"3f4c43b2_688d7330","updated":"2020-04-16 06:18:50.000000000","message":"Oh yep that\u0027d do it. :D","commit_id":"5b8d64abdbcc34ecc0a81bc50e67fcc888ec0dc5"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"e8944ea0c8a61861f40c747e48f3d03741389d49","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                          load_balancer.vip.network_id,"},{"line_number":464,"context_line":"                          self._fixed_ips_to_list_of_dicts(port.fixed_ips),"},{"line_number":465,"context_line":"                          port.network_id)"},{"line_number":466,"context_line":"                if load_balancer.vip.octavia_owned:"},{"line_number":467,"context_line":"                    self.delete_port(load_balancer.vip.port_id)"},{"line_number":468,"context_line":"                else:"},{"line_number":469,"context_line":"                    raise base.AllocateVIPException("}],"source_content_type":"text/x-python","patch_set":30,"id":"3f4c43b2_26bf10d1","line":466,"updated":"2020-04-16 06:23:15.000000000","message":"Cool yeah this looks good to me.","commit_id":"2db50e02506e73523f133b0d658bbe4441041246"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"34ff44fb3e57402c28aaf5c820cc706feabebaf4","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            security_group_id\u003dsec_grp_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        updated_ports \u003d []"},{"line_number":154,"context_line":"        for l in load_balancer.listeners:"},{"line_number":155,"context_line":"            if (l.provisioning_status in [constants.PENDING_DELETE,"},{"line_number":156,"context_line":"                                          constants.DELETED]):"},{"line_number":157,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":39,"id":"ff570b3c_e42fca9e","line":154,"updated":"2020-05-14 07:16:17.000000000","message":"pep8: E741 ambiguous variable name \u0027l\u0027","commit_id":"72f38d87f92a1e8bc33f136dfc9d27f552c9a819"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                    return self._port_to_vip(port, load_balancer)"},{"line_number":458,"context_line":"                LOG.error(\u0027Neutron VIP mis-match. Expected ip %s on \u0027"},{"line_number":459,"context_line":"                          \u0027subnet %s in network %s. Neutron has fixed_ips %s \u0027"},{"line_number":460,"context_line":"                          \u0027in network %s. Deleting and recreating the VIP \u0027"},{"line_number":461,"context_line":"                          \u0027port.\u0027, load_balancer.vip.ip_address,"},{"line_number":462,"context_line":"                          load_balancer.vip.subnet_id,"},{"line_number":463,"context_line":"                          load_balancer.vip.network_id,"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_f7d949f4","line":460,"range":{"start_line":460,"start_character":73,"end_line":460,"end_character":74},"updated":"2020-05-27 20:37:31.000000000","message":"nit: s/.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b7453b0c19d1c85dc84541a7bdee72cfb4bba78b","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                    return self._port_to_vip(port, load_balancer)"},{"line_number":458,"context_line":"                LOG.error(\u0027Neutron VIP mis-match. Expected ip %s on \u0027"},{"line_number":459,"context_line":"                          \u0027subnet %s in network %s. Neutron has fixed_ips %s \u0027"},{"line_number":460,"context_line":"                          \u0027in network %s. Deleting and recreating the VIP \u0027"},{"line_number":461,"context_line":"                          \u0027port.\u0027, load_balancer.vip.ip_address,"},{"line_number":462,"context_line":"                          load_balancer.vip.subnet_id,"},{"line_number":463,"context_line":"                          load_balancer.vip.network_id,"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_555a944f","line":460,"range":{"start_line":460,"start_character":73,"end_line":460,"end_character":74},"in_reply_to":"ff570b3c_12ae7297","updated":"2020-05-28 22:28:51.000000000","message":"I was in a review coma and didn\u0027t see \u0027port.\u0027 on the next line :)","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                    return self._port_to_vip(port, load_balancer)"},{"line_number":458,"context_line":"                LOG.error(\u0027Neutron VIP mis-match. Expected ip %s on \u0027"},{"line_number":459,"context_line":"                          \u0027subnet %s in network %s. Neutron has fixed_ips %s \u0027"},{"line_number":460,"context_line":"                          \u0027in network %s. Deleting and recreating the VIP \u0027"},{"line_number":461,"context_line":"                          \u0027port.\u0027, load_balancer.vip.ip_address,"},{"line_number":462,"context_line":"                          load_balancer.vip.subnet_id,"},{"line_number":463,"context_line":"                          load_balancer.vip.network_id,"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_12ae7297","line":460,"range":{"start_line":460,"start_character":73,"end_line":460,"end_character":74},"in_reply_to":"ff570b3c_f7d949f4","updated":"2020-05-28 21:49:56.000000000","message":"Not sure I understand this one. It is a space as the rest of the sentence is on the next line. If you are implying multiple vips, that patch has not merged and is not a parent of this chain.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4a9c0694b97571c04b7ce8dae34e9014f773838b","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import ipaddress"},{"line_number":16,"context_line":"import time"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_4481884a","side":"PARENT","line":14,"updated":"2020-06-10 05:23:15.000000000","message":"Generally, isn\u0027t there supposed to be a blank line here.","commit_id":"c9e9fd93356f8d6839dd5aa0299f14e5bb316a9f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"57224c55e53349037b5d050b696587b5b1105b23","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import ipaddress"},{"line_number":16,"context_line":"import time"},{"line_number":17,"context_line":""}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_503bf7c6","side":"PARENT","line":14,"in_reply_to":"ff570b3c_4481884a","updated":"2020-06-10 19:00:51.000000000","message":"It is not necessary and we have been removing them over time.","commit_id":"c9e9fd93356f8d6839dd5aa0299f14e5bb316a9f"}],"octavia/network/drivers/neutron/utils.py":[{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4a9c0694b97571c04b7ce8dae34e9014f773838b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from octavia.network import data_models as network_models"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def convert_subnet_dict_to_model(subnet_dict):"},{"line_number":21,"context_line":"    subnet \u003d subnet_dict.get(\u0027subnet\u0027, subnet_dict)"},{"line_number":22,"context_line":"    subnet_hrs \u003d subnet.get(\u0027host_routes\u0027, [])"},{"line_number":23,"context_line":"    host_routes \u003d [network_models.HostRoute(nexthop\u003dhr.get(\u0027nexthop\u0027),"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_846440e7","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":32},"updated":"2020-06-10 05:23:15.000000000","message":"I don\u0027t find anywhere call this method.","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"57224c55e53349037b5d050b696587b5b1105b23","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from octavia.network import data_models as network_models"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def convert_subnet_dict_to_model(subnet_dict):"},{"line_number":21,"context_line":"    subnet \u003d subnet_dict.get(\u0027subnet\u0027, subnet_dict)"},{"line_number":22,"context_line":"    subnet_hrs \u003d subnet.get(\u0027host_routes\u0027, [])"},{"line_number":23,"context_line":"    host_routes \u003d [network_models.HostRoute(nexthop\u003dhr.get(\u0027nexthop\u0027),"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_b061b3d6","line":20,"range":{"start_line":20,"start_character":4,"end_line":20,"end_character":32},"in_reply_to":"ff570b3c_846440e7","updated":"2020-06-10 19:00:51.000000000","message":"This is true, I don\u0027t see it either. It probably can be removed.\nThis was just part of cleaning up this file to use constants instead of strings. My search and replace matched on these lines as well as the ones I was working on below.","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"4a9c0694b97571c04b7ce8dae34e9014f773838b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    return network_models.Subnet(id\u003dsubnet.get(constants.ID),"},{"line_number":27,"context_line":"                                 name\u003dsubnet.get(constants.NAME),"},{"line_number":28,"context_line":"                                 network_id\u003dsubnet.get(\u0027network_id\u0027),"},{"line_number":29,"context_line":"                                 project_id\u003dsubnet.get(constants.TENANT_ID),"},{"line_number":30,"context_line":"                                 gateway_ip\u003dsubnet.get(\u0027gateway_ip\u0027),"},{"line_number":31,"context_line":"                                 cidr\u003dsubnet.get(\u0027cidr\u0027),"},{"line_number":32,"context_line":"                                 ip_version\u003dsubnet.get(\u0027ip_version\u0027),"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_2474549c","line":29,"range":{"start_line":29,"start_character":65,"end_line":29,"end_character":74},"updated":"2020-06-10 05:23:15.000000000","message":"Why not use PROJECT_ID?","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"57224c55e53349037b5d050b696587b5b1105b23","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    return network_models.Subnet(id\u003dsubnet.get(constants.ID),"},{"line_number":27,"context_line":"                                 name\u003dsubnet.get(constants.NAME),"},{"line_number":28,"context_line":"                                 network_id\u003dsubnet.get(\u0027network_id\u0027),"},{"line_number":29,"context_line":"                                 project_id\u003dsubnet.get(constants.TENANT_ID),"},{"line_number":30,"context_line":"                                 gateway_ip\u003dsubnet.get(\u0027gateway_ip\u0027),"},{"line_number":31,"context_line":"                                 cidr\u003dsubnet.get(\u0027cidr\u0027),"},{"line_number":32,"context_line":"                                 ip_version\u003dsubnet.get(\u0027ip_version\u0027),"}],"source_content_type":"text/x-python","patch_set":43,"id":"ff570b3c_d078a790","line":29,"range":{"start_line":29,"start_character":65,"end_line":29,"end_character":74},"in_reply_to":"ff570b3c_2474549c","updated":"2020-06-10 19:00:51.000000000","message":"Neutron still uses tenant_id in their client.","commit_id":"a1368d3ad1ce5d6c1a90645292b923b92b4ee4e4"}],"octavia/tests/unit/amphorae/drivers/test_noop_amphoraloadbalancer_driver.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.listener.id \u003d uuidutils.generate_uuid()"},{"line_number":50,"context_line":"        self.listener.protocol_port \u003d 80"},{"line_number":51,"context_line":"        self.vip \u003d data_models.Vip()"},{"line_number":52,"context_line":"        self.vip.ip_address \u003d \"192.51.100..1\""},{"line_number":53,"context_line":"        self.amphora \u003d data_models.Amphora()"},{"line_number":54,"context_line":"        self.amphora.id \u003d self.FAKE_UUID_1"},{"line_number":55,"context_line":"        self.load_balancer \u003d data_models.LoadBalancer("}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_372e21a5","line":52,"range":{"start_line":52,"start_character":38,"end_line":52,"end_character":44},"updated":"2020-05-27 20:37:31.000000000","message":"typo","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        self.listener.id \u003d uuidutils.generate_uuid()"},{"line_number":50,"context_line":"        self.listener.protocol_port \u003d 80"},{"line_number":51,"context_line":"        self.vip \u003d data_models.Vip()"},{"line_number":52,"context_line":"        self.vip.ip_address \u003d \"192.51.100..1\""},{"line_number":53,"context_line":"        self.amphora \u003d data_models.Amphora()"},{"line_number":54,"context_line":"        self.amphora.id \u003d self.FAKE_UUID_1"},{"line_number":55,"context_line":"        self.load_balancer \u003d data_models.LoadBalancer("}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_b29ea660","line":52,"range":{"start_line":52,"start_character":38,"end_line":52,"end_character":44},"in_reply_to":"ff570b3c_372e21a5","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"octavia/tests/unit/compute/drivers/test_nova_driver.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            nova_exceptions.Conflict(\u0027test_exception\u0027),"},{"line_number":450,"context_line":"            nova_exceptions.Conflict(\u0027test_exception\u0027),"},{"line_number":451,"context_line":"            nova_exceptions.Conflict(\u0027test_exception\u0027),"},{"line_number":452,"context_line":"            nova_exceptions.Conflict(\u0027test_exception\u0027)]"},{"line_number":453,"context_line":"        interface_mock \u003d mock.MagicMock()"},{"line_number":454,"context_line":"        interface_mock.id \u003d self.port_id"},{"line_number":455,"context_line":"        bad_interface_mock \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_7a4c0076","line":452,"updated":"2020-05-27 20:37:31.000000000","message":"I thought you could just set side_effect once if it was always going to be the same?","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":449,"context_line":"            nova_exceptions.Conflict(\u0027test_exception\u0027),"},{"line_number":450,"context_line":"            nova_exceptions.Conflict(\u0027test_exception\u0027),"},{"line_number":451,"context_line":"            nova_exceptions.Conflict(\u0027test_exception\u0027),"},{"line_number":452,"context_line":"            nova_exceptions.Conflict(\u0027test_exception\u0027)]"},{"line_number":453,"context_line":"        interface_mock \u003d mock.MagicMock()"},{"line_number":454,"context_line":"        interface_mock.id \u003d self.port_id"},{"line_number":455,"context_line":"        bad_interface_mock \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":40,"id":"ff570b3c_32e736e7","line":452,"in_reply_to":"ff570b3c_7a4c0076","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"releasenotes/notes/refactor_failover_flow-9efcd854240f71ad.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The failover improvements do not require an updated  amphora image,"},{"line_number":5,"context_line":"    but updating existing amphora will minimize the failover"},{"line_number":6,"context_line":"    outage time for standalone amphora on subsequent failovers."},{"line_number":7,"context_line":"fixes:"}],"source_content_type":"text/x-yaml","patch_set":40,"id":"ff570b3c_5a9dbcb9","line":4,"range":{"start_line":4,"start_character":55,"end_line":4,"end_character":56},"updated":"2020-05-27 20:37:31.000000000","message":"extra space","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The failover improvements do not require an updated  amphora image,"},{"line_number":5,"context_line":"    but updating existing amphora will minimize the failover"},{"line_number":6,"context_line":"    outage time for standalone amphora on subsequent failovers."},{"line_number":7,"context_line":"fixes:"}],"source_content_type":"text/x-yaml","patch_set":40,"id":"ff570b3c_b2da2614","line":4,"range":{"start_line":4,"start_character":55,"end_line":4,"end_character":56},"in_reply_to":"ff570b3c_5a9dbcb9","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6ad160df2eadd5bff618995220276215f37039f2","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    Significantly improved the reliability and performance of amphora"},{"line_number":10,"context_line":"    and load balancer failovers. This is especially true when the"},{"line_number":11,"context_line":"    nova service is experiencing failures."}],"source_content_type":"text/x-yaml","patch_set":40,"id":"ff570b3c_faadb0ea","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":5},"updated":"2020-05-27 20:37:31.000000000","message":"s/Nova","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  - |"},{"line_number":9,"context_line":"    Significantly improved the reliability and performance of amphora"},{"line_number":10,"context_line":"    and load balancer failovers. This is especially true when the"},{"line_number":11,"context_line":"    nova service is experiencing failures."}],"source_content_type":"text/x-yaml","patch_set":40,"id":"ff570b3c_92d562e8","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":5},"in_reply_to":"ff570b3c_faadb0ea","updated":"2020-05-28 21:49:56.000000000","message":"Done","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}],"tools/flow-list.txt":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"6bd471d84e53b9f19602d537b7ac7d6c75c7de77","unresolved":false,"context_lines":[{"line_number":9,"context_line":"octavia.controller.worker.v1.flows.load_balancer_flows LoadBalancerFlows get_delete_load_balancer_flow"},{"line_number":10,"context_line":"octavia.controller.worker.v1.flows.load_balancer_flows LoadBalancerFlows get_cascade_delete_load_balancer_flow"},{"line_number":11,"context_line":"octavia.controller.worker.v1.flows.load_balancer_flows LoadBalancerFlows get_update_load_balancer_flow"},{"line_number":12,"context_line":"octavia.controller.worker.v1.flows.load_balancer_flows LoadBalancerFlows get_failover_LB_flow"},{"line_number":13,"context_line":"octavia.controller.worker.v1.flows.listener_flows ListenerFlows get_create_listener_flow"},{"line_number":14,"context_line":"octavia.controller.worker.v1.flows.listener_flows ListenerFlows get_create_all_listeners_flow"},{"line_number":15,"context_line":"octavia.controller.worker.v1.flows.listener_flows ListenerFlows get_delete_listener_flow"}],"source_content_type":"text/plain","patch_set":40,"id":"ff570b3c_87ca506b","line":12,"range":{"start_line":12,"start_character":73,"end_line":12,"end_character":93},"updated":"2020-05-28 15:14:35.000000000","message":"Ditto. For consistency, method name would be \u0027get_failover_load_balancer_flow\u0027","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"2e6c72cff325426a019b60c1cbb509716ac6e278","unresolved":false,"context_lines":[{"line_number":9,"context_line":"octavia.controller.worker.v1.flows.load_balancer_flows LoadBalancerFlows get_delete_load_balancer_flow"},{"line_number":10,"context_line":"octavia.controller.worker.v1.flows.load_balancer_flows LoadBalancerFlows get_cascade_delete_load_balancer_flow"},{"line_number":11,"context_line":"octavia.controller.worker.v1.flows.load_balancer_flows LoadBalancerFlows get_update_load_balancer_flow"},{"line_number":12,"context_line":"octavia.controller.worker.v1.flows.load_balancer_flows LoadBalancerFlows get_failover_LB_flow"},{"line_number":13,"context_line":"octavia.controller.worker.v1.flows.listener_flows ListenerFlows get_create_listener_flow"},{"line_number":14,"context_line":"octavia.controller.worker.v1.flows.listener_flows ListenerFlows get_create_all_listeners_flow"},{"line_number":15,"context_line":"octavia.controller.worker.v1.flows.listener_flows ListenerFlows get_delete_listener_flow"}],"source_content_type":"text/plain","patch_set":40,"id":"ff570b3c_12031275","line":12,"range":{"start_line":12,"start_character":73,"end_line":12,"end_character":93},"in_reply_to":"ff570b3c_87ca506b","updated":"2020-05-28 21:49:56.000000000","message":"Same comment as above, I don\u0027t think this is necessarily inconsistent. If you feel strongly about it, raise it again.","commit_id":"f8a680a96445b4610e2795d2d0c254e94bced276"}]}
