)]}'
{"__init__.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"27d99715c240d9528e5410aacc8e968be180cf32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5f93b717_d5478976","updated":"2018-02-01 19:30:45.000000000","message":"This file should not exist (it is what is causing your gates to fail).\nThe python module does not start at this level.","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"5f93b717_e32d2295","in_reply_to":"5f93b717_d5478976","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"}],"etc/octavia.conf":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":230,"context_line":"#"},{"line_number":231,"context_line":"# BGP driver for L3 active active topology"},{"line_number":232,"context_line":"#"},{"line_number":233,"context_line":"# bgp_driver \u003d exabgp_rest_api_driver"},{"line_number":234,"context_line":"#"},{"line_number":235,"context_line":"# Load balancer topology options are SINGLE, ACTIVE_STANDBY"},{"line_number":236,"context_line":"# loadbalancer_topology \u003d SINGLE"}],"source_content_type":"text/plain","patch_set":23,"id":"3fa0c359_1a718776","line":233,"updated":"2018-02-14 02:40:42.000000000","message":"What is this?","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":390,"context_line":"# default_pool_quota \u003d -1"},{"line_number":391,"context_line":"# default_health_monitor_quota \u003d -1"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"[speaker1]"},{"line_number":394,"context_line":"# local_as \u003d"},{"line_number":395,"context_line":"# list of peer section id\u0027s"},{"line_number":396,"context_line":"# peers \u003d peer1,"}],"source_content_type":"text/plain","patch_set":23,"id":"3fa0c359_7a30cb9f","line":393,"range":{"start_line":393,"start_character":1,"end_line":393,"end_character":9},"updated":"2018-02-14 02:40:42.000000000","message":"Why speaker1?","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/common/config.py":[{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":548,"context_line":"speaker_opts \u003d ["},{"line_number":549,"context_line":"    cfg.IntOpt(\u0027local_as\u0027, default\u003d65572,"},{"line_number":550,"context_line":"               help\u003d_(\u0027AS value for speaker\u0027)),"},{"line_number":551,"context_line":"    cfg.ListOpt(\u0027peers\u0027, default\u003d\u0027peer1\u0027,"},{"line_number":552,"context_line":"                help\u003d_(\u0027list of peers\u0027))"},{"line_number":553,"context_line":"]"},{"line_number":554,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_1180b745","line":551,"range":{"start_line":551,"start_character":33,"end_line":551,"end_character":39},"updated":"2018-02-01 07:56:57.000000000","message":"default should be blank","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":548,"context_line":"speaker_opts \u003d ["},{"line_number":549,"context_line":"    cfg.IntOpt(\u0027local_as\u0027, default\u003d65572,"},{"line_number":550,"context_line":"               help\u003d_(\u0027AS value for speaker\u0027)),"},{"line_number":551,"context_line":"    cfg.ListOpt(\u0027peers\u0027, default\u003d\u0027peer1\u0027,"},{"line_number":552,"context_line":"                help\u003d_(\u0027list of peers\u0027))"},{"line_number":553,"context_line":"]"},{"line_number":554,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_c32a667d","line":551,"range":{"start_line":551,"start_character":33,"end_line":551,"end_character":39},"in_reply_to":"5f93b717_1180b745","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":563,"context_line":"               help\u003d_(\u0027Keepalive interval value\u0027)),"},{"line_number":564,"context_line":"    cfg.StrOpt(\u0027md5-password\u0027, default\u003d\u0027\u0027,"},{"line_number":565,"context_line":"               help\u003d_(\u0027my md5 password\u0027)),"},{"line_number":566,"context_line":"    cfg.IPOpt(\u0027peer_ip\u0027, default\u003d\u0027127.0.0.1\u0027,"},{"line_number":567,"context_line":"              help\u003d_(\u0027IP address of peer\u0027))"},{"line_number":568,"context_line":"]"},{"line_number":569,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_b19a23b6","line":566,"range":{"start_line":566,"start_character":34,"end_line":566,"end_character":43},"updated":"2018-02-01 07:56:57.000000000","message":"default peer ip should be blank","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    cfg.StrOpt(\u0027distributor_driver\u0027,"},{"line_number":335,"context_line":"               default\u003d\u0027distributor_noop_driver\u0027,"},{"line_number":336,"context_line":"               help\u003d_(\u0027Name of the distributor driver to use\u0027)),"},{"line_number":337,"context_line":"    cfg.StrOpt(\u0027bgp_driver\u0027,"},{"line_number":338,"context_line":"               default\u003d\u0027amphora_noop_driver\u0027,"},{"line_number":339,"context_line":"               help\u003d_(\u0027Name of bgp_driver to use\u0027)),"},{"line_number":340,"context_line":"    cfg.StrOpt(\u0027loadbalancer_topology\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_fa237b54","line":337,"updated":"2018-02-14 02:40:42.000000000","message":"What is this?","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":335,"context_line":"               default\u003d\u0027distributor_noop_driver\u0027,"},{"line_number":336,"context_line":"               help\u003d_(\u0027Name of the distributor driver to use\u0027)),"},{"line_number":337,"context_line":"    cfg.StrOpt(\u0027bgp_driver\u0027,"},{"line_number":338,"context_line":"               default\u003d\u0027amphora_noop_driver\u0027,"},{"line_number":339,"context_line":"               help\u003d_(\u0027Name of bgp_driver to use\u0027)),"},{"line_number":340,"context_line":"    cfg.StrOpt(\u0027loadbalancer_topology\u0027,"},{"line_number":341,"context_line":"               default\u003dconstants.TOPOLOGY_SINGLE,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_1a1f4708","line":338,"updated":"2018-02-14 02:40:42.000000000","message":"amp noop?","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":545,"context_line":"]"},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"# Options only used by the L3 Active/Active"},{"line_number":548,"context_line":"speaker_opts \u003d ["},{"line_number":549,"context_line":"    cfg.IntOpt(\u0027local_as\u0027, default\u003d65572,"},{"line_number":550,"context_line":"               help\u003d_(\u0027AS value for speaker\u0027)),"},{"line_number":551,"context_line":"    cfg.ListOpt(\u0027peers\u0027, default\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_da147feb","line":548,"updated":"2018-02-14 02:40:42.000000000","message":"This list does not match the etc/octavia.conf","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":588,"context_line":"cfg.CONF.register_opts(quota_opts, group\u003d\u0027quotas\u0027)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":""},{"line_number":591,"context_line":"# Registering L3 Active Active configuration options"},{"line_number":592,"context_line":"sections \u003d cfg.CONF.list_all_sections()"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"for section in sections:"},{"line_number":595,"context_line":"    if section.find(\u0027speaker\u0027) \u003e\u003d 0:"},{"line_number":596,"context_line":"        cfg.CONF.register_opts(speaker_opts, group\u003dsection)"},{"line_number":597,"context_line":"        peer_list \u003d cfg.CONF.get(section).peers"},{"line_number":598,"context_line":"        for peer in peer_list:"},{"line_number":599,"context_line":"            cfg.CONF.register_opts(peer_opts, group\u003dpeer)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"# Ensure that the control exchange is set correctly"},{"line_number":602,"context_line":"messaging.set_transport_defaults(control_exchange\u003d\u0027octavia\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_5ab38fe9","line":599,"range":{"start_line":591,"start_character":0,"end_line":599,"end_character":57},"updated":"2018-02-14 02:40:42.000000000","message":"Why is this necessary? Why can\u0027t you just put them above like all of the others?","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/common/constants.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":312,"context_line":"RELOAD_LB_AFTER_AMP_ASSOC \u003d \u0027reload-lb-after-amp-assoc\u0027"},{"line_number":313,"context_line":"RELOAD_LB_AFTER_AMP_ASSOC_FULL_GRAPH \u003d \u0027reload-lb-after-amp-assoc-full-graph\u0027"},{"line_number":314,"context_line":"RELOAD_LB_AFTER_PLUG_VIP \u003d \u0027reload-lb-after-plug-vip\u0027"},{"line_number":315,"context_line":"MARK_DISTRIBUTOR_DELETE \u003d \u0027mark-distributor-delete\u0027"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"NOVA_1 \u003d \u00271.1\u0027"},{"line_number":318,"context_line":"NOVA_21 \u003d \u00272.1\u0027"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_bac3b337","line":315,"range":{"start_line":315,"start_character":17,"end_line":315,"end_character":23},"updated":"2018-02-14 02:40:42.000000000","message":"DELETED?","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/controller/worker/flows/load_balancer_flows.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            vrrp_subflow \u003d self.amp_flows.get_vrrp_subflow(prefix)"},{"line_number":183,"context_line":"            post_create_LB_flow.add(vrrp_subflow)"},{"line_number":184,"context_line":"        elif topology \u003d\u003d constants.TOPOLOGY_ACTIVE_ACTIVE:"},{"line_number":185,"context_line":"            disributor_subflow \u003d ("},{"line_number":186,"context_line":"                self.distributor_flows.get_create_distributor_flow())"},{"line_number":187,"context_line":"            post_create_LB_flow.add(disributor_subflow)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_7d78c58e","line":185,"updated":"2018-02-14 02:40:42.000000000","message":"This is ok for now, but eventually we need this to be a stevedore driver loader to pull in the driver.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            requires\u003dconstants.LOADBALANCER))"},{"line_number":230,"context_line":"        delete_LB_flow.add(listeners_delete)"},{"line_number":231,"context_line":"        if lb.topology \u003d\u003d constants.TOPOLOGY_ACTIVE_ACTIVE:"},{"line_number":232,"context_line":"            delete_disributor_subflow \u003d ("},{"line_number":233,"context_line":"                self.distributor_flows.get_delete_distributor_flow("},{"line_number":234,"context_line":"                    lb.distributor_id))"},{"line_number":235,"context_line":"            delete_LB_flow.add(delete_disributor_subflow)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_9d7b518a","line":232,"range":{"start_line":232,"start_character":12,"end_line":232,"end_character":41},"updated":"2018-02-14 02:40:42.000000000","message":"Same","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/distributor/distributor_flows.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"3fa0c359_5d7149a7","updated":"2018-02-14 02:40:42.000000000","message":"octavia/distributor/drivers/l3_driver/driver.py","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":27,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class DistributorFlows(object):"},{"line_number":31,"context_line":"    def __init__(self):"},{"line_number":32,"context_line":"        # for some reason only this has the values from the config file"},{"line_number":33,"context_line":"        self.DISTRIBUTOR_DRIVER \u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_5d58692f","line":30,"range":{"start_line":30,"start_character":6,"end_line":30,"end_character":22},"updated":"2018-02-14 02:40:42.000000000","message":"You are just creating a driver, not the flows for everything.\nL3DistributorDriver(driver_base.DistributorDriver)","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class DistributorFlows(object):"},{"line_number":31,"context_line":"    def __init__(self):"},{"line_number":32,"context_line":"        # for some reason only this has the values from the config file"},{"line_number":33,"context_line":"        self.DISTRIBUTOR_DRIVER \u003d ("},{"line_number":34,"context_line":"            CONF.controller_worker.distributor_driver \u003d\u003d"},{"line_number":35,"context_line":"            \u0027distributor_noop_driver\u0027)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def get_create_distributor_flow(self):"},{"line_number":38,"context_line":"        \"\"\"Creates a flow to create an distributor."}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_9a1917d8","line":35,"range":{"start_line":31,"start_character":0,"end_line":35,"end_character":38},"updated":"2018-02-14 02:40:42.000000000","message":"This should not be needed. This resolves to true by default right?\nNot sure I understand how you are using this in the code below.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        :returns: The flow for creating the distributor"},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        LOG.debug(\u0027Distributor %s create_distributor\u0027,"},{"line_number":44,"context_line":"                  self.__class__.__name__)"},{"line_number":45,"context_line":"        create_distributor_flow \u003d linear_flow.Flow("},{"line_number":46,"context_line":"            constants.CREATE_DISTRIBUTOR_FLOW)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_daf6bf5d","line":43,"range":{"start_line":43,"start_character":19,"end_line":43,"end_character":52},"updated":"2018-02-14 02:40:42.000000000","message":"We might want to at \"get\" to this as this log will go in at flow creation time, not flow run time.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        create_distributor_flow.add(database_tasks.CreateDistributorInDB("},{"line_number":48,"context_line":"            provides\u003dconstants.DISTRIBUTOR_ID))"},{"line_number":49,"context_line":"        create_distributor_flow.add("},{"line_number":50,"context_line":"            database_tasks.AssociateAmpDistributorInDB("},{"line_number":51,"context_line":"                requires\u003d(constants.DISTRIBUTOR_ID, constants.LOADBALANCER)))"},{"line_number":52,"context_line":"        if self.DISTRIBUTOR_DRIVER \u003d\u003d constants.DISTRIBUTOR_L3_DRIVER:"},{"line_number":53,"context_line":"            create_distributor_flow.add("}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_ba4df3c4","line":50,"range":{"start_line":50,"start_character":27,"end_line":50,"end_character":54},"updated":"2018-02-14 02:40:42.000000000","message":"You aren\u0027t using amphora distributors right? so this should be inside the type conditional\nIf you are thinking this is associating a load balancing amphora with the distributor, that isn\u0027t done here right? That would be done in \"register amphora\" I think","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            provides\u003dconstants.DISTRIBUTOR_ID))"},{"line_number":49,"context_line":"        create_distributor_flow.add("},{"line_number":50,"context_line":"            database_tasks.AssociateAmpDistributorInDB("},{"line_number":51,"context_line":"                requires\u003d(constants.DISTRIBUTOR_ID, constants.LOADBALANCER)))"},{"line_number":52,"context_line":"        if self.DISTRIBUTOR_DRIVER \u003d\u003d constants.DISTRIBUTOR_L3_DRIVER:"},{"line_number":53,"context_line":"            create_distributor_flow.add("},{"line_number":54,"context_line":"                l3_driver.get_create_distributor_subflow())"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_fadcdbe4","line":51,"range":{"start_line":51,"start_character":52,"end_line":51,"end_character":74},"updated":"2018-02-14 02:40:42.000000000","message":"Not here","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        create_distributor_flow.add("},{"line_number":50,"context_line":"            database_tasks.AssociateAmpDistributorInDB("},{"line_number":51,"context_line":"                requires\u003d(constants.DISTRIBUTOR_ID, constants.LOADBALANCER)))"},{"line_number":52,"context_line":"        if self.DISTRIBUTOR_DRIVER \u003d\u003d constants.DISTRIBUTOR_L3_DRIVER:"},{"line_number":53,"context_line":"            create_distributor_flow.add("},{"line_number":54,"context_line":"                l3_driver.get_create_distributor_subflow())"},{"line_number":55,"context_line":"        elif self.DISTRIBUTOR_DRIVER \u003d\u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_fa0ffb33","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":70},"updated":"2018-02-14 02:40:42.000000000","message":"So, the way the base driver is written, your driver implements this method, so there is no need for this conditional, but the time this code runs the distributor driver is already selected.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        create_distributor_flow.add("},{"line_number":50,"context_line":"            database_tasks.AssociateAmpDistributorInDB("},{"line_number":51,"context_line":"                requires\u003d(constants.DISTRIBUTOR_ID, constants.LOADBALANCER)))"},{"line_number":52,"context_line":"        if self.DISTRIBUTOR_DRIVER \u003d\u003d constants.DISTRIBUTOR_L3_DRIVER:"},{"line_number":53,"context_line":"            create_distributor_flow.add("},{"line_number":54,"context_line":"                l3_driver.get_create_distributor_subflow())"},{"line_number":55,"context_line":"        elif self.DISTRIBUTOR_DRIVER \u003d\u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_da1a3fc4","line":52,"range":{"start_line":52,"start_character":11,"end_line":52,"end_character":69},"updated":"2018-02-14 02:40:42.000000000","message":"This doesn\u0027t make sense to me with the above True/False","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        elif self.DISTRIBUTOR_DRIVER \u003d\u003d ("},{"line_number":56,"context_line":"                constants.DISTRIBUTOR_SINGLE_VIP_AMPHORA):"},{"line_number":57,"context_line":"            pass"},{"line_number":58,"context_line":"        else:"},{"line_number":59,"context_line":"            # distributor_noop_driver"},{"line_number":60,"context_line":"            pass"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_7a644b4a","line":58,"range":{"start_line":58,"start_character":8,"end_line":58,"end_character":13},"updated":"2018-02-14 02:40:42.000000000","message":"Typically I like the else to raise an error as it means a mis-configuration. Someone put in an invalid driver config.\nThough sometimes we can catch that with config validation.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        return create_distributor_flow"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def get_delete_distributor_flow(self, distributor_id):"},{"line_number":65,"context_line":"        LOG.debug(\u0027Distributor %s delete_distributor\u0027,"},{"line_number":66,"context_line":"                  self.__class__.__name__)"},{"line_number":67,"context_line":"        delete_distributor_flow \u003d linear_flow.Flow("}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_9a9a7711","line":64,"range":{"start_line":64,"start_character":42,"end_line":64,"end_character":56},"updated":"2018-02-14 02:40:42.000000000","message":"Are you intending to lookup the distributor by it\u0027s ID from the database to find out it\u0027s type? If you already have the type where this is called, maybe just pass in the type and not the ID.\nThis is only available at flow creation time, this will not be present at flow runtime.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        LOG.debug(\u0027Distributor %s delete_distributor\u0027,"},{"line_number":66,"context_line":"                  self.__class__.__name__)"},{"line_number":67,"context_line":"        delete_distributor_flow \u003d linear_flow.Flow("},{"line_number":68,"context_line":"            constants.MARK_DISTRIBUTOR_DELETE)"},{"line_number":69,"context_line":"        delete_distributor_flow.add("},{"line_number":70,"context_line":"            database_tasks.MarkDistributorDeletedInDB("},{"line_number":71,"context_line":"                requires\u003dconstants.DISTRIBUTOR_ID))"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_5a470f78","line":68,"range":{"start_line":68,"start_character":22,"end_line":68,"end_character":45},"updated":"2018-02-14 02:40:42.000000000","message":"This isn\u0027t a MARK task or flow. (MARK tasks are state update tasks that change an object state in the database)\nDISTRIBUTOR_DELETE_FLOW?","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        delete_distributor_flow \u003d linear_flow.Flow("},{"line_number":68,"context_line":"            constants.MARK_DISTRIBUTOR_DELETE)"},{"line_number":69,"context_line":"        delete_distributor_flow.add("},{"line_number":70,"context_line":"            database_tasks.MarkDistributorDeletedInDB("},{"line_number":71,"context_line":"                requires\u003dconstants.DISTRIBUTOR_ID))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        if self.DISTRIBUTOR_DRIVER \u003d\u003d constants.DISTRIBUTOR_L3_DRIVER:"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_1a22e7b9","line":70,"range":{"start_line":70,"start_character":27,"end_line":70,"end_character":53},"updated":"2018-02-14 02:40:42.000000000","message":"We don\u0027t want to do this until it is actually deleted. This is typically the last step in the flow. Otherwise status checks via API or other calls will see it deleted even though it is really still running.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        register_amphorae_flow \u003d linear_flow.Flow("},{"line_number":90,"context_line":"            constants.REGISTER_AMPHORAE_FLOW)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        if self.DISTRIBUTOR_DRIVER \u003d\u003d constants.DISTRIBUTOR_L3_DRIVER:"},{"line_number":93,"context_line":"            register_amphorae_flow.add("},{"line_number":94,"context_line":"                l3_driver.get_register_amphorae_subflow())"},{"line_number":95,"context_line":"        elif self.DISTRIBUTOR_DRIVER \u003d\u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_dd5c791a","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":70},"updated":"2018-02-14 02:40:42.000000000","message":"Same, your driver will only implement it\u0027s flow.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        unregister_amphorae_flow \u003d linear_flow.Flow("},{"line_number":113,"context_line":"            constants.UNREGISTER_AMPHORAE_FLOW)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if self.DISTRIBUTOR_DRIVER \u003d\u003d constants.DISTRIBUTOR_L3_DRIVER:"},{"line_number":116,"context_line":"            unregister_amphorae_flow.add("},{"line_number":117,"context_line":"                l3_driver.get_unregister_amphorae_subflow())"},{"line_number":118,"context_line":"        elif self.DISTRIBUTOR_DRIVER \u003d\u003d ("}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_9da031f6","line":115,"range":{"start_line":115,"start_character":8,"end_line":115,"end_character":70},"updated":"2018-02-14 02:40:42.000000000","message":"Same, your driver will only implement it\u0027s flow.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/distributor/drivers/common/task_utils.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self, **kwargs):"},{"line_number":27,"context_line":"        self.distributor_repo \u003d repo.DistributorRepository()"},{"line_number":28,"context_line":"        self.loadbalancer_repo \u003d repo.LoadBalancerRepository()"},{"line_number":29,"context_line":"        super(TaskUtils, self).__init__(**kwargs)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def mark_distributor_prov_status_error(self, distributor_id):"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_3d7c7d70","line":28,"range":{"start_line":28,"start_character":8,"end_line":28,"end_character":62},"updated":"2018-02-14 02:40:42.000000000","message":"Not used","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/distributor/drivers/common/tasks/database_tasks.py":[{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return distributor.id"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def revert(self, distributor_id, *args, **kwargs):"},{"line_number":66,"context_line":"        \"\"\"Mark the distribuor as broken and ready to be cleaned up."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        :param distributor_id: Distributor that failed to update"},{"line_number":69,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_91e04728","line":66,"range":{"start_line":66,"start_character":20,"end_line":66,"end_character":30},"updated":"2018-02-01 07:56:57.000000000","message":"typo","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return distributor.id"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def revert(self, distributor_id, *args, **kwargs):"},{"line_number":66,"context_line":"        \"\"\"Mark the distribuor as broken and ready to be cleaned up."},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        :param distributor_id: Distributor that failed to update"},{"line_number":69,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_c34fc668","line":66,"range":{"start_line":66,"start_character":20,"end_line":66,"end_character":30},"in_reply_to":"5f93b717_91e04728","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        self.repos \u003d repo.Repositories()"},{"line_number":37,"context_line":"        self.distributor_repo \u003d repo.DistributorRepository()"},{"line_number":38,"context_line":"        self.amphora_repo \u003d repo.AmphoraRepository()"},{"line_number":39,"context_line":"        self.loadbalancer_repo \u003d repo.LoadBalancerRepository()"},{"line_number":40,"context_line":"        self.task_utils \u003d task_utilities.TaskUtils()"},{"line_number":41,"context_line":"        self.dist_task_utils \u003d dist_task_utils.TaskUtils()"},{"line_number":42,"context_line":"        super(BaseDatabaseTask, self).__init__(**kwargs)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_5df4e9f0","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":62},"updated":"2018-02-14 02:40:42.000000000","message":"Not used","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.distributor_repo \u003d repo.DistributorRepository()"},{"line_number":38,"context_line":"        self.amphora_repo \u003d repo.AmphoraRepository()"},{"line_number":39,"context_line":"        self.loadbalancer_repo \u003d repo.LoadBalancerRepository()"},{"line_number":40,"context_line":"        self.task_utils \u003d task_utilities.TaskUtils()"},{"line_number":41,"context_line":"        self.dist_task_utils \u003d dist_task_utils.TaskUtils()"},{"line_number":42,"context_line":"        super(BaseDatabaseTask, self).__init__(**kwargs)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_dd4d593b","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":52},"updated":"2018-02-14 02:40:42.000000000","message":"Not used","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        distributor \u003d self.distributor_repo.create("},{"line_number":55,"context_line":"            db_apis.get_session(),"},{"line_number":56,"context_line":"            id\u003duuidutils.generate_uuid(),"},{"line_number":57,"context_line":"            distributor_driver\u003dCONF.controller_worker.distributor_driver,"},{"line_number":58,"context_line":"            topology\u003dconstants.TOPOLOGY_ACTIVE_ACTIVE,"},{"line_number":59,"context_line":"            provisioning_status\u003dconstants.ACTIVE,"},{"line_number":60,"context_line":"            operational_status\u003dconstants.ONLINE)"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_9dd7d14b","line":57,"range":{"start_line":57,"start_character":31,"end_line":57,"end_character":72},"updated":"2018-02-14 02:40:42.000000000","message":"You might want to store this in the flow memory at the \"create_loadbalancer\" method in controler_work.py.\nThat way we just need to set it there based on the flavor information when this is set via flavors.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            db_apis.get_session(),"},{"line_number":56,"context_line":"            id\u003duuidutils.generate_uuid(),"},{"line_number":57,"context_line":"            distributor_driver\u003dCONF.controller_worker.distributor_driver,"},{"line_number":58,"context_line":"            topology\u003dconstants.TOPOLOGY_ACTIVE_ACTIVE,"},{"line_number":59,"context_line":"            provisioning_status\u003dconstants.ACTIVE,"},{"line_number":60,"context_line":"            operational_status\u003dconstants.ONLINE)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_ddb8f911","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":53},"updated":"2018-02-14 02:40:42.000000000","message":"Same, just thinking ahead here.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        :param loadbalancer: Load_balancer object"},{"line_number":116,"context_line":"        :return:"},{"line_number":117,"context_line":"        \"\"\""},{"line_number":118,"context_line":"        for amp in loadbalancer.amphorae:"},{"line_number":119,"context_line":"            self.amphora_repo.update("},{"line_number":120,"context_line":"                db_apis.get_session(),"},{"line_number":121,"context_line":"                id\u003damp.id,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_fdfa95ba","line":118,"range":{"start_line":118,"start_character":8,"end_line":118,"end_character":41},"updated":"2018-02-14 02:40:42.000000000","message":"You could consider moving this up to the flow so it can run \"unordered\". I am assuming you have the number of amphora at flow creation time. This is an optimization however.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/distributor/drivers/l3_driver/driver.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"bba2270f22366e7c86d5efc0ff9306ba64600f44","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_log import log as logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from octavia.commmon import constants"},{"line_number":20,"context_line":"from octavia.distributor.drivers import driver_base"},{"line_number":21,"context_line":"from octavia.distributor.drivers.l3_driver.tasks import database_tasks"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_f367c5b6","line":19,"range":{"start_line":19,"start_character":13,"end_line":19,"end_character":20},"updated":"2017-12-15 17:22:24.000000000","message":"common","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"bc305b74ce13919257b985e7c39ea3ff74674261","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from oslo_log import log as logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from octavia.commmon import constants"},{"line_number":20,"context_line":"from octavia.distributor.drivers import driver_base"},{"line_number":21,"context_line":"from octavia.distributor.drivers.l3_driver.tasks import database_tasks"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_c6c8bd75","line":19,"range":{"start_line":19,"start_character":13,"end_line":19,"end_character":20},"in_reply_to":"df87a7cf_f367c5b6","updated":"2017-12-15 18:00:27.000000000","message":"Done","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"13c3f05dbfd846903c16d142d2025b78417ebd5b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def get_delete_distributor_subflow(self):"},{"line_number":40,"context_line":"        LOG.debug(\u0027Distributor %s delete_distributor\u0027,"},{"line_number":41,"context_line":"                  self.__class__.__name__)"},{"line_number":42,"context_line":"        delete_distributor_flow \u003d linear_flow.Flow(\u0027delete-l3-distributor\u0027)"},{"line_number":43,"context_line":"        delete_distributor_flow.add("},{"line_number":44,"context_line":"            database_tasks.MarkL3DistributorDeletedInDB("},{"line_number":45,"context_line":"                \u0027mark-distributor-delete-task\u0027, requires\u003d(\u0027distributor\u0027)))"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_c6e51d3a","line":42,"range":{"start_line":42,"start_character":51,"end_line":42,"end_character":74},"updated":"2017-12-15 17:46:57.000000000","message":"These should all go in a constants file too.","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"04060a0273f4a4e01a16267ce8c6e68e8288ca62","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        delete_distributor_flow \u003d linear_flow.Flow(\u0027delete-l3-distributor\u0027)"},{"line_number":43,"context_line":"        delete_distributor_flow.add("},{"line_number":44,"context_line":"            database_tasks.MarkL3DistributorDeletedInDB("},{"line_number":45,"context_line":"                \u0027mark-distributor-delete-task\u0027, requires\u003d(\u0027distributor\u0027)))"},{"line_number":46,"context_line":"        return delete_distributor_flow"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_a6eb3910","line":45,"range":{"start_line":45,"start_character":16,"end_line":45,"end_character":46},"updated":"2017-12-15 17:45:47.000000000","message":"This likely needs to be name\u003d","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"04060a0273f4a4e01a16267ce8c6e68e8288ca62","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        delete_distributor_flow \u003d linear_flow.Flow(\u0027delete-l3-distributor\u0027)"},{"line_number":43,"context_line":"        delete_distributor_flow.add("},{"line_number":44,"context_line":"            database_tasks.MarkL3DistributorDeletedInDB("},{"line_number":45,"context_line":"                \u0027mark-distributor-delete-task\u0027, requires\u003d(\u0027distributor\u0027)))"},{"line_number":46,"context_line":"        return delete_distributor_flow"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_c690bd98","line":45,"range":{"start_line":45,"start_character":57,"end_line":45,"end_character":58},"updated":"2017-12-15 17:45:47.000000000","message":"nit: These parentheses are not needed either, only when there is more than one.","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"bc305b74ce13919257b985e7c39ea3ff74674261","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        delete_distributor_flow \u003d linear_flow.Flow(\u0027delete-l3-distributor\u0027)"},{"line_number":43,"context_line":"        delete_distributor_flow.add("},{"line_number":44,"context_line":"            database_tasks.MarkL3DistributorDeletedInDB("},{"line_number":45,"context_line":"                \u0027mark-distributor-delete-task\u0027, requires\u003d(\u0027distributor\u0027)))"},{"line_number":46,"context_line":"        return delete_distributor_flow"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_c69d1d67","line":45,"range":{"start_line":45,"start_character":57,"end_line":45,"end_character":58},"in_reply_to":"df87a7cf_c690bd98","updated":"2017-12-15 18:00:27.000000000","message":"Done","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"3fa0c359_1d92e157","updated":"2018-02-14 02:40:42.000000000","message":"This looks good!","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        create_l3_distributor_subflow.add("},{"line_number":48,"context_line":"            database_tasks.CreateDistributorL3AmphoraBGPSpeakerRegInDB("},{"line_number":49,"context_line":"                requires\u003d[constants.LOADBALANCER, constants.SPEAKERS],"},{"line_number":50,"context_line":"                provides\u003dconstants.AMP_SPEAKER_REGS))"},{"line_number":51,"context_line":"        create_l3_distributor_subflow.add("},{"line_number":52,"context_line":"            exabgp_driver_tasks.ExaBGPUpdate("},{"line_number":53,"context_line":"                requires\u003d[constants.LOADBALANCER,"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_dde9d9e2","line":50,"range":{"start_line":50,"start_character":16,"end_line":50,"end_character":53},"updated":"2018-02-14 02:40:42.000000000","message":"Does this need to return anything into the flow storage? I don\u0027t see it used. If not, remove this to save flow storage.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":98,"context_line":"class L3DistributorDriver(driver_base.DistributorDriver):"},{"line_number":99,"context_line":"    def __init__(self):"},{"line_number":100,"context_line":"        super(L3DistributorDriver, self).__init__()"},{"line_number":101,"context_line":"        self.driver \u003d L3Manager()"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    def get_create_distributor_subflow(self):"},{"line_number":104,"context_line":"        return self.driver.get_create_distributor_subflow()"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_7da3e5b2","line":101,"range":{"start_line":101,"start_character":0,"end_line":101,"end_character":33},"updated":"2018-02-14 02:40:42.000000000","message":"You don\u0027t really need to use a manager here. This is just a convention we use in the noop drivers. Simplify and just implement it all here. It\u0027s used for the no-op \"storage\" in the no-op drivers, but not necessary here.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/distributor/drivers/l3_driver/tasks/database_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"bba2270f22366e7c86d5efc0ff9306ba64600f44","unresolved":false,"context_lines":[{"line_number":43,"context_line":"class CreateL3DistributorInDB(BaseDatabaseTask):"},{"line_number":44,"context_line":"    \"\"\"Task to create an initial distributor in the Database.\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":47,"context_line":"        \"\"\"Creates distributor record in the database."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        :returns: The created distributor object"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_13cb4953","line":46,"range":{"start_line":46,"start_character":22,"end_line":46,"end_character":37},"updated":"2017-12-15 17:22:24.000000000","message":"Remove these, this needs to be explicit.","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"bc305b74ce13919257b985e7c39ea3ff74674261","unresolved":false,"context_lines":[{"line_number":43,"context_line":"class CreateL3DistributorInDB(BaseDatabaseTask):"},{"line_number":44,"context_line":"    \"\"\"Task to create an initial distributor in the Database.\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def execute(self, *args, **kwargs):"},{"line_number":47,"context_line":"        \"\"\"Creates distributor record in the database."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        :returns: The created distributor object"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_a62d79fe","line":46,"range":{"start_line":46,"start_character":22,"end_line":46,"end_character":37},"in_reply_to":"df87a7cf_13cb4953","updated":"2017-12-15 18:00:27.000000000","message":"Done","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"bba2270f22366e7c86d5efc0ff9306ba64600f44","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.task_utils.mark_distributor_prov_status_error(distributor.id)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class MarkL3DistributorDeletedInDB(BaseDatabaseTask):"},{"line_number":75,"context_line":"    \"\"\"Task to create an initial distributor in the Database.\"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def execute(self, distributor):"}],"source_content_type":"text/x-python","patch_set":2,"id":"df87a7cf_53b551ed","line":74,"range":{"start_line":74,"start_character":6,"end_line":74,"end_character":34},"updated":"2017-12-15 17:22:24.000000000","message":"Methods like this that are shared with all distributors should probably be put in a common area and named generic.\nAll of the distributor drivers are going to need this.","commit_id":"9783d6c767da00f6eb4e0f6b9db0fd7e3790de7f"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        return registered_peers"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def revert(self, distributor_id, *args, **kwargs):"},{"line_number":217,"context_line":"        \"\"\"Mark the distribuor as broken and ready to be cleaned up."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        :param distributor_id: Distributor that failed to update"},{"line_number":220,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_513ddf8c","line":217,"range":{"start_line":217,"start_character":20,"end_line":217,"end_character":30},"updated":"2018-02-01 07:56:57.000000000","message":"typo","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        return registered_peers"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def revert(self, distributor_id, *args, **kwargs):"},{"line_number":217,"context_line":"        \"\"\"Mark the distribuor as broken and ready to be cleaned up."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        :param distributor_id: Distributor that failed to update"},{"line_number":220,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_23b9ca13","line":217,"range":{"start_line":217,"start_character":20,"end_line":217,"end_character":30},"in_reply_to":"5f93b717_513ddf8c","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":252,"context_line":"        return amp_speaker_reg_list"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def revert(self, distributor_id, *args, **kwargs):"},{"line_number":255,"context_line":"        \"\"\"Mark the distribuor as broken and ready to be cleaned up."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        :param distributor_id: Distributor that failed to update"},{"line_number":258,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_f13f4b84","line":255,"range":{"start_line":255,"start_character":20,"end_line":255,"end_character":30},"updated":"2018-02-01 07:56:57.000000000","message":"typo","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                         amp_vip_reg.distributor_l3_bgp_peer_id)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def revert(self, distributor_id,  *args, **kwargs):"},{"line_number":293,"context_line":"        \"\"\"Mark the distribuor as broken and ready to be cleaned up."},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        :param distributor_id: Distributor that failed to update"},{"line_number":296,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_1143d714","line":293,"range":{"start_line":293,"start_character":20,"end_line":293,"end_character":30},"updated":"2018-02-01 07:56:57.000000000","message":"typo","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                         amp_vip_reg.distributor_l3_bgp_peer_id)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def revert(self, distributor_id,  *args, **kwargs):"},{"line_number":293,"context_line":"        \"\"\"Mark the distribuor as broken and ready to be cleaned up."},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"        :param distributor_id: Distributor that failed to update"},{"line_number":296,"context_line":"        :returns: None"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_e33c4294","line":293,"range":{"start_line":293,"start_character":20,"end_line":293,"end_character":30},"in_reply_to":"5f93b717_1143d714","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"354f4c8fc12c64a3569301fb4f7268d884fadab9","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class CreateDistributorL3BGPSpeakersInDB(BaseDatabaseTask):"},{"line_number":59,"context_line":"    \"\"\"Task to create an initial DistributorL3BGPSpeaker in the Database.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    # default_provides \u003d constants.SPEAKERS"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def execute(self):"},{"line_number":64,"context_line":"        \"\"\"Creates DistributorL3BGPSpeaker record in the database."}],"source_content_type":"text/x-python","patch_set":21,"id":"5f93b717_be9df1bc","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":43},"updated":"2018-02-02 06:17:07.000000000","message":"remove if not needed","commit_id":"b6f01de660e72a689f2e3e22f32f6eaea945f865"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"ed5dffd7ca5962c87afea11efc9af89aa6a8d0c3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"class CreateDistributorL3BGPSpeakersInDB(BaseDatabaseTask):"},{"line_number":59,"context_line":"    \"\"\"Task to create an initial DistributorL3BGPSpeaker in the Database.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    # default_provides \u003d constants.SPEAKERS"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def execute(self):"},{"line_number":64,"context_line":"        \"\"\"Creates DistributorL3BGPSpeaker record in the database."}],"source_content_type":"text/x-python","patch_set":21,"id":"5f93b717_5eaf0d29","line":61,"range":{"start_line":61,"start_character":4,"end_line":61,"end_character":43},"in_reply_to":"5f93b717_be9df1bc","updated":"2018-02-02 07:42:45.000000000","message":"Done","commit_id":"b6f01de660e72a689f2e3e22f32f6eaea945f865"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"354f4c8fc12c64a3569301fb4f7268d884fadab9","unresolved":false,"context_lines":[{"line_number":172,"context_line":"class CreateDistributorL3BGPPeerRegistrationInDB(BaseDatabaseTask):"},{"line_number":173,"context_line":"    \"\"\"Creates distributor_l3_bgp_peer_registration entry in database\"\"\""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # default_provides \u003d constants.REGISTERED_PEERS"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def execute(self, peers):"},{"line_number":178,"context_line":"        \"\"\"Creates distributor_l3_bgp_peer_registration record in database"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f93b717_dea0fdf6","line":175,"range":{"start_line":175,"start_character":4,"end_line":175,"end_character":51},"updated":"2018-02-02 06:17:07.000000000","message":"remove if not needed","commit_id":"b6f01de660e72a689f2e3e22f32f6eaea945f865"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"ed5dffd7ca5962c87afea11efc9af89aa6a8d0c3","unresolved":false,"context_lines":[{"line_number":172,"context_line":"class CreateDistributorL3BGPPeerRegistrationInDB(BaseDatabaseTask):"},{"line_number":173,"context_line":"    \"\"\"Creates distributor_l3_bgp_peer_registration entry in database\"\"\""},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    # default_provides \u003d constants.REGISTERED_PEERS"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    def execute(self, peers):"},{"line_number":178,"context_line":"        \"\"\"Creates distributor_l3_bgp_peer_registration record in database"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f93b717_9eb9157a","line":175,"range":{"start_line":175,"start_character":4,"end_line":175,"end_character":51},"in_reply_to":"5f93b717_dea0fdf6","updated":"2018-02-02 07:42:45.000000000","message":"Done","commit_id":"b6f01de660e72a689f2e3e22f32f6eaea945f865"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"a1a9e47f475ecf4e59e6f31b24abc37dd782cc79","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                         amp_vip_reg.amphora_id,"},{"line_number":287,"context_line":"                         amp_vip_reg.distributor_l3_bgp_peer_id)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def revert(self, distributor_id,  *args, **kwargs):"},{"line_number":290,"context_line":"        \"\"\"Mark the distributor as broken and ready to be cleaned up."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        :param distributor_id: Distributor that failed to update"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f93b717_de89dd74","line":289,"range":{"start_line":289,"start_character":36,"end_line":289,"end_character":43},"updated":"2018-02-02 06:20:09.000000000","message":"remove one space","commit_id":"b6f01de660e72a689f2e3e22f32f6eaea945f865"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"ed5dffd7ca5962c87afea11efc9af89aa6a8d0c3","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                         amp_vip_reg.amphora_id,"},{"line_number":287,"context_line":"                         amp_vip_reg.distributor_l3_bgp_peer_id)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def revert(self, distributor_id,  *args, **kwargs):"},{"line_number":290,"context_line":"        \"\"\"Mark the distributor as broken and ready to be cleaned up."},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        :param distributor_id: Distributor that failed to update"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f93b717_dec31dec","line":289,"range":{"start_line":289,"start_character":36,"end_line":289,"end_character":43},"in_reply_to":"5f93b717_de89dd74","updated":"2018-02-02 07:42:45.000000000","message":"Done","commit_id":"b6f01de660e72a689f2e3e22f32f6eaea945f865"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        speakers \u003d dict()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        sections \u003d CONF.list_all_sections()"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        for section in sections:"},{"line_number":71,"context_line":"            if section.find(\u0027speaker\u0027) \u003e\u003d 0:"},{"line_number":72,"context_line":"                peer_list \u003d CONF.get(section).peers"},{"line_number":73,"context_line":"                for peer in peer_list:"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_5d85c905","line":70,"range":{"start_line":68,"start_character":8,"end_line":70,"end_character":32},"updated":"2018-02-14 02:40:42.000000000","message":"Why?","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                for peer in peer_list:"},{"line_number":74,"context_line":"                    peer_ip \u003d CONF.get(peer).peer_ip"},{"line_number":75,"context_line":"                    ip \u003d ipaddress.ip_address("},{"line_number":76,"context_line":"                        peer_ip if isinstance(peer_ip, six.text_type)"},{"line_number":77,"context_line":"                        else six.u(peer_ip))"},{"line_number":78,"context_line":"                    try:"},{"line_number":79,"context_line":"                        speaker \u003d self.distributor_l3bgp_speaker_repo.create("},{"line_number":80,"context_line":"                            db_apis.get_session(),"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_9d94b138","line":77,"range":{"start_line":76,"start_character":24,"end_line":77,"end_character":44},"updated":"2018-02-14 02:40:42.000000000","message":"Can\u0027t you just use six.u? It should \"do the right thing\".","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                for peer in peer_list:"},{"line_number":183,"context_line":"                    peer_ip \u003d CONF.get(peer).peer_ip"},{"line_number":184,"context_line":"                    ip \u003d ipaddress.ip_address("},{"line_number":185,"context_line":"                        peer_ip if isinstance(peer_ip, six.text_type)"},{"line_number":186,"context_line":"                        else six.u(peer_ip))"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"                    speaker_obj \u003d self.distributor_l3bgp_speaker_repo.get("},{"line_number":189,"context_line":"                        db_apis.get_session(),"}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_5db389e9","line":186,"range":{"start_line":185,"start_character":23,"end_line":186,"end_character":44},"updated":"2018-02-14 02:40:42.000000000","message":"Same, six.u should work","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        \"\"\""},{"line_number":229,"context_line":"        amp_speaker_reg_list \u003d []"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        for amp in loadbalancer.amphorae:"},{"line_number":232,"context_line":"            for speaker in speakers.keys():"},{"line_number":233,"context_line":"                amp_speaker_reg \u003d ("},{"line_number":234,"context_line":"                    self.distributor_l3_amphora_bgp_speaker_reg_repo.create("}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_bdc3ad37","line":231,"range":{"start_line":231,"start_character":8,"end_line":231,"end_character":40},"updated":"2018-02-14 02:40:42.000000000","message":"Consider moving this up to the flow unordered flow. This an optimization however.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"octavia/distributor/drivers/l3_driver/tasks/exabgp_driver_tasks.py":[{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def revert(self, load_balancer, *args, **kwargs):"},{"line_number":70,"context_line":"        \"\"\"Handle a failed exabgp stop.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        LOG.warning(\"Reverting exabgp stop.\")"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.task_utils.mark_loadbalancer_prov_status_error(load_balancer.id)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_716c9b9b","line":72,"range":{"start_line":72,"start_character":21,"end_line":72,"end_character":42},"updated":"2018-02-01 07:56:57.000000000","message":"update log message","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    def revert(self, load_balancer, *args, **kwargs):"},{"line_number":70,"context_line":"        \"\"\"Handle a failed exabgp stop.\"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        LOG.warning(\"Reverting exabgp stop.\")"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.task_utils.mark_loadbalancer_prov_status_error(load_balancer.id)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_434df63b","line":72,"range":{"start_line":72,"start_character":21,"end_line":72,"end_character":42},"in_reply_to":"5f93b717_716c9b9b","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    \"\"\"Task to register exaBGP on the vip.\"\"\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def execute(self, loadbalancer):"},{"line_number":101,"context_line":"        \"\"\"Execute exabgp start routines for an amphora.\"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.exabgp_driver.register_amphora(loadbalancer.amphorae)"},{"line_number":104,"context_line":"        LOG.debug(\"Register amphora \")"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_115c37eb","line":101,"range":{"start_line":101,"start_character":11,"end_line":101,"end_character":55},"updated":"2018-02-01 07:56:57.000000000","message":"update docstrings","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    \"\"\"Task to register exaBGP on the vip.\"\"\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def execute(self, loadbalancer):"},{"line_number":101,"context_line":"        \"\"\"Execute exabgp start routines for an amphora.\"\"\""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        self.exabgp_driver.register_amphora(loadbalancer.amphorae)"},{"line_number":104,"context_line":"        LOG.debug(\"Register amphora \")"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_234eaa37","line":101,"range":{"start_line":101,"start_character":11,"end_line":101,"end_character":55},"in_reply_to":"5f93b717_115c37eb","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def revert(self, loadbalancer, *args, **kwargs):"},{"line_number":107,"context_line":"        \"\"\"Handle a failed exabgp stop.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        LOG.warning(\"Reverting listener stop.\")"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self.task_utils.mark_loadbalancer_prov_status_error(loadbalancer.id)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_316373b4","line":109,"range":{"start_line":109,"start_character":21,"end_line":109,"end_character":44},"updated":"2018-02-01 07:56:57.000000000","message":"update log message","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def revert(self, loadbalancer, *args, **kwargs):"},{"line_number":107,"context_line":"        \"\"\"Handle a failed exabgp stop.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        LOG.warning(\"Reverting listener stop.\")"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        self.task_utils.mark_loadbalancer_prov_status_error(loadbalancer.id)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_c36266ae","line":109,"range":{"start_line":109,"start_character":21,"end_line":109,"end_character":44},"in_reply_to":"5f93b717_316373b4","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    \"\"\"Task to register exaBGP on the vip.\"\"\""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def execute(self, loadbalancer):"},{"line_number":120,"context_line":"        \"\"\"Execute exabgp start routines for an amphora.\"\"\""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        self.exabgp_driver.unregister_amphora(loadbalancer.amphorae)"},{"line_number":123,"context_line":"        LOG.debug(\"Un-register amphora \")"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_f158abfa","line":120,"range":{"start_line":120,"start_character":11,"end_line":120,"end_character":55},"updated":"2018-02-01 07:56:57.000000000","message":"update docstrings","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    \"\"\"Task to register exaBGP on the vip.\"\"\""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def execute(self, loadbalancer):"},{"line_number":120,"context_line":"        \"\"\"Execute exabgp start routines for an amphora.\"\"\""},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        self.exabgp_driver.unregister_amphora(loadbalancer.amphorae)"},{"line_number":123,"context_line":"        LOG.debug(\"Un-register amphora \")"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_e36522b6","line":120,"range":{"start_line":120,"start_character":11,"end_line":120,"end_character":55},"in_reply_to":"5f93b717_f158abfa","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"539b4f7b62fd0d82bce375f7628bf90e836efbdc","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def revert(self, load_balancer, *args, **kwargs):"},{"line_number":126,"context_line":"        \"\"\"Handle a failed exabgp stop.\"\"\""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        LOG.warning(\"Reverting listener stop.\")"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        self.task_utils.mark_loadbalancer_prov_status_error(load_balancer.id)"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_51663fc3","line":128,"range":{"start_line":128,"start_character":21,"end_line":128,"end_character":44},"updated":"2018-02-01 07:56:57.000000000","message":"update log message","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":23889,"name":"Santhosh Fernandes","email":"santhosh.fernandes@gmail.com","username":"santhosh-fernandes"},"change_message_id":"fa0dda2a52df3c3fca21d60a4a08652c543859c1","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    def revert(self, load_balancer, *args, **kwargs):"},{"line_number":126,"context_line":"        \"\"\"Handle a failed exabgp stop.\"\"\""},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        LOG.warning(\"Reverting listener stop.\")"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        self.task_utils.mark_loadbalancer_prov_status_error(load_balancer.id)"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"5f93b717_8358def9","line":128,"range":{"start_line":128,"start_character":21,"end_line":128,"end_character":44},"in_reply_to":"5f93b717_51663fc3","updated":"2018-02-02 07:04:28.000000000","message":"Done","commit_id":"75d57c438950b95d913fcfa8f9eb0e820d5e7c26"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"a1a9e47f475ecf4e59e6f31b24abc37dd782cc79","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \"\"\"Execute updates per lodbalancer for an amphora.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.exabgp_driver.update_exabgp_config("},{"line_number":48,"context_line":"            loadbalancer.amphorae, speakers,  peers, registered_peers)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def revert(self, loadbalancer, *args, **kwargs):"},{"line_number":51,"context_line":"        \"\"\"Handle a failed update exabgp conf\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"5f93b717_be865165","line":48,"range":{"start_line":48,"start_character":44,"end_line":48,"end_character":51},"updated":"2018-02-02 06:20:09.000000000","message":"remove one space","commit_id":"b6f01de660e72a689f2e3e22f32f6eaea945f865"},{"author":{"_account_id":20226,"name":"Ganpat Agarwal","email":"gans.developer@gmail.com","username":"gans"},"change_message_id":"354f4c8fc12c64a3569301fb4f7268d884fadab9","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    \"\"\"Task to register exaBGP on the vip.\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def execute(self, loadbalancer):"},{"line_number":110,"context_line":"        \"\"\"VIP route withdrwal for an amphora.\"\"\""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self.exabgp_driver.unregister_amphora(loadbalancer.amphorae)"},{"line_number":113,"context_line":"        LOG.debug(\"Un-register amphora \")"}],"source_content_type":"text/x-python","patch_set":21,"id":"5f93b717_5e3e2db8","line":110,"range":{"start_line":110,"start_character":21,"end_line":110,"end_character":30},"updated":"2018-02-02 06:17:07.000000000","message":"typo","commit_id":"b6f01de660e72a689f2e3e22f32f6eaea945f865"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":23,"id":"3fa0c359_7d2d25fc","updated":"2018-02-14 02:40:42.000000000","message":"Other that the log ordering issues and the driver load, this looks good.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, **kwargs):"},{"line_number":32,"context_line":"        super(BaseExaBGPTask, self).__init__(**kwargs)"},{"line_number":33,"context_line":"        self.exabgp_driver \u003d stevedore_driver.DriverManager("},{"line_number":34,"context_line":"            namespace\u003d\u0027octavia.amphora.drivers\u0027,"},{"line_number":35,"context_line":"            name\u003dCONF.controller_worker.bgp_driver,"},{"line_number":36,"context_line":"            invoke_on_load\u003dTrue"},{"line_number":37,"context_line":"        ).driver"},{"line_number":38,"context_line":"        self.task_utils \u003d task_utilities.TaskUtils()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_fdfb7575","line":37,"range":{"start_line":33,"start_character":8,"end_line":37,"end_character":16},"updated":"2018-02-14 02:40:42.000000000","message":"Do we need a driver for this? It seems like the already loaded amphora driver should be used.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"3052cbf3bdfe34bb438bbb52d9225f4aa1d206ac","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, **kwargs):"},{"line_number":32,"context_line":"        super(BaseExaBGPTask, self).__init__(**kwargs)"},{"line_number":33,"context_line":"        self.exabgp_driver \u003d stevedore_driver.DriverManager("},{"line_number":34,"context_line":"            namespace\u003d\u0027octavia.amphora.drivers\u0027,"},{"line_number":35,"context_line":"            name\u003dCONF.controller_worker.bgp_driver,"},{"line_number":36,"context_line":"            invoke_on_load\u003dTrue"},{"line_number":37,"context_line":"        ).driver"},{"line_number":38,"context_line":"        self.task_utils \u003d task_utilities.TaskUtils()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_a4bd26b8","line":37,"range":{"start_line":33,"start_character":8,"end_line":37,"end_character":16},"in_reply_to":"3fa0c359_fdfb7575","updated":"2018-02-21 21:54:46.000000000","message":"There is an extra BGP driver (see https://review.openstack.org/#/c/537842/5/octavia/amphorae/drivers/exabgp/exabgp_rest_api_driver.py) so unless we want to land that as an amphora driver for the system this is needed. I think making it an independent driver makes more sense than switching the amphora driver for the whole system.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"\"\"Starts the exabgp service.\"\"\""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        self.exabgp_driver.start(loadbalancer.amphorae)"},{"line_number":64,"context_line":"        LOG.debug(\"Starting exabgp service on amphorae\")"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def revert(self, loadbalancer, *args, **kwargs):"},{"line_number":67,"context_line":"        \"\"\"Handle a failed exabgp start operation.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"3fa0c359_1df7418d","line":64,"range":{"start_line":64,"start_character":8,"end_line":64,"end_character":56},"updated":"2018-02-14 02:40:42.000000000","message":"The log message says \"Starting\" but it is after you have already executed the action. These should all go before you  execute the action.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}],"setup.cfg":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"42c406cb06743f3a92f17353634464ce7a73f085","unresolved":false,"context_lines":[{"line_number":75,"context_line":"octavia.amphora.drivers \u003d"},{"line_number":76,"context_line":"    amphora_noop_driver \u003d octavia.amphorae.drivers.noop_driver.driver:NoopAmphoraLoadBalancerDriver"},{"line_number":77,"context_line":"    amphora_haproxy_rest_driver \u003d octavia.amphorae.drivers.haproxy.rest_api_driver:HaproxyAmphoraLoadBalancerDriver"},{"line_number":78,"context_line":"    exabgp_rest_api_driver \u003d octavia.amphorae.drivers.exabgp_driver.exabgp_rest_api_driver:ExaBGPDistributorDriver"},{"line_number":79,"context_line":"octavia.controller.queues \u003d"},{"line_number":80,"context_line":"    noop_event_streamer \u003d octavia.controller.queue.event_queue:EventStreamerNoop"},{"line_number":81,"context_line":"    queue_event_streamer \u003d octavia.controller.queue.event_queue:EventStreamerNeutron"}],"source_content_type":"text/x-ttcn-cfg","patch_set":23,"id":"3fa0c359_9a6597b7","line":78,"updated":"2018-02-14 02:40:42.000000000","message":"Are you sure this is needed? I thought we were just integrating this into the above rest API driver.","commit_id":"3e4522f686f3dc79cf071c4f821e9e34954c610f"}]}
