)]}'
{"octavia/api/drivers/amphora_driver/driver.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        payload \u003d {consts.LISTENER_ID: listener_id}"},{"line_number":90,"context_line":"        self.client.cast({}, \u0027delete_listener\u0027, **payload)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def listener_update(self, listener):"},{"line_number":93,"context_line":"        pass"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Pool"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_33d67a29","line":92,"updated":"2018-05-02 19:53:21.000000000","message":"Haven\u0027t finished the update methods yet?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        payload \u003d {consts.LISTENER_ID: listener_id}"},{"line_number":90,"context_line":"        self.client.cast({}, \u0027delete_listener\u0027, **payload)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def listener_update(self, listener):"},{"line_number":93,"context_line":"        pass"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    # Pool"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_d5f75cd4","line":92,"in_reply_to":"9f6a8fd7_33d67a29","updated":"2018-05-02 22:45:01.000000000","message":"Right, this patch got a bit large, so I think I will do follow up patches to finish the other objects.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        payload \u003d {consts.POOL_ID: pool_id}"},{"line_number":102,"context_line":"        self.client.cast({}, \u0027delete_pool\u0027, **payload)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def pool_update(self, pool):"},{"line_number":105,"context_line":"        pass"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    # Member"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_d3dcde47","line":104,"updated":"2018-05-02 19:53:21.000000000","message":"^^","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        payload \u003d {consts.POOL_ID: pool_id}"},{"line_number":102,"context_line":"        self.client.cast({}, \u0027delete_pool\u0027, **payload)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def pool_update(self, pool):"},{"line_number":105,"context_line":"        pass"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    # Member"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_f5f4d8d1","line":104,"in_reply_to":"9f6a8fd7_d3dcde47","updated":"2018-05-02 22:45:01.000000000","message":"Right, this patch got a bit large, so I think I will do follow up patches to finish the other objects.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        payload \u003d {consts.MEMBER_ID: member_id}"},{"line_number":114,"context_line":"        self.client.cast({}, \u0027delete_member\u0027, **payload)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def member_update(self, member):"},{"line_number":117,"context_line":"        pass"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def member_batch_update(self, members):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_f3dfa237","line":116,"updated":"2018-05-02 19:53:21.000000000","message":"^^","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        payload \u003d {consts.MEMBER_ID: member_id}"},{"line_number":114,"context_line":"        self.client.cast({}, \u0027delete_member\u0027, **payload)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def member_update(self, member):"},{"line_number":117,"context_line":"        pass"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def member_batch_update(self, members):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_9501e4b2","line":116,"in_reply_to":"9f6a8fd7_f3dfa237","updated":"2018-05-02 22:45:01.000000000","message":"Right, this patch got a bit large, so I think I will do follow up patches to finish the other objects.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/api/drivers/data_models.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        self.description \u003d description"},{"line_number":126,"context_line":"        self.healthmonitor \u003d healthmonitor"},{"line_number":127,"context_line":"        self.lb_algorithm \u003d lb_algorithm"},{"line_number":128,"context_line":"        self.listener_id \u003d listener_id"},{"line_number":129,"context_line":"        self.loadbalancer_id \u003d loadbalancer_id"},{"line_number":130,"context_line":"        self.members \u003d members or []"},{"line_number":131,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_73d5d2e4","side":"PARENT","line":128,"updated":"2018-05-02 19:53:21.000000000","message":"Wait, this one goes away? We don\u0027t need to track this link?","commit_id":"3ab772394692deec64741b8ef7e8a139b9e4dbbf"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        self.description \u003d description"},{"line_number":126,"context_line":"        self.healthmonitor \u003d healthmonitor"},{"line_number":127,"context_line":"        self.lb_algorithm \u003d lb_algorithm"},{"line_number":128,"context_line":"        self.listener_id \u003d listener_id"},{"line_number":129,"context_line":"        self.loadbalancer_id \u003d loadbalancer_id"},{"line_number":130,"context_line":"        self.members \u003d members or []"},{"line_number":131,"context_line":"        self.name \u003d name"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_b51740ee","side":"PARENT","line":128,"in_reply_to":"9f6a8fd7_73d5d2e4","updated":"2018-05-02 22:45:01.000000000","message":"In reality, with shared pools, this is just a DB back reference.  Pools are children of the LB and listeners can set a default_pool_id or use a pool as a redirect_pool in an L7.  Database back references don\u0027t make sense to send to a driver.","commit_id":"3ab772394692deec64741b8ef7e8a139b9e4dbbf"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                            else:"},{"line_number":47,"context_line":"                                ret[attr].append(None)"},{"line_number":48,"context_line":"                        else:"},{"line_number":49,"context_line":"                            ret[attr].append(item)"},{"line_number":50,"context_line":"                elif isinstance(getattr(self, attr), BaseDataModel):"},{"line_number":51,"context_line":"                    if type(self) not in calling_classes:"},{"line_number":52,"context_line":"                        ret[attr] \u003d value.to_dict("}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_138fb623","line":49,"updated":"2018-05-02 19:53:21.000000000","message":"Doesn\u0027t this change things significantly? Touching this method is always scary for me...","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                            else:"},{"line_number":47,"context_line":"                                ret[attr].append(None)"},{"line_number":48,"context_line":"                        else:"},{"line_number":49,"context_line":"                            ret[attr].append(item)"},{"line_number":50,"context_line":"                elif isinstance(getattr(self, attr), BaseDataModel):"},{"line_number":51,"context_line":"                    if type(self) not in calling_classes:"},{"line_number":52,"context_line":"                        ret[attr] \u003d value.to_dict("}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_552d8c44","line":49,"in_reply_to":"9f6a8fd7_138fb623","updated":"2018-05-02 22:45:01.000000000","message":"It does, but this is a version of the main data_model method specifically for the driver data_model, so I\u0027m making changes here that are specific to the driver data model. Specifically adding the concept of \"UnSet\" that we don\u0027t have in the main data model.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.vip_network_id \u003d vip_network_id"},{"line_number":120,"context_line":"        self.vip_port_id \u003d vip_port_id"},{"line_number":121,"context_line":"        self.vip_subnet_id \u003d vip_subnet_id"},{"line_number":122,"context_line":"        self.vip_qos_policy_id \u003d vip_qos_policy_id"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class Listener(BaseDataModel):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_b3392a40","line":122,"updated":"2018-05-02 19:53:21.000000000","message":"I\u0027m surprised we don\u0027t just have a VIP subobject here. Are we trying to keep all of these flat for simplicity?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.vip_network_id \u003d vip_network_id"},{"line_number":120,"context_line":"        self.vip_port_id \u003d vip_port_id"},{"line_number":121,"context_line":"        self.vip_subnet_id \u003d vip_subnet_id"},{"line_number":122,"context_line":"        self.vip_qos_policy_id \u003d vip_qos_policy_id"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class Listener(BaseDataModel):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_d520bc4c","line":122,"in_reply_to":"9f6a8fd7_b3392a40","updated":"2018-05-02 22:45:01.000000000","message":"Yes, we flattened this for the driver data model. Sub objects are messy and don\u0027t bring value here.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/api/drivers/driver_factory.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if provider not in CONF.api_settings.enabled_provider_drivers:"},{"line_number":30,"context_line":"        LOG.warning(\"Requested provider driver \u0027{}\u0027 was not enabled in the \""},{"line_number":31,"context_line":"                    \"configuration file.\".format(provider))"},{"line_number":32,"context_line":"        raise exceptions.ProviderNotEnabled(prov\u003dprovider)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_d452edde","line":30,"updated":"2018-04-26 19:18:25.000000000","message":"Same here, should be lazy loaded","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            name\u003dprovider,"},{"line_number":38,"context_line":"            invoke_on_load\u003dTrue).driver"},{"line_number":39,"context_line":"    except Exception as e:"},{"line_number":40,"context_line":"        LOG.error(\u0027Unable to load provider driver {0} due to: {1}\u0027.format("},{"line_number":41,"context_line":"                  provider, e))"},{"line_number":42,"context_line":"        raise exceptions.ProviderNotFound(prov\u003dprovider)"},{"line_number":43,"context_line":"    return driver"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_f44ff131","line":40,"updated":"2018-04-26 19:18:25.000000000","message":"Same here, should be lazy loaded","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_driver(provider):"},{"line_number":26,"context_line":"    if not provider:"},{"line_number":27,"context_line":"        provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if provider not in CONF.api_settings.enabled_provider_drivers:"},{"line_number":30,"context_line":"        LOG.warning(\"Requested provider driver \u0027%s\u0027 was not enabled in the \""}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_c17de86e","line":27,"updated":"2018-05-02 19:53:21.000000000","message":"Also possibly if there is no specified default, choose the first from the list of providers?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"411cd3361186861981953c39fb0ac0be342829b8","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_driver(provider):"},{"line_number":26,"context_line":"    if not provider:"},{"line_number":27,"context_line":"        provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if provider not in CONF.api_settings.enabled_provider_drivers:"},{"line_number":30,"context_line":"        LOG.warning(\"Requested provider driver \u0027%s\u0027 was not enabled in the \""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_ac2da547","line":27,"in_reply_to":"5f7c97a3_d5e51c0c","updated":"2018-05-03 19:33:00.000000000","message":"Erg, explicit vs implicit... It\u0027s complex because there\u0027s two fields and they kinda have to match... I hate having more \"required fields\" in the config, because the less you have to touch when setting it up the better. But, explicit tends to be better than implicit... I\u0027ll noodle.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_driver(provider):"},{"line_number":26,"context_line":"    if not provider:"},{"line_number":27,"context_line":"        provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    if provider not in CONF.api_settings.enabled_provider_drivers:"},{"line_number":30,"context_line":"        LOG.warning(\"Requested provider driver \u0027%s\u0027 was not enabled in the \""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_d5e51c0c","line":27,"in_reply_to":"9f6a8fd7_c17de86e","updated":"2018-05-02 22:45:01.000000000","message":"I guess we could, that gets a bit into the \"guessing on behalf of the operator\" space. I guess we could also make default driver mandatory in the config.\nWhich is better?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ed823d368471897d29785de264017da4c5aa3ee2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        driver \u003d stevedore_driver.DriverManager("},{"line_number":36,"context_line":"            namespace\u003d\u0027octavia.api.drivers\u0027,"},{"line_number":37,"context_line":"            name\u003dprovider,"},{"line_number":38,"context_line":"            invoke_on_load\u003dTrue).driver"},{"line_number":39,"context_line":"    except Exception as e:"},{"line_number":40,"context_line":"        LOG.error(\u0027Unable to load provider driver %s due to: %s\u0027,"},{"line_number":41,"context_line":"                  provider, e)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_17daa6e8","line":38,"updated":"2018-05-03 20:20:35.000000000","message":"Then do:\n\ndriver.name \u003d provider","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    # provider support was added. These must be of type \u0027amphora\u0027 and not"},{"line_number":28,"context_line":"    # whatever the current \"default\" is set to."},{"line_number":29,"context_line":"    if not provider:"},{"line_number":30,"context_line":"        provider \u003d \u0027amphora\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    if provider not in CONF.api_settings.enabled_provider_drivers:"},{"line_number":33,"context_line":"        LOG.warning(\"Requested provider driver \u0027%s\u0027 was not enabled in the \""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_0cc230ea","line":30,"updated":"2018-05-09 23:57:36.000000000","message":"elif isinstance(provider, wtypes.UnsetType):\n    provider \u003d CONF.api_settings.default_provider_driver","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        driver \u003d stevedore_driver.DriverManager("},{"line_number":39,"context_line":"            namespace\u003d\u0027octavia.api.drivers\u0027,"},{"line_number":40,"context_line":"            name\u003dprovider,"},{"line_number":41,"context_line":"            invoke_on_load\u003dTrue).driver"},{"line_number":42,"context_line":"    except Exception as e:"},{"line_number":43,"context_line":"        LOG.error(\u0027Unable to load provider driver %s due to: %s\u0027,"},{"line_number":44,"context_line":"                  provider, e)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_2c492ccf","line":41,"updated":"2018-05-09 23:57:36.000000000","message":"driver.name \u003d provider","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"}],"octavia/api/drivers/octavia_driver/__init__.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"b17cbbe46370d45956e9ddd3c3120d786a2592ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9f6a8fd7_deb6d18a","updated":"2018-04-24 06:28:14.000000000","message":"IMO this should be amphora_driver, octavia_driver seems odd as every driver would be an octavia driver, and things would get out of hand when trying to explain what\u0027s going on. The amphora driver is the driver that utilizes and manages the lifecycle of amphora. Seems like a no-brainer to me. :P","commit_id":"8c6c3861616e76e198e8011e8f5234434b1c17c7"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"ed7e7b75e136ee654175eee4f16ba3c85072d6c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9f6a8fd7_fe3cf5e1","in_reply_to":"9f6a8fd7_deb6d18a","updated":"2018-04-24 06:39:54.000000000","message":"+1! In case it is renamed to amphora_driver, a provider alias needs to be set up as well as db migration (octavia-\u003eamphora).","commit_id":"8c6c3861616e76e198e8011e8f5234434b1c17c7"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"8e0d0f7e4f2a08e460d1300741289a953f944220","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9f6a8fd7_09b895e2","in_reply_to":"9f6a8fd7_fe3cf5e1","updated":"2018-04-24 07:02:43.000000000","message":"I would also recommend we officially deprecate the name \"octavia\" for provider, and recommend \"amphora\" as the default in docs and guides.","commit_id":"8c6c3861616e76e198e8011e8f5234434b1c17c7"}],"octavia/api/drivers/utils.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        return driver_method(*args, **kwargs)"},{"line_number":39,"context_line":"    except driver_exceptions.DriverError as e:"},{"line_number":40,"context_line":"        LOG.exception(\"Provider \u0027{0}\u0027 raised a driver error: {1}\".format("},{"line_number":41,"context_line":"            provider, e.operator_fault_string))"},{"line_number":42,"context_line":"        raise exceptions.ProviderDriverError(prov\u003dprovider,"},{"line_number":43,"context_line":"                                             user_msg\u003de.user_fault_string)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_f4e1312c","line":40,"updated":"2018-04-26 19:18:25.000000000","message":"These should be lazy loaded\n\u003e \"Provider \u0027%s\u0027 raised a driver error: %s\", provider, e.operator_fault_string","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        raise exceptions.ProviderDriverError(prov\u003dprovider,"},{"line_number":43,"context_line":"                                             user_msg\u003de.user_fault_string)"},{"line_number":44,"context_line":"    except driver_exceptions.NotImplementedError as e:"},{"line_number":45,"context_line":"        LOG.info(\"Provider \u0027{0}\u0027 raised a not implemented error: {1}\".format("},{"line_number":46,"context_line":"            provider, e.operator_fault_string))"},{"line_number":47,"context_line":"        raise exceptions.ProviderNotImplementedError("},{"line_number":48,"context_line":"            prov\u003dprovider, user_msg\u003de.user_fault_string)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_94d0f555","line":45,"updated":"2018-04-26 19:18:25.000000000","message":"Same here, should be lazy loaded","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        raise exceptions.ProviderNotImplementedError("},{"line_number":48,"context_line":"            prov\u003dprovider, user_msg\u003de.user_fault_string)"},{"line_number":49,"context_line":"    except driver_exceptions.UnsupportedOptionError as e:"},{"line_number":50,"context_line":"        LOG.info(\"Provider \u0027{0}\u0027 raised an unsupported option error: \""},{"line_number":51,"context_line":"                 \"{1}\".format(provider, e.operator_fault_string))"},{"line_number":52,"context_line":"        raise exceptions.ProviderUnsupportedOptionError("},{"line_number":53,"context_line":"            prov\u003dprovider, user_msg\u003de.user_fault_string)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_b4d5f945","line":50,"updated":"2018-04-26 19:18:25.000000000","message":"Same here, should be lazy loaded","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        raise exceptions.ProviderUnsupportedOptionError("},{"line_number":53,"context_line":"            prov\u003dprovider, user_msg\u003de.user_fault_string)"},{"line_number":54,"context_line":"    except Exception as e:"},{"line_number":55,"context_line":"        LOG.exception(\"Provider \u0027{0}\u0027 raised an unkown error: {1}\".format("},{"line_number":56,"context_line":"            provider, e))"},{"line_number":57,"context_line":"        raise exceptions.ProviderDriverError(prov\u003dprovider, user_msg\u003de)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_54ca5da1","line":55,"updated":"2018-04-26 19:18:25.000000000","message":"Same here, should be lazy loaded","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"9a64c4249997186f5eea46b61ed70b5237d72584","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    try:"},{"line_number":47,"context_line":"        return driver_method(*args, **kwargs)"},{"line_number":48,"context_line":"    except driver_exceptions.DriverError as e:"},{"line_number":49,"context_line":"        LOG.exception(\"Provider \u0027%s\u0027 raised a driver error: %s\","},{"line_number":50,"context_line":"                      provider, e.operator_fault_string)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_d8672051","line":47,"updated":"2018-05-02 14:29:25.000000000","message":"1) Log with Debug what we send to the driver and what comes back\n\n2) Protect us by running this call in a future which can time out","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    try:"},{"line_number":47,"context_line":"        return driver_method(*args, **kwargs)"},{"line_number":48,"context_line":"    except driver_exceptions.DriverError as e:"},{"line_number":49,"context_line":"        LOG.exception(\"Provider \u0027%s\u0027 raised a driver error: %s\","},{"line_number":50,"context_line":"                      provider, e.operator_fault_string)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_55bb4ce4","line":47,"in_reply_to":"9f6a8fd7_53920ef8","updated":"2018-05-02 22:45:01.000000000","message":"https://storyboard.openstack.org/#!/story/2001958\nTask 15080","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    try:"},{"line_number":47,"context_line":"        return driver_method(*args, **kwargs)"},{"line_number":48,"context_line":"    except driver_exceptions.DriverError as e:"},{"line_number":49,"context_line":"        LOG.exception(\"Provider \u0027%s\u0027 raised a driver error: %s\","},{"line_number":50,"context_line":"                      provider, e.operator_fault_string)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_53920ef8","line":47,"in_reply_to":"9f6a8fd7_c950b461","updated":"2018-05-02 19:53:21.000000000","message":"I agree we can get to this later. Get it working and then improve.\nLogging would be nice to see, but yes we\u0027d have to sanitize the data. I also think this can happen later. Maybe would be worth making tasks on a new story (or the existing one?) for improvements we\u0027d like to see, so we don\u0027t lose track.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"633cacf0da72065dd31720965d876dc4c8b51d7c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    try:"},{"line_number":47,"context_line":"        return driver_method(*args, **kwargs)"},{"line_number":48,"context_line":"    except driver_exceptions.DriverError as e:"},{"line_number":49,"context_line":"        LOG.exception(\"Provider \u0027%s\u0027 raised a driver error: %s\","},{"line_number":50,"context_line":"                      provider, e.operator_fault_string)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_c950b461","line":47,"in_reply_to":"9f6a8fd7_d8672051","updated":"2018-05-02 15:57:20.000000000","message":"Dumping the content is an interesting one. Easy enough to do, but it can/will include the certs/keys. Typically we don\u0027t log that info. I would like to hear from others on if this would be valuable. If so, I can probably hack the data to remove the certs/keys.\n\nI considered spinning this out as a timed out process, but felt we should do incremental dev. If this is something folks think we need now, I can work on that.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"# Note: The provider dict returned from this method will have provider"},{"line_number":89,"context_line":"#       data model objects in it."},{"line_number":90,"context_line":"def lb_dict_to_provider_dict(lb_dict, vip\u003dNone,"},{"line_number":91,"context_line":"                             db_pools\u003dNone, db_listeners\u003dNone):"},{"line_number":92,"context_line":"    new_lb_dict \u003d _base_to_provider_dict(lb_dict, include_project_id\u003dTrue)"},{"line_number":93,"context_line":"    new_lb_dict[\u0027loadbalancer_id\u0027] \u003d new_lb_dict.pop(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_b68358a9","line":90,"updated":"2018-05-02 19:53:21.000000000","message":"I wonder if there\u0027s a DRYer way to do all of these translations, like how we did the translation maps in the API types? Like for each type, just say \"these are the fields to delete\" and \"these are the fields to translate\" for each type and that\u0027s it","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"411cd3361186861981953c39fb0ac0be342829b8","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"# Note: The provider dict returned from this method will have provider"},{"line_number":89,"context_line":"#       data model objects in it."},{"line_number":90,"context_line":"def lb_dict_to_provider_dict(lb_dict, vip\u003dNone,"},{"line_number":91,"context_line":"                             db_pools\u003dNone, db_listeners\u003dNone):"},{"line_number":92,"context_line":"    new_lb_dict \u003d _base_to_provider_dict(lb_dict, include_project_id\u003dTrue)"},{"line_number":93,"context_line":"    new_lb_dict[\u0027loadbalancer_id\u0027] \u003d new_lb_dict.pop(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_77267aba","line":90,"in_reply_to":"5f7c97a3_35ba50de","updated":"2018-05-03 19:33:00.000000000","message":"Sure.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"# Note: The provider dict returned from this method will have provider"},{"line_number":89,"context_line":"#       data model objects in it."},{"line_number":90,"context_line":"def lb_dict_to_provider_dict(lb_dict, vip\u003dNone,"},{"line_number":91,"context_line":"                             db_pools\u003dNone, db_listeners\u003dNone):"},{"line_number":92,"context_line":"    new_lb_dict \u003d _base_to_provider_dict(lb_dict, include_project_id\u003dTrue)"},{"line_number":93,"context_line":"    new_lb_dict[\u0027loadbalancer_id\u0027] \u003d new_lb_dict.pop(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_35ba50de","line":90,"in_reply_to":"9f6a8fd7_b68358a9","updated":"2018-05-02 22:45:01.000000000","message":"Yeah, there is a bit of trade off between getting too fancy and making it hard to understand and maintain. The sub-objects make it hard.\nI did try to pull out common translations into it\u0027s own method.\nOptimize later if we decide we need it?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":15309,"name":"zhaobo","email":"bzhaojyathousandy@gmail.com","username":"ZhaoBo"},"change_message_id":"21e21e5c95d19b83c6fad4fd2ebab0b9d3ae19e8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        raise exceptions.ProviderDriverError(prov\u003dprovider, user_msg\u003de)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def _base_to_provider_dict(current_dict, include_project_id\u003dFalse):"},{"line_number":70,"context_line":"    new_dict \u003d copy.deepcopy(current_dict)"},{"line_number":71,"context_line":"    if \u0027provisioning_status\u0027 in new_dict:"},{"line_number":72,"context_line":"        del new_dict[\u0027provisioning_status\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_47c43af5","line":69,"range":{"start_line":69,"start_character":4,"end_line":69,"end_character":26},"updated":"2018-05-14 16:00:02.000000000","message":"Seems we are maintaining a south API towards vender\u0027s provider driver carefully, why we can not keep the dict, and the backend drivers get what they want. I\u0027m afraid is there any cases in parallel requests from octavia to provider drivers, then how the provider driver to check which request would be process without these parameters. So octavia need to forbid this based on the 2 status value.","commit_id":"4e53710e101a830bc331da7d6773135ac554bb09"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"074f764aec3c1ac0a794dc1af6848fcee26abb8c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        raise exceptions.ProviderDriverError(prov\u003dprovider, user_msg\u003de)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def _base_to_provider_dict(current_dict, include_project_id\u003dFalse):"},{"line_number":70,"context_line":"    new_dict \u003d copy.deepcopy(current_dict)"},{"line_number":71,"context_line":"    if \u0027provisioning_status\u0027 in new_dict:"},{"line_number":72,"context_line":"        del new_dict[\u0027provisioning_status\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_597c1e82","line":69,"range":{"start_line":69,"start_character":4,"end_line":69,"end_character":26},"in_reply_to":"5f7c97a3_47c43af5","updated":"2018-05-14 17:33:24.000000000","message":"I believe we would have done locking and rejected a parallel request already in the controller, well before we look to pass the request to the provider.","commit_id":"4e53710e101a830bc331da7d6773135ac554bb09"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"b0e7d62147c7aab38465d807b925a5c940d42d45","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        raise exceptions.ProviderDriverError(prov\u003dprovider, user_msg\u003de)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def _base_to_provider_dict(current_dict, include_project_id\u003dFalse):"},{"line_number":70,"context_line":"    new_dict \u003d copy.deepcopy(current_dict)"},{"line_number":71,"context_line":"    if \u0027provisioning_status\u0027 in new_dict:"},{"line_number":72,"context_line":"        del new_dict[\u0027provisioning_status\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_995dd616","line":69,"range":{"start_line":69,"start_character":4,"end_line":69,"end_character":26},"in_reply_to":"5f7c97a3_47c43af5","updated":"2018-05-14 17:36:04.000000000","message":"Right, the Octavia API process will still handle \"object\" locking for the various parts of a load balancer. This means that when we hand a request off to the driver it will already be validated (to the API) and locked in \"PENDING_*\".","commit_id":"4e53710e101a830bc331da7d6773135ac554bb09"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"0259c21d6ff37f682ea66a6ef65d9f4a575a886e","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    if \u0027health_monitor\u0027 in new_pool_dict and new_pool_dict[\u0027health_monitor\u0027]:"},{"line_number":228,"context_line":"        hm \u003d new_pool_dict.pop(\u0027health_monitor\u0027)"},{"line_number":229,"context_line":"        new_pool_dict[\u0027healthmonitor\u0027] \u003d hm_dict_to_provider_dict(hm)"},{"line_number":230,"context_line":"    if \u0027members\u0027 in new_pool_dict and new_pool_dict[\u0027members\u0027]:"},{"line_number":231,"context_line":"        members \u003d new_pool_dict.pop(\u0027members\u0027)"},{"line_number":232,"context_line":"        provider_members \u003d []"},{"line_number":233,"context_line":"        for member in members:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_5af8a779","line":230,"updated":"2018-05-13 00:38:51.000000000","message":"Would this not be simpler as \n\n\nmembers \u003d new_pool_dict.pop(\u0027members\u0027, None):\nif members:\n    ....\n\nOr are there cases where members can be {} and should be kept?","commit_id":"4e53710e101a830bc331da7d6773135ac554bb09"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"b0e7d62147c7aab38465d807b925a5c940d42d45","unresolved":false,"context_lines":[{"line_number":227,"context_line":"    if \u0027health_monitor\u0027 in new_pool_dict and new_pool_dict[\u0027health_monitor\u0027]:"},{"line_number":228,"context_line":"        hm \u003d new_pool_dict.pop(\u0027health_monitor\u0027)"},{"line_number":229,"context_line":"        new_pool_dict[\u0027healthmonitor\u0027] \u003d hm_dict_to_provider_dict(hm)"},{"line_number":230,"context_line":"    if \u0027members\u0027 in new_pool_dict and new_pool_dict[\u0027members\u0027]:"},{"line_number":231,"context_line":"        members \u003d new_pool_dict.pop(\u0027members\u0027)"},{"line_number":232,"context_line":"        provider_members \u003d []"},{"line_number":233,"context_line":"        for member in members:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f7c97a3_598ade69","line":230,"in_reply_to":"5f7c97a3_5af8a779","updated":"2018-05-14 17:36:04.000000000","message":"Yes, members can/do come in as an empty list.","commit_id":"4e53710e101a830bc331da7d6773135ac554bb09"}],"octavia/api/v2/controllers/l7policy.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                l7rule.L7RuleController(db_policy.id)._graph_create("},{"line_number":198,"context_line":"                    lock_session, r))"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        db_policy.l7rules \u003d new_rules"},{"line_number":201,"context_line":"        return db_policy"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    @wsme_pecan.wsexpose(l7policy_types.L7PolicyRootResponse,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_d66ccc09","line":200,"updated":"2018-05-02 19:53:21.000000000","message":"Ah, I think I assumed the DB linkage would take care of things, but yeah this is probably necessary so it shows up right in the return struct","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/api/v2/controllers/load_balancer.py":[{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            driver_lb_dict[\u0027vip_subnet_id\u0027] \u003d vip.subnet_id"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"            # Dispatch to the driver"},{"line_number":325,"context_line":"            LOG.info(\"Sending create Load Balancer {0} to provider \""},{"line_number":326,"context_line":"                     \"{1}\".format(db_lb.id, provider))"},{"line_number":327,"context_line":"            driver_utils.call_provider("},{"line_number":328,"context_line":"                provider, driver.loadbalancer_create,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_14c4e591","line":325,"updated":"2018-04-26 19:18:25.000000000","message":"Same here, should be lazy loaded","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":503,"context_line":"            self._test_lb_status(lock_session, id,"},{"line_number":504,"context_line":"                                 lb_status\u003dconstants.PENDING_DELETE)"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"            LOG.info(\"Sending delete Load Balancer {0} to provider {1}\".format("},{"line_number":507,"context_line":"                     id, provider))"},{"line_number":508,"context_line":"            driver_utils.call_provider(provider, driver.loadbalancer_delete,"},{"line_number":509,"context_line":"                                       id, cascade)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_d4bd0d03","line":506,"updated":"2018-04-26 19:18:25.000000000","message":"Same here, should be lazy loaded","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":22623,"name":"Erik Olof Gunnar Andersson","email":"eandersson@blizzard.com","username":"eoandersson"},"change_message_id":"2981629c020d758de72baa4fa6ce177f5fd04c4b","unresolved":false,"context_lines":[{"line_number":610,"context_line":""},{"line_number":611,"context_line":"        with db_api.get_lock_session() as lock_session:"},{"line_number":612,"context_line":"            self._test_lb_status(lock_session, self.lb_id)"},{"line_number":613,"context_line":"            LOG.info(\"Sending failover request for load balancer {0} to the \""},{"line_number":614,"context_line":"                     \"provider {1}\".format(self.lb_id, provider))"},{"line_number":615,"context_line":"            driver_utils.call_provider(provider, driver.loadbalancer_failover,"},{"line_number":616,"context_line":"                                       self.lb_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f6a8fd7_943555ab","line":613,"updated":"2018-04-26 19:18:25.000000000","message":"Same here, should be lazy loaded","commit_id":"ab0459924ece1200ce94eaa24273798c074f6bb3"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                isinstance(load_balancer.provider, wtypes.UnsetType)):"},{"line_number":260,"context_line":"            provider \u003d load_balancer.provider"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":263,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        lock_session \u003d db_api.get_session(autocommit\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_6145fc42","line":262,"updated":"2018-05-02 19:53:21.000000000","message":"This is now handled in two locations -- here AND the driver factory. I think we should remove this duplicated code here as having it centralized there should be fine.\n\nBut, maybe if this is the ONLY other place we\u0027ll do this (since sub-objects will all just pull from the parent) maybe it\u0027s fine.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"411cd3361186861981953c39fb0ac0be342829b8","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                isinstance(load_balancer.provider, wtypes.UnsetType)):"},{"line_number":260,"context_line":"            provider \u003d load_balancer.provider"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":263,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        lock_session \u003d db_api.get_session(autocommit\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_f7312aee","line":262,"in_reply_to":"5f7c97a3_351250b3","updated":"2018-05-03 19:33:00.000000000","message":"I meant you\u0027d do like.... \n\ndriver \u003d driver_factory.get_driver(load_balancer.provider)\n\nand then below it\u0027d be:\n\nlb_dict[\u0027provider\u0027] \u003d driver.name","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ed823d368471897d29785de264017da4c5aa3ee2","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                isinstance(load_balancer.provider, wtypes.UnsetType)):"},{"line_number":260,"context_line":"            provider \u003d load_balancer.provider"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":263,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        lock_session \u003d db_api.get_session(autocommit\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_b7665251","line":262,"in_reply_to":"5f7c97a3_57981e69","updated":"2018-05-03 20:20:35.000000000","message":"1) I don\u0027t think so? It should be guaranteed to exist due to our type model, just possibly Unset (which we could handle in the factory also)\n2) We could actually not require them to do it, but actually *set it* in the driver loader. I can comment there with an example.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0b7155346794caf78ccd0251d0a5a2eb52f30b96","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                isinstance(load_balancer.provider, wtypes.UnsetType)):"},{"line_number":260,"context_line":"            provider \u003d load_balancer.provider"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":263,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        lock_session \u003d db_api.get_session(autocommit\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_57981e69","line":262,"in_reply_to":"5f7c97a3_f7312aee","updated":"2018-05-03 20:10:53.000000000","message":"Two issues:\n1. I would still have to check that load_balancer had a provider field (not sure if we have the wsme types set to render non-specified here or not).\n2. This would require every driver to know the \"name\", which currently they do not, it is set in the entry_points and can be aliased by the operator.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                isinstance(load_balancer.provider, wtypes.UnsetType)):"},{"line_number":260,"context_line":"            provider \u003d load_balancer.provider"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":263,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        lock_session \u003d db_api.get_session(autocommit\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_351250b3","line":262,"in_reply_to":"9f6a8fd7_6145fc42","updated":"2018-05-02 22:45:01.000000000","message":"Yeah, this probably needs to stay. It\u0027s a special case of being the initial create plus it is needed below to assign into the load balancer object to save into the DB.\nI mean if anything I could take the check out of the driver factory and just assume it\u0027s passed in right. I really don\u0027t want to pass in a load balancer object as that is too restrictive for the other methods.\nAll of the other calls are going to be based on the DB LB provider field and just need to handle our upgrade migration issues (blank DB provider, which is NOT default).","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            vip_dict \u003d lb_dict.pop(\u0027vip\u0027, {})"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"            # Make sure we store the right provider in the DB"},{"line_number":282,"context_line":"            lb_dict[\u0027provider\u0027] \u003d provider"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"            # NoneType can be weird here, have to force type a second time"},{"line_number":285,"context_line":"            listeners \u003d lb_dict.pop(\u0027listeners\u0027, []) or []"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_a1a9d4dd","line":282,"updated":"2018-05-02 19:53:21.000000000","message":"If we removed the code I mentioned above, we could possibly pull the provider name from the provider driver itself?\ndriver.provider_name ?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ed823d368471897d29785de264017da4c5aa3ee2","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            vip_dict \u003d lb_dict.pop(\u0027vip\u0027, {})"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"            # Make sure we store the right provider in the DB"},{"line_number":282,"context_line":"            lb_dict[\u0027provider\u0027] \u003d provider"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"            # NoneType can be weird here, have to force type a second time"},{"line_number":285,"context_line":"            listeners \u003d lb_dict.pop(\u0027listeners\u0027, []) or []"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_575b3e86","line":282,"in_reply_to":"5f7c97a3_37c80254","updated":"2018-05-03 20:20:35.000000000","message":"See #2 above, I think this is solveable.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0b7155346794caf78ccd0251d0a5a2eb52f30b96","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            vip_dict \u003d lb_dict.pop(\u0027vip\u0027, {})"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"            # Make sure we store the right provider in the DB"},{"line_number":282,"context_line":"            lb_dict[\u0027provider\u0027] \u003d provider"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"            # NoneType can be weird here, have to force type a second time"},{"line_number":285,"context_line":"            listeners \u003d lb_dict.pop(\u0027listeners\u0027, []) or []"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_37c80254","line":282,"in_reply_to":"5f7c97a3_775bda2d","updated":"2018-05-03 20:10:53.000000000","message":"yeah, I get the normalized benefit. It just seems like I would prefer to have control of those names as an operator and not force it to be normalized to the driver\u0027s whim. It would also be slightly confusing to a user as any future get calls will return what the driver thinks it is called and not what they may have entered and the operator\u0027s intention.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"411cd3361186861981953c39fb0ac0be342829b8","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            vip_dict \u003d lb_dict.pop(\u0027vip\u0027, {})"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"            # Make sure we store the right provider in the DB"},{"line_number":282,"context_line":"            lb_dict[\u0027provider\u0027] \u003d provider"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"            # NoneType can be weird here, have to force type a second time"},{"line_number":285,"context_line":"            listeners \u003d lb_dict.pop(\u0027listeners\u0027, []) or []"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_775bda2d","line":282,"in_reply_to":"5f7c97a3_952004fa","updated":"2018-05-03 19:33:00.000000000","message":"actually I see no issue with aliasing, the user passes in one of the aliases and it causes this to be NORMALIZED to whatever the real name is supposed to be.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            vip_dict \u003d lb_dict.pop(\u0027vip\u0027, {})"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"            # Make sure we store the right provider in the DB"},{"line_number":282,"context_line":"            lb_dict[\u0027provider\u0027] \u003d provider"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"            # NoneType can be weird here, have to force type a second time"},{"line_number":285,"context_line":"            listeners \u003d lb_dict.pop(\u0027listeners\u0027, []) or []"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_952004fa","line":282,"in_reply_to":"9f6a8fd7_a1a9d4dd","updated":"2018-05-02 22:45:01.000000000","message":"That is extra burden on the driver writer to include that and removes the flexibility we have with aliasing drivers in the entry_points.  I\u0027m not sure the benefit is there.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                    provider, driver.create_vip_port, db_lb.id,"},{"line_number":303,"context_line":"                    db_lb.project_id, provider_vip_dict)"},{"line_number":304,"context_line":"                vip \u003d driver_utils.provider_vip_dict_to_vip_obj(vip_dict)"},{"line_number":305,"context_line":"            except exceptions.ProviderNotImplementedError:"},{"line_number":306,"context_line":"                # create vip port if not exist, driver didn\u0027t want to create"},{"line_number":307,"context_line":"                # the VIP port"},{"line_number":308,"context_line":"                vip \u003d self._create_vip_port_if_not_exist(db_lb)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_4191d898","line":305,"updated":"2018-05-02 19:53:21.000000000","message":"Err, wouldn\u0027t this JUST be a \"NotImplementedError\", not ProviderNotImplementedError?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"411cd3361186861981953c39fb0ac0be342829b8","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                    provider, driver.create_vip_port, db_lb.id,"},{"line_number":303,"context_line":"                    db_lb.project_id, provider_vip_dict)"},{"line_number":304,"context_line":"                vip \u003d driver_utils.provider_vip_dict_to_vip_obj(vip_dict)"},{"line_number":305,"context_line":"            except exceptions.ProviderNotImplementedError:"},{"line_number":306,"context_line":"                # create vip port if not exist, driver didn\u0027t want to create"},{"line_number":307,"context_line":"                # the VIP port"},{"line_number":308,"context_line":"                vip \u003d self._create_vip_port_if_not_exist(db_lb)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_f7460a50","line":305,"in_reply_to":"5f7c97a3_55782cf7","updated":"2018-05-03 19:33:00.000000000","message":"Ah, I saw in the drivers they were returning NotImplementedError but the utils.call_provider thing wraps that and returns this one. Got it.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                    provider, driver.create_vip_port, db_lb.id,"},{"line_number":303,"context_line":"                    db_lb.project_id, provider_vip_dict)"},{"line_number":304,"context_line":"                vip \u003d driver_utils.provider_vip_dict_to_vip_obj(vip_dict)"},{"line_number":305,"context_line":"            except exceptions.ProviderNotImplementedError:"},{"line_number":306,"context_line":"                # create vip port if not exist, driver didn\u0027t want to create"},{"line_number":307,"context_line":"                # the VIP port"},{"line_number":308,"context_line":"                vip \u003d self._create_vip_port_if_not_exist(db_lb)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_55782cf7","line":305,"in_reply_to":"9f6a8fd7_4191d898","updated":"2018-05-02 22:45:01.000000000","message":"Because the Provider exceptions include extra user and operator friendly messaging. I want to make sure EVERY provider error/issue is wrapped in the provider name.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        # Load the driver early as it also provides validation"},{"line_number":472,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":473,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":474,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":475,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_2134e4fa","line":473,"updated":"2018-05-02 19:53:21.000000000","message":"The DRY way to do this would be to handle empty-string in the driver factory, similar to handling Unset","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3e0a0b00d31ae75a9e2b47be5d1eff5a5115ef4f","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        # Load the driver early as it also provides validation"},{"line_number":472,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":473,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":474,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":475,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_b846554f","line":473,"in_reply_to":"5f7c97a3_957564fd","updated":"2018-05-02 22:53:05.000000000","message":"Actually, I really need the provider name for logging in these methods. So short of having the driver_factory also return the provider name (seems lame), this is pretty good.\nI decided to not change this.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"411cd3361186861981953c39fb0ac0be342829b8","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        # Load the driver early as it also provides validation"},{"line_number":472,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":473,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":474,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":475,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_77743a9a","line":473,"in_reply_to":"5f7c97a3_b846554f","updated":"2018-05-03 19:33:00.000000000","message":"I still think it\u0027d be good to have `driver.name` give the preferred driver name","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":470,"context_line":""},{"line_number":471,"context_line":"        # Load the driver early as it also provides validation"},{"line_number":472,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":473,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":474,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":475,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_957564fd","line":473,"in_reply_to":"9f6a8fd7_2134e4fa","updated":"2018-05-02 22:45:01.000000000","message":"Yeah, this is an odd one. I could move this around and into the driver factory.  Create will still be a special case (default !\u003d \u0027amphora\u0027 so we can\u0027t always use None\u003d\u003ddefault), but these others could be setup that way.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"9a64c4249997186f5eea46b61ed70b5237d72584","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                lb_dict[\u0027vip_qos_policy_id\u0027] \u003d vip_dict[\u0027qos_policy_id\u0027]"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"            # Dispatch to the driver"},{"line_number":491,"context_line":"            LOG.info(\"Sending update Load Balancer %s to provider \""},{"line_number":492,"context_line":"                     \"%s\", id, provider)"},{"line_number":493,"context_line":"            driver_utils.call_provider("},{"line_number":494,"context_line":"                provider, driver.loadbalancer_update,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_382bbceb","line":491,"updated":"2018-05-02 14:29:25.000000000","message":"LOG.Debug ?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"633cacf0da72065dd31720965d876dc4c8b51d7c","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                lb_dict[\u0027vip_qos_policy_id\u0027] \u003d vip_dict[\u0027qos_policy_id\u0027]"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"            # Dispatch to the driver"},{"line_number":491,"context_line":"            LOG.info(\"Sending update Load Balancer %s to provider \""},{"line_number":492,"context_line":"                     \"%s\", id, provider)"},{"line_number":493,"context_line":"            driver_utils.call_provider("},{"line_number":494,"context_line":"                provider, driver.loadbalancer_update,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_c9e194fe","line":491,"in_reply_to":"9f6a8fd7_382bbceb","updated":"2018-05-02 15:57:20.000000000","message":"Well, this is the only indication of sending this over to the driver. We had this as info previously. I think it\u0027s a useful \"info\" log marker.  Comments from others?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":488,"context_line":"                lb_dict[\u0027vip_qos_policy_id\u0027] \u003d vip_dict[\u0027qos_policy_id\u0027]"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"            # Dispatch to the driver"},{"line_number":491,"context_line":"            LOG.info(\"Sending update Load Balancer %s to provider \""},{"line_number":492,"context_line":"                     \"%s\", id, provider)"},{"line_number":493,"context_line":"            driver_utils.call_provider("},{"line_number":494,"context_line":"                provider, driver.loadbalancer_update,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_214f0493","line":491,"in_reply_to":"9f6a8fd7_c9e194fe","updated":"2018-05-02 19:53:21.000000000","message":"Fine as info IMO.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                isinstance(load_balancer.provider, wtypes.UnsetType)):"},{"line_number":260,"context_line":"            provider \u003d load_balancer.provider"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":263,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        lock_session \u003d db_api.get_session(autocommit\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ac0e9c8a","line":262,"updated":"2018-05-09 23:57:36.000000000","message":"This is now handled in two locations -- here AND the driver factory. I think we should remove this duplicated code, as having it centralized there should be fine.","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":260,"context_line":"            provider \u003d load_balancer.provider"},{"line_number":261,"context_line":"        else:"},{"line_number":262,"context_line":"            provider \u003d CONF.api_settings.default_provider_driver"},{"line_number":263,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        lock_session \u003d db_api.get_session(autocommit\u003dFalse)"},{"line_number":266,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_6c2884e1","line":263,"updated":"2018-05-09 23:57:36.000000000","message":"driver \u003d driver_factory.get_driver(load_balancer.provider)","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            vip_dict \u003d lb_dict.pop(\u0027vip\u0027, {})"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"            # Make sure we store the right provider in the DB"},{"line_number":282,"context_line":"            lb_dict[\u0027provider\u0027] \u003d provider"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"            # NoneType can be weird here, have to force type a second time"},{"line_number":285,"context_line":"            listeners \u003d lb_dict.pop(\u0027listeners\u0027, []) or []"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_8c23a005","line":282,"updated":"2018-05-09 23:57:36.000000000","message":"lb_dict[\u0027provider\u0027] \u003d driver.name","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            # as it has not been implemented beyond the API yet."},{"line_number":290,"context_line":"            # Remove this line when it is implemented."},{"line_number":291,"context_line":"            if \u0027flavor\u0027 in lb_dict:"},{"line_number":292,"context_line":"                del lb_dict[\u0027flavor\u0027]"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"            db_lb \u003d self.repositories.create_load_balancer_and_vip("},{"line_number":295,"context_line":"                lock_session, lb_dict, vip_dict)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_0c66b052","line":292,"updated":"2018-05-09 23:57:36.000000000","message":"This can be simplified to:\nlb_dict.pop(\u0027flavor\u0027, None)","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                provider_vip_dict \u003d driver_utils.vip_dict_to_provider_dict("},{"line_number":300,"context_line":"                    vip_dict)"},{"line_number":301,"context_line":"                vip_dict \u003d driver_utils.call_provider("},{"line_number":302,"context_line":"                    provider, driver.create_vip_port, db_lb.id,"},{"line_number":303,"context_line":"                    db_lb.project_id, provider_vip_dict)"},{"line_number":304,"context_line":"                vip \u003d driver_utils.provider_vip_dict_to_vip_obj(vip_dict)"},{"line_number":305,"context_line":"            except exceptions.ProviderNotImplementedError:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_8c516065","line":302,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                # the VIP port"},{"line_number":308,"context_line":"                vip \u003d self._create_vip_port_if_not_exist(db_lb)"},{"line_number":309,"context_line":"                LOG.info(\u0027Created VIP port %s for provider %s.\u0027,"},{"line_number":310,"context_line":"                         vip.port_id, provider)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"            self.repositories.vip.update("},{"line_number":313,"context_line":"                lock_session, db_lb.id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_2c504c5d","line":310,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":326,"context_line":""},{"line_number":327,"context_line":"            # Dispatch to the driver"},{"line_number":328,"context_line":"            LOG.info(\"Sending create Load Balancer %s to provider %s\","},{"line_number":329,"context_line":"                     db_lb.id, provider)"},{"line_number":330,"context_line":"            driver_utils.call_provider("},{"line_number":331,"context_line":"                provider, driver.loadbalancer_create,"},{"line_number":332,"context_line":"                driver_dm.LoadBalancer.from_dict(driver_lb_dict))"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_4c4b48af","line":329,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":328,"context_line":"            LOG.info(\"Sending create Load Balancer %s to provider %s\","},{"line_number":329,"context_line":"                     db_lb.id, provider)"},{"line_number":330,"context_line":"            driver_utils.call_provider("},{"line_number":331,"context_line":"                provider, driver.loadbalancer_create,"},{"line_number":332,"context_line":"                driver_dm.LoadBalancer.from_dict(driver_lb_dict))"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"            lock_session.commit()"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ecc7b411","line":331,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        # Load the driver early as it also provides validation"},{"line_number":472,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":473,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":474,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":475,"context_line":"        driver \u003d driver_factory.get_driver(db_lb.provider)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        with db_api.get_lock_session() as lock_session:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_0c7d50e6","line":474,"updated":"2018-05-09 23:57:36.000000000","message":"Don\u0027t need this anymore -- a None is handled in the driver_factory.\nAlso, since provider is an actual attribute on the model, there\u0027s not a huge point to using getattr here -- you can do the same thing with \n\nprovider \u003d db_lb.provider or \u0027amphora\u0027\n\nBut that doesn\u0027t matter, because you can remove the line.","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":482,"context_line":"            lb_dict[\u0027id\u0027] \u003d id"},{"line_number":483,"context_line":"            vip_dict \u003d {}"},{"line_number":484,"context_line":"            if \u0027vip\u0027 in lb_dict:"},{"line_number":485,"context_line":"                vip_dict \u003d lb_dict.pop(\u0027vip\u0027)"},{"line_number":486,"context_line":"            lb_dict \u003d driver_utils.lb_dict_to_provider_dict(lb_dict)"},{"line_number":487,"context_line":"            if \u0027qos_policy_id\u0027 in vip_dict:"},{"line_number":488,"context_line":"                lb_dict[\u0027vip_qos_policy_id\u0027] \u003d vip_dict[\u0027qos_policy_id\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ccd438c0","line":485,"updated":"2018-05-09 23:57:36.000000000","message":"The three above lines can all be simplified to:\n\nvip_dict \u003d lb_dict.pop(\u0027vip\u0027, {})","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":489,"context_line":""},{"line_number":490,"context_line":"            # Dispatch to the driver"},{"line_number":491,"context_line":"            LOG.info(\"Sending update Load Balancer %s to provider \""},{"line_number":492,"context_line":"                     \"%s\", id, provider)"},{"line_number":493,"context_line":"            driver_utils.call_provider("},{"line_number":494,"context_line":"                provider, driver.loadbalancer_update,"},{"line_number":495,"context_line":"                driver_dm.LoadBalancer.from_dict(lb_dict))"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_cc8678dc","line":492,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        # Load the driver early as it also provides validation"},{"line_number":523,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":524,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":525,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":526,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        with db_api.get_lock_session() as lock_session:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_8cd640c3","line":525,"updated":"2018-05-09 23:57:36.000000000","message":"same as above, can remove this","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":524,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":525,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":526,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        with db_api.get_lock_session() as lock_session:"},{"line_number":529,"context_line":"            if (db_lb.listeners or db_lb.pools) and not cascade:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_cca2f84b","line":526,"updated":"2018-05-09 23:57:36.000000000","message":"replace provider with db_lb.provider (this is even what you do above)","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":535,"context_line":"                                 lb_status\u003dconstants.PENDING_DELETE)"},{"line_number":536,"context_line":""},{"line_number":537,"context_line":"            LOG.info(\"Sending delete Load Balancer %s to provider %s\","},{"line_number":538,"context_line":"                     id, provider)"},{"line_number":539,"context_line":"            driver_utils.call_provider(provider, driver.loadbalancer_delete,"},{"line_number":540,"context_line":"                                       id, cascade)"},{"line_number":541,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_4ce02897","line":538,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"            LOG.info(\"Sending delete Load Balancer %s to provider %s\","},{"line_number":538,"context_line":"                     id, provider)"},{"line_number":539,"context_line":"            driver_utils.call_provider(provider, driver.loadbalancer_delete,"},{"line_number":540,"context_line":"                                       id, cascade)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    @pecan.expose()"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_ecf0146a","line":539,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":639,"context_line":"        # Load the driver early as it also provides validation"},{"line_number":640,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":641,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":642,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":643,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        with db_api.get_lock_session() as lock_session:"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_0cf4705a","line":642,"updated":"2018-05-09 23:57:36.000000000","message":"same","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":640,"context_line":"        # Defaulting to \"amphora\" here as any lbs in the octavia database"},{"line_number":641,"context_line":"        # with a blank provider had to be of type amphora."},{"line_number":642,"context_line":"        provider \u003d getattr(db_lb, \u0027provider\u0027, \u0027amphora\u0027)"},{"line_number":643,"context_line":"        driver \u003d driver_factory.get_driver(provider)"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"        with db_api.get_lock_session() as lock_session:"},{"line_number":646,"context_line":"            self._test_lb_status(lock_session, self.lb_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_8cff2033","line":643,"updated":"2018-05-09 23:57:36.000000000","message":"just pass db_lb.provider","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":645,"context_line":"        with db_api.get_lock_session() as lock_session:"},{"line_number":646,"context_line":"            self._test_lb_status(lock_session, self.lb_id)"},{"line_number":647,"context_line":"            LOG.info(\"Sending failover request for load balancer %s to the \""},{"line_number":648,"context_line":"                     \"provider %s\", self.lb_id, provider)"},{"line_number":649,"context_line":"            driver_utils.call_provider(provider, driver.loadbalancer_failover,"},{"line_number":650,"context_line":"                                       self.lb_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_2cfe0c37","line":648,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"509a3bceda4218c1a726bffddc5e1575367aac70","unresolved":false,"context_lines":[{"line_number":646,"context_line":"            self._test_lb_status(lock_session, self.lb_id)"},{"line_number":647,"context_line":"            LOG.info(\"Sending failover request for load balancer %s to the \""},{"line_number":648,"context_line":"                     \"provider %s\", self.lb_id, provider)"},{"line_number":649,"context_line":"            driver_utils.call_provider(provider, driver.loadbalancer_failover,"},{"line_number":650,"context_line":"                                       self.lb_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_0c99d01d","line":649,"updated":"2018-05-09 23:57:36.000000000","message":"replace `provider` with `driver.name`","commit_id":"73814712d7a97388de56bd428818a1a49b63418b"}],"octavia/common/config.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    cfg.ListOpt(\u0027enabled_provider_drivers\u0027,"},{"line_number":104,"context_line":"                help\u003d_(\u0027List of enabled provider drivers. Must match the \u0027"},{"line_number":105,"context_line":"                       \u0027driver name in the octavia.api.drivers entrypoint.\u0027),"},{"line_number":106,"context_line":"                default\u003d[\u0027octavia\u0027, \u0027amphora\u0027]),"},{"line_number":107,"context_line":"    cfg.StrOpt(\u0027default_provider_driver\u0027, default\u003d\u0027amphora\u0027,"},{"line_number":108,"context_line":"               help\u003d_(\u0027Default provider driver.\u0027)),"},{"line_number":109,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_c113a865","line":106,"updated":"2018-05-02 19:53:21.000000000","message":"Could amphora be first? :P","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    cfg.ListOpt(\u0027enabled_provider_drivers\u0027,"},{"line_number":104,"context_line":"                help\u003d_(\u0027List of enabled provider drivers. Must match the \u0027"},{"line_number":105,"context_line":"                       \u0027driver name in the octavia.api.drivers entrypoint.\u0027),"},{"line_number":106,"context_line":"                default\u003d[\u0027octavia\u0027, \u0027amphora\u0027]),"},{"line_number":107,"context_line":"    cfg.StrOpt(\u0027default_provider_driver\u0027, default\u003d\u0027amphora\u0027,"},{"line_number":108,"context_line":"               help\u003d_(\u0027Default provider driver.\u0027)),"},{"line_number":109,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_155b9487","line":106,"in_reply_to":"9f6a8fd7_c113a865","updated":"2018-05-02 22:45:01.000000000","message":"Done","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                help\u003d_(\u0027List of enabled provider drivers. Must match the \u0027"},{"line_number":105,"context_line":"                       \u0027driver name in the octavia.api.drivers entrypoint.\u0027),"},{"line_number":106,"context_line":"                default\u003d[\u0027octavia\u0027, \u0027amphora\u0027]),"},{"line_number":107,"context_line":"    cfg.StrOpt(\u0027default_provider_driver\u0027, default\u003d\u0027amphora\u0027,"},{"line_number":108,"context_line":"               help\u003d_(\u0027Default provider driver.\u0027)),"},{"line_number":109,"context_line":"]"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_211dc472","line":107,"updated":"2018-05-02 19:53:21.000000000","message":"I was tempted to say we don\u0027t set a *default* default, and then we can pull the first from the enabled list if they don\u0027t specify explicitly in config... But, maybe this is fine.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                help\u003d_(\u0027List of enabled provider drivers. Must match the \u0027"},{"line_number":105,"context_line":"                       \u0027driver name in the octavia.api.drivers entrypoint.\u0027),"},{"line_number":106,"context_line":"                default\u003d[\u0027octavia\u0027, \u0027amphora\u0027]),"},{"line_number":107,"context_line":"    cfg.StrOpt(\u0027default_provider_driver\u0027, default\u003d\u0027amphora\u0027,"},{"line_number":108,"context_line":"               help\u003d_(\u0027Default provider driver.\u0027)),"},{"line_number":109,"context_line":"]"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_954ec4bf","line":107,"in_reply_to":"9f6a8fd7_211dc472","updated":"2018-05-02 22:45:01.000000000","message":"Originally I was going to have the first record as the default, but we decided at the Dublin PTG to have an explicit call out.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/common/constants.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":195,"context_line":"LISTENER_ID \u003d \u0027listener_id\u0027"},{"line_number":196,"context_line":"LOADBALANCER \u003d \u0027loadbalancer\u0027"},{"line_number":197,"context_line":"LOADBALANCER_ID \u003d \u0027loadbalancer_id\u0027"},{"line_number":198,"context_line":"LOAD_BALANCER_ID \u003d \u0027load_balancer_id\u0027"},{"line_number":199,"context_line":"SERVER_GROUP_ID \u003d \u0027server_group_id\u0027"},{"line_number":200,"context_line":"ANTI_AFFINITY \u003d \u0027anti-affinity\u0027"},{"line_number":201,"context_line":"SOFT_ANTI_AFFINITY \u003d \u0027soft-anti-affinity\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_4107981d","line":198,"updated":"2018-05-02 19:53:21.000000000","message":"Ugh wut why, I will have a hard time not giving -1 to anything that adds *more* underscores.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"411cd3361186861981953c39fb0ac0be342829b8","unresolved":false,"context_lines":[{"line_number":195,"context_line":"LISTENER_ID \u003d \u0027listener_id\u0027"},{"line_number":196,"context_line":"LOADBALANCER \u003d \u0027loadbalancer\u0027"},{"line_number":197,"context_line":"LOADBALANCER_ID \u003d \u0027loadbalancer_id\u0027"},{"line_number":198,"context_line":"LOAD_BALANCER_ID \u003d \u0027load_balancer_id\u0027"},{"line_number":199,"context_line":"SERVER_GROUP_ID \u003d \u0027server_group_id\u0027"},{"line_number":200,"context_line":"ANTI_AFFINITY \u003d \u0027anti-affinity\u0027"},{"line_number":201,"context_line":"SOFT_ANTI_AFFINITY \u003d \u0027soft-anti-affinity\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_f75fea0b","line":198,"in_reply_to":"5f7c97a3_55c6ec18","updated":"2018-05-03 19:33:00.000000000","message":"Can we just fix the queue objects? :(","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ed823d368471897d29785de264017da4c5aa3ee2","unresolved":false,"context_lines":[{"line_number":195,"context_line":"LISTENER_ID \u003d \u0027listener_id\u0027"},{"line_number":196,"context_line":"LOADBALANCER \u003d \u0027loadbalancer\u0027"},{"line_number":197,"context_line":"LOADBALANCER_ID \u003d \u0027loadbalancer_id\u0027"},{"line_number":198,"context_line":"LOAD_BALANCER_ID \u003d \u0027load_balancer_id\u0027"},{"line_number":199,"context_line":"SERVER_GROUP_ID \u003d \u0027server_group_id\u0027"},{"line_number":200,"context_line":"ANTI_AFFINITY \u003d \u0027anti-affinity\u0027"},{"line_number":201,"context_line":"SOFT_ANTI_AFFINITY \u003d \u0027soft-anti-affinity\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_1755c650","line":198,"in_reply_to":"5f7c97a3_b70ad287","updated":"2018-05-03 20:20:35.000000000","message":"Fine. T_T","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"0b7155346794caf78ccd0251d0a5a2eb52f30b96","unresolved":false,"context_lines":[{"line_number":195,"context_line":"LISTENER_ID \u003d \u0027listener_id\u0027"},{"line_number":196,"context_line":"LOADBALANCER \u003d \u0027loadbalancer\u0027"},{"line_number":197,"context_line":"LOADBALANCER_ID \u003d \u0027loadbalancer_id\u0027"},{"line_number":198,"context_line":"LOAD_BALANCER_ID \u003d \u0027load_balancer_id\u0027"},{"line_number":199,"context_line":"SERVER_GROUP_ID \u003d \u0027server_group_id\u0027"},{"line_number":200,"context_line":"ANTI_AFFINITY \u003d \u0027anti-affinity\u0027"},{"line_number":201,"context_line":"SOFT_ANTI_AFFINITY \u003d \u0027soft-anti-affinity\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_b70ad287","line":198,"in_reply_to":"5f7c97a3_f75fea0b","updated":"2018-05-03 20:10:53.000000000","message":"I would fully support follow on patches doing so, but that would be an un-related change in an already too big patch to do here.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":195,"context_line":"LISTENER_ID \u003d \u0027listener_id\u0027"},{"line_number":196,"context_line":"LOADBALANCER \u003d \u0027loadbalancer\u0027"},{"line_number":197,"context_line":"LOADBALANCER_ID \u003d \u0027loadbalancer_id\u0027"},{"line_number":198,"context_line":"LOAD_BALANCER_ID \u003d \u0027load_balancer_id\u0027"},{"line_number":199,"context_line":"SERVER_GROUP_ID \u003d \u0027server_group_id\u0027"},{"line_number":200,"context_line":"ANTI_AFFINITY \u003d \u0027anti-affinity\u0027"},{"line_number":201,"context_line":"SOFT_ANTI_AFFINITY \u003d \u0027soft-anti-affinity\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_55c6ec18","line":198,"in_reply_to":"9f6a8fd7_4107981d","updated":"2018-05-02 22:45:01.000000000","message":"Because someone did underscores in the Octavia queue objects, so I added those queue objects to constants to track.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":221,"context_line":"PORTS \u003d \u0027ports\u0027"},{"line_number":222,"context_line":"MEMBER_PORTS \u003d \u0027member_ports\u0027"},{"line_number":223,"context_line":"LOADBALANCER_TOPOLOGY \u003d \u0027topology\u0027"},{"line_number":224,"context_line":"HEALTH_MONITOR_ID \u003d \u0027health_monitor_id\u0027"},{"line_number":225,"context_line":"L7POLICY_ID \u003d \u0027l7policy_id\u0027"},{"line_number":226,"context_line":"L7RULE_ID \u003d \u0027l7rule_id\u0027"},{"line_number":227,"context_line":"LOAD_BALANCER_UPDATES \u003d \u0027load_balancer_updates\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_bc081728","line":224,"updated":"2018-05-02 19:53:21.000000000","message":"Please noooooo moooooore underscooooores","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":221,"context_line":"PORTS \u003d \u0027ports\u0027"},{"line_number":222,"context_line":"MEMBER_PORTS \u003d \u0027member_ports\u0027"},{"line_number":223,"context_line":"LOADBALANCER_TOPOLOGY \u003d \u0027topology\u0027"},{"line_number":224,"context_line":"HEALTH_MONITOR_ID \u003d \u0027health_monitor_id\u0027"},{"line_number":225,"context_line":"L7POLICY_ID \u003d \u0027l7policy_id\u0027"},{"line_number":226,"context_line":"L7RULE_ID \u003d \u0027l7rule_id\u0027"},{"line_number":227,"context_line":"LOAD_BALANCER_UPDATES \u003d \u0027load_balancer_updates\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_75cbe81d","line":224,"in_reply_to":"9f6a8fd7_bc081728","updated":"2018-05-02 22:45:01.000000000","message":"Because someone did underscores in the Octavia queue objects, so I added those queue objects to constants to track.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":224,"context_line":"HEALTH_MONITOR_ID \u003d \u0027health_monitor_id\u0027"},{"line_number":225,"context_line":"L7POLICY_ID \u003d \u0027l7policy_id\u0027"},{"line_number":226,"context_line":"L7RULE_ID \u003d \u0027l7rule_id\u0027"},{"line_number":227,"context_line":"LOAD_BALANCER_UPDATES \u003d \u0027load_balancer_updates\u0027"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"CERT_ROTATE_AMPHORA_FLOW \u003d \u0027octavia-cert-rotate-amphora-flow\u0027"},{"line_number":230,"context_line":"CREATE_AMPHORA_FLOW \u003d \u0027octavia-create-amphora-flow\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_5c177b46","line":227,"updated":"2018-05-02 19:53:21.000000000","message":"Every time you add an underscore to an octavia object, an angel loses its wings","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":224,"context_line":"HEALTH_MONITOR_ID \u003d \u0027health_monitor_id\u0027"},{"line_number":225,"context_line":"L7POLICY_ID \u003d \u0027l7policy_id\u0027"},{"line_number":226,"context_line":"L7RULE_ID \u003d \u0027l7rule_id\u0027"},{"line_number":227,"context_line":"LOAD_BALANCER_UPDATES \u003d \u0027load_balancer_updates\u0027"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"CERT_ROTATE_AMPHORA_FLOW \u003d \u0027octavia-cert-rotate-amphora-flow\u0027"},{"line_number":230,"context_line":"CREATE_AMPHORA_FLOW \u003d \u0027octavia-create-amphora-flow\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_15d074c9","line":227,"in_reply_to":"9f6a8fd7_5c177b46","updated":"2018-05-02 22:45:01.000000000","message":"Because someone did underscores in the Octavia queue objects, so I added those queue objects to constants to track.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/common/exceptions.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"9a64c4249997186f5eea46b61ed70b5237d72584","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    code \u003d 501"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class ProviderUnsupportedOptionError(APIException):"},{"line_number":367,"context_line":"    msg \u003d _(\"Provider \u0027%(prov)s\u0027 does not support a requested option: \""},{"line_number":368,"context_line":"            \"%(user_msg)s\")"},{"line_number":369,"context_line":"    code \u003d 501"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_987be8bc","line":366,"updated":"2018-05-02 14:29:25.000000000","message":"This could also be a 400 - since a user specifies the provider and should know wha options are supported but dunno?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"633cacf0da72065dd31720965d876dc4c8b51d7c","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    code \u003d 501"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class ProviderUnsupportedOptionError(APIException):"},{"line_number":367,"context_line":"    msg \u003d _(\"Provider \u0027%(prov)s\u0027 does not support a requested option: \""},{"line_number":368,"context_line":"            \"%(user_msg)s\")"},{"line_number":369,"context_line":"    code \u003d 501"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_a921c04f","line":366,"in_reply_to":"9f6a8fd7_987be8bc","updated":"2018-05-02 15:57:20.000000000","message":"That is an option. If we change this, we should change not implemented as well.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    code \u003d 501"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"class ProviderUnsupportedOptionError(APIException):"},{"line_number":367,"context_line":"    msg \u003d _(\"Provider \u0027%(prov)s\u0027 does not support a requested option: \""},{"line_number":368,"context_line":"            \"%(user_msg)s\")"},{"line_number":369,"context_line":"    code \u003d 501"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_3c35e7da","line":366,"in_reply_to":"9f6a8fd7_a921c04f","updated":"2018-05-02 19:53:21.000000000","message":"Need to noodle, and probably see it in action","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/db/migration/alembic_migrations/versions/0f242cf02c74_add_provider_column.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"9a64c4249997186f5eea46b61ed70b5237d72584","unresolved":false,"context_lines":[{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":"    op.add_column("},{"line_number":33,"context_line":"        u\u0027load_balancer\u0027,"},{"line_number":34,"context_line":"        sa.Column(u\u0027provider\u0027, sa.String(64), nullable\u003dTrue)"},{"line_number":35,"context_line":"    )"},{"line_number":36,"context_line":"    op.execute(\"UPDATE load_balancer set provider\u003d\u0027amphora\u0027 where provider \""},{"line_number":37,"context_line":"               \"is null\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_d81f206e","line":34,"updated":"2018-05-02 14:29:25.000000000","message":"not sure if we should keep that a string and not a reference to a provider table since that allows to change the provider name later.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":"    op.add_column("},{"line_number":33,"context_line":"        u\u0027load_balancer\u0027,"},{"line_number":34,"context_line":"        sa.Column(u\u0027provider\u0027, sa.String(64), nullable\u003dTrue)"},{"line_number":35,"context_line":"    )"},{"line_number":36,"context_line":"    op.execute(\"UPDATE load_balancer set provider\u003d\u0027amphora\u0027 where provider \""},{"line_number":37,"context_line":"               \"is null\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_5c30dbe8","line":34,"in_reply_to":"9f6a8fd7_490824d8","updated":"2018-05-02 19:53:21.000000000","message":"I think this is fine.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"633cacf0da72065dd31720965d876dc4c8b51d7c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":"    op.add_column("},{"line_number":33,"context_line":"        u\u0027load_balancer\u0027,"},{"line_number":34,"context_line":"        sa.Column(u\u0027provider\u0027, sa.String(64), nullable\u003dTrue)"},{"line_number":35,"context_line":"    )"},{"line_number":36,"context_line":"    op.execute(\"UPDATE load_balancer set provider\u003d\u0027amphora\u0027 where provider \""},{"line_number":37,"context_line":"               \"is null\")"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_490824d8","line":34,"in_reply_to":"9f6a8fd7_d81f206e","updated":"2018-05-02 15:57:20.000000000","message":"There is no provider table. No where do we restrict the list of providers. Adding a providers table would require operators to do a DB migration for each driver installed which is a horrible user experience and could impact our database migrations.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/db/models.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"9a64c4249997186f5eea46b61ed70b5237d72584","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                                backref\u003dorm.backref(\"load_balancer\","},{"line_number":344,"context_line":"                                                    uselist\u003dFalse))"},{"line_number":345,"context_line":"    server_group_id \u003d sa.Column(sa.String(36), nullable\u003dTrue)"},{"line_number":346,"context_line":"    provider \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"class VRRPGroup(base_models.BASE):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_d808802e","line":346,"updated":"2018-05-02 14:29:25.000000000","message":"This should not be nullable! You need a provider --","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                                backref\u003dorm.backref(\"load_balancer\","},{"line_number":344,"context_line":"                                                    uselist\u003dFalse))"},{"line_number":345,"context_line":"    server_group_id \u003d sa.Column(sa.String(36), nullable\u003dTrue)"},{"line_number":346,"context_line":"    provider \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"class VRRPGroup(base_models.BASE):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_7c403f36","line":346,"in_reply_to":"9f6a8fd7_493a6498","updated":"2018-05-02 19:53:21.000000000","message":"And technically, no provider means \"amphora\" provider, in our code","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                                backref\u003dorm.backref(\"load_balancer\","},{"line_number":344,"context_line":"                                                    uselist\u003dFalse))"},{"line_number":345,"context_line":"    server_group_id \u003d sa.Column(sa.String(36), nullable\u003dTrue)"},{"line_number":346,"context_line":"    provider \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"class VRRPGroup(base_models.BASE):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_d55e7c44","line":346,"in_reply_to":"9f6a8fd7_7c403f36","updated":"2018-05-02 22:45:01.000000000","message":"Yeah, this handles the zero downtime upgrade case where the operator runs the DB migration and then upgrades the controllers. There could be an LB created in between, which would have a null provider.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"633cacf0da72065dd31720965d876dc4c8b51d7c","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                                backref\u003dorm.backref(\"load_balancer\","},{"line_number":344,"context_line":"                                                    uselist\u003dFalse))"},{"line_number":345,"context_line":"    server_group_id \u003d sa.Column(sa.String(36), nullable\u003dTrue)"},{"line_number":346,"context_line":"    provider \u003d sa.Column(sa.String(64), nullable\u003dTrue)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"class VRRPGroup(base_models.BASE):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_493a6498","line":346,"in_reply_to":"9f6a8fd7_d808802e","updated":"2018-05-02 15:57:20.000000000","message":"This has to be nullable to handle zero downtime upgrades.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/tests/functional/api/v2/base.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027,"},{"line_number":83,"context_line":"                         default_provider_driver\u003d\u0027noop_driver\u0027)"},{"line_number":84,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027,"},{"line_number":85,"context_line":"                         enabled_provider_drivers\u003d\u0027octavia, noop_driver\u0027)"},{"line_number":86,"context_line":"        self.lb_repo \u003d repositories.LoadBalancerRepository()"},{"line_number":87,"context_line":"        self.listener_repo \u003d repositories.ListenerRepository()"},{"line_number":88,"context_line":"        self.listener_stats_repo \u003d repositories.ListenerStatisticsRepository()"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_5c453b42","line":85,"updated":"2018-05-02 19:53:21.000000000","message":"\"octavia\" not \"amphora\"? Do we need a test to make sure both work?\nWe probably should... But I would make amphora the default and then a one-off test to make sure octavia works.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027,"},{"line_number":83,"context_line":"                         default_provider_driver\u003d\u0027noop_driver\u0027)"},{"line_number":84,"context_line":"        self.conf.config(group\u003d\u0027api_settings\u0027,"},{"line_number":85,"context_line":"                         enabled_provider_drivers\u003d\u0027octavia, noop_driver\u0027)"},{"line_number":86,"context_line":"        self.lb_repo \u003d repositories.LoadBalancerRepository()"},{"line_number":87,"context_line":"        self.listener_repo \u003d repositories.ListenerRepository()"},{"line_number":88,"context_line":"        self.listener_stats_repo \u003d repositories.ListenerStatisticsRepository()"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_d502fc3e","line":85,"in_reply_to":"9f6a8fd7_5c453b42","updated":"2018-05-02 22:45:01.000000000","message":"Done, we still need to test with octavia though for backward compatibility.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"octavia/tests/functional/db/test_repositories.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2edbb68cbbe425e4f4fc52ed60523b20cdb70f7a","unresolved":false,"context_lines":[{"line_number":127,"context_line":"              \u0027operating_status\u0027: constants.OFFLINE,"},{"line_number":128,"context_line":"              \u0027topology\u0027: constants.TOPOLOGY_ACTIVE_STANDBY,"},{"line_number":129,"context_line":"              \u0027vrrp_group\u0027: None,"},{"line_number":130,"context_line":"              \u0027provider\u0027: \u0027octavia\u0027,"},{"line_number":131,"context_line":"              \u0027server_group_id\u0027: uuidutils.generate_uuid(),"},{"line_number":132,"context_line":"              \u0027project_id\u0027: uuidutils.generate_uuid(),"},{"line_number":133,"context_line":"              \u0027id\u0027: uuidutils.generate_uuid()}"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f6a8fd7_7c691fbc","line":130,"updated":"2018-05-02 19:53:21.000000000","message":"\u0027amphora\u0027","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cf1bb27dfa0525d8f6a0ee4ecdb64bca1874b315","unresolved":false,"context_lines":[{"line_number":127,"context_line":"              \u0027operating_status\u0027: constants.OFFLINE,"},{"line_number":128,"context_line":"              \u0027topology\u0027: constants.TOPOLOGY_ACTIVE_STANDBY,"},{"line_number":129,"context_line":"              \u0027vrrp_group\u0027: None,"},{"line_number":130,"context_line":"              \u0027provider\u0027: \u0027octavia\u0027,"},{"line_number":131,"context_line":"              \u0027server_group_id\u0027: uuidutils.generate_uuid(),"},{"line_number":132,"context_line":"              \u0027project_id\u0027: uuidutils.generate_uuid(),"},{"line_number":133,"context_line":"              \u0027id\u0027: uuidutils.generate_uuid()}"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_95fc843f","line":130,"in_reply_to":"9f6a8fd7_7c691fbc","updated":"2018-05-02 22:45:01.000000000","message":"Done","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}],"setup.cfg":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"9a64c4249997186f5eea46b61ed70b5237d72584","unresolved":false,"context_lines":[{"line_number":72,"context_line":"octavia.api.drivers \u003d"},{"line_number":73,"context_line":"    noop_driver \u003d octavia.api.drivers.noop_driver.driver:NoopProviderDriver"},{"line_number":74,"context_line":"    amphora \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"},{"line_number":75,"context_line":"    # octavia is an alias for backward compatibility"},{"line_number":76,"context_line":"    octavia \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"},{"line_number":77,"context_line":"octavia.api.handlers \u003d"},{"line_number":78,"context_line":"    simulated_handler \u003d octavia.api.handlers.controller_simulator.handler:SimulatedControllerHandler"}],"source_content_type":"text/x-ttcn-cfg","patch_set":8,"id":"9f6a8fd7_b3128f57","line":75,"updated":"2018-05-02 14:29:25.000000000","message":"should we say deprecated?","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"633cacf0da72065dd31720965d876dc4c8b51d7c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"octavia.api.drivers \u003d"},{"line_number":73,"context_line":"    noop_driver \u003d octavia.api.drivers.noop_driver.driver:NoopProviderDriver"},{"line_number":74,"context_line":"    amphora \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"},{"line_number":75,"context_line":"    # octavia is an alias for backward compatibility"},{"line_number":76,"context_line":"    octavia \u003d octavia.api.drivers.amphora_driver.driver:AmphoraProviderDriver"},{"line_number":77,"context_line":"octavia.api.handlers \u003d"},{"line_number":78,"context_line":"    simulated_handler \u003d octavia.api.handlers.controller_simulator.handler:SimulatedControllerHandler"}],"source_content_type":"text/x-ttcn-cfg","patch_set":8,"id":"9f6a8fd7_29d2905d","line":75,"in_reply_to":"9f6a8fd7_b3128f57","updated":"2018-05-02 15:57:20.000000000","message":"Since it is just an alias I\u0027m not sure it deserves a deprecation.","commit_id":"53ff37e8b74968cbbb773bcbf5175188310c5393"}]}
