)]}'
{"etc/octavia.conf":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9e3f8937900ae44c0bfb868739763adb62f3bdf8","unresolved":false,"context_lines":[{"line_number":117,"context_line":"# Health/StatsUpdate options are"},{"line_number":118,"context_line":"#                           *_db"},{"line_number":119,"context_line":"#                           *_logger"},{"line_number":120,"context_line":"# health_update_driver \u003d health_db"},{"line_number":121,"context_line":"# stats_update_driver \u003d stats_db"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":3,"id":"bf51134e_64c99a57","side":"PARENT","line":120,"updated":"2020-06-24 22:06:46.000000000","message":"These are defined in setup.cfg entry points. We need to update that as well.\n\nhttps://github.com/openstack/octavia/blob/master/setup.cfg#L65","commit_id":"77786595e5803488f46e9b4faae02b5bccdfe88d"},{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"cf6b9364b9c27e757696cfd74e097c9293d20759","unresolved":false,"context_lines":[{"line_number":117,"context_line":"# Health/StatsUpdate options are"},{"line_number":118,"context_line":"#                           *_db"},{"line_number":119,"context_line":"#                           *_logger"},{"line_number":120,"context_line":"# health_update_driver \u003d health_db"},{"line_number":121,"context_line":"# stats_update_driver \u003d stats_db"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"[keystone_authtoken]"}],"source_content_type":"text/plain","patch_set":3,"id":"bf51134e_0a1d4773","side":"PARENT","line":120,"in_reply_to":"bf51134e_64c99a57","updated":"2020-06-25 01:25:52.000000000","message":"Done","commit_id":"77786595e5803488f46e9b4faae02b5bccdfe88d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"fcdec572d4f4b5d5c98ea557aa663a2744fef7dd","unresolved":false,"context_lines":[{"line_number":321,"context_line":"#"},{"line_number":322,"context_line":"# distributor_driver \u003d distributor_noop_driver"},{"line_number":323,"context_line":"#"},{"line_number":324,"context_line":"# Stats update driver options are stats_db"},{"line_number":325,"context_line":"#                                 stats_logger"},{"line_number":326,"context_line":"# stats_update_drivers \u003d stats_db"},{"line_number":327,"context_line":""}],"source_content_type":"text/plain","patch_set":12,"id":"bf51134e_9eccc461","line":324,"updated":"2020-07-16 17:20:56.000000000","message":"Would be nice to have a comment that this is a list (comma separated?)","commit_id":"cfee9373145fbef7d502c45d748c2caca16eedbd"}],"octavia/amphorae/drivers/health/heartbeat_udp.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9e3f8937900ae44c0bfb868739763adb62f3bdf8","unresolved":false,"context_lines":[{"line_number":94,"context_line":"         \"ver\": 2"},{"line_number":95,"context_line":"        }"},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    handler \u003d stevedore_driver.DriverManager("},{"line_number":98,"context_line":"        namespace\u003d\u0027octavia.amphora.stats_update_drivers\u0027,"},{"line_number":99,"context_line":"        name\u003dCONF.health_manager.stats_update_driver,"},{"line_number":100,"context_line":"        invoke_on_load\u003dTrue"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_c4aa2617","line":97,"updated":"2020-06-24 22:06:46.000000000","message":"So this is still a single driver call, are you going to change that in this patch or a different one?\nI still think, under this new model, this could become a singleton.","commit_id":"55769481cec9345b0cbdd148e861dd8764f75352"},{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"cf6b9364b9c27e757696cfd74e097c9293d20759","unresolved":false,"context_lines":[{"line_number":94,"context_line":"         \"ver\": 2"},{"line_number":95,"context_line":"        }"},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    handler \u003d stevedore_driver.DriverManager("},{"line_number":98,"context_line":"        namespace\u003d\u0027octavia.amphora.stats_update_drivers\u0027,"},{"line_number":99,"context_line":"        name\u003dCONF.health_manager.stats_update_driver,"},{"line_number":100,"context_line":"        invoke_on_load\u003dTrue"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_aa289b96","line":97,"in_reply_to":"bf51134e_c4aa2617","updated":"2020-06-25 01:25:52.000000000","message":"Now it is a singleton and can call multiple drivers.","commit_id":"55769481cec9345b0cbdd148e861dd8764f75352"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9e3f8937900ae44c0bfb868739763adb62f3bdf8","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            # Map the status for neutron-lbaas compatibility"},{"line_number":238,"context_line":"            if new_op_status \u003d\u003d constants.DRAINING:"},{"line_number":239,"context_line":"                new_op_status \u003d constants.ONLINE"},{"line_number":240,"context_line":"            message.update({constants.OPERATING_STATUS: new_op_status})"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def update_health(self, health, srcaddr):"},{"line_number":243,"context_line":"        # The executor will eat any exceptions from the update_health code"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_24d322d7","line":240,"updated":"2020-06-24 22:06:46.000000000","message":"What is message for? I think this might be dead code leftover from an old status message queue to neutron-lbaas.","commit_id":"55769481cec9345b0cbdd148e861dd8764f75352"},{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"cf6b9364b9c27e757696cfd74e097c9293d20759","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            # Map the status for neutron-lbaas compatibility"},{"line_number":238,"context_line":"            if new_op_status \u003d\u003d constants.DRAINING:"},{"line_number":239,"context_line":"                new_op_status \u003d constants.ONLINE"},{"line_number":240,"context_line":"            message.update({constants.OPERATING_STATUS: new_op_status})"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"    def update_health(self, health, srcaddr):"},{"line_number":243,"context_line":"        # The executor will eat any exceptions from the update_health code"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_6ad843ee","line":240,"in_reply_to":"bf51134e_24d322d7","updated":"2020-06-25 01:25:52.000000000","message":"We think you are right. Removed this and the neutron-lbaas compatibility checks.","commit_id":"55769481cec9345b0cbdd148e861dd8764f75352"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1c534857f097468309f47631753205c685ffdf28","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        LOG.debug(\"Listener %s / Amphora %s stats: %s\","},{"line_number":128,"context_line":"                  listener_id, amphora_id, listener_dict)"},{"line_number":129,"context_line":"        listener_stats[listener_id] \u003d listener_dict"},{"line_number":130,"context_line":"    for handler in handlers:"},{"line_number":131,"context_line":"        LOG.debug(\"Sending updated listener stats to driver `%s` for \""},{"line_number":132,"context_line":"                  \"amphora: `%s`\", handler.name, amphora_id)"},{"line_number":133,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_ada4a009","line":130,"updated":"2020-07-06 23:30:03.000000000","message":"There is no reason to iterate over the handlers like this, stevedore can handle this for you using map() or map_method().\nhttps://docs.openstack.org/stevedore/latest/reference/index.html#stevedore.extension.ExtensionManager.map\n\nThis section of the tutorial may also be helpful: https://docs.openstack.org/stevedore/latest/user/tutorial/loading.html#loading-extensions","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"},{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"e863dd186a3bbd99dc2963153ff2c882d2466a8a","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        LOG.debug(\"Listener %s / Amphora %s stats: %s\","},{"line_number":128,"context_line":"                  listener_id, amphora_id, listener_dict)"},{"line_number":129,"context_line":"        listener_stats[listener_id] \u003d listener_dict"},{"line_number":130,"context_line":"    for handler in handlers:"},{"line_number":131,"context_line":"        LOG.debug(\"Sending updated listener stats to driver `%s` for \""},{"line_number":132,"context_line":"                  \"amphora: `%s`\", handler.name, amphora_id)"},{"line_number":133,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_b544a548","line":130,"in_reply_to":"bf51134e_ada4a009","updated":"2020-07-27 19:52:01.000000000","message":"Done","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2d8d9f0e1dad2e686efff0ec139421b222d8c1f4","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        LOG.debug(\"Listener %s / Amphora %s stats: %s\","},{"line_number":128,"context_line":"                  listener_id, amphora_id, listener_dict)"},{"line_number":129,"context_line":"        listener_stats[listener_id] \u003d listener_dict"},{"line_number":130,"context_line":"    for handler in handlers:"},{"line_number":131,"context_line":"        LOG.debug(\"Sending updated listener stats to driver `%s` for \""},{"line_number":132,"context_line":"                  \"amphora: `%s`\", handler.name, amphora_id)"},{"line_number":133,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_b1698ebf","line":130,"in_reply_to":"bf51134e_ada4a009","updated":"2020-07-07 14:04:13.000000000","message":"Hmm, but what will happen in case of exceptions then? Does it do them iteratively and would it stop after an error, or does it thread them all in parallel, or what? This way guarantees that even an error in one extension will still let the others run, and simply log the issue.","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2c1d0bc283c0a1efc413cb15153e39386b95f551","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        LOG.debug(\"Listener %s / Amphora %s stats: %s\","},{"line_number":128,"context_line":"                  listener_id, amphora_id, listener_dict)"},{"line_number":129,"context_line":"        listener_stats[listener_id] \u003d listener_dict"},{"line_number":130,"context_line":"    for handler in handlers:"},{"line_number":131,"context_line":"        LOG.debug(\"Sending updated listener stats to driver `%s` for \""},{"line_number":132,"context_line":"                  \"amphora: `%s`\", handler.name, amphora_id)"},{"line_number":133,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_72cc8aba","line":130,"in_reply_to":"bf51134e_b1698ebf","updated":"2020-07-16 10:17:49.000000000","message":"Yeah ok, there\u0027s an option for that, about propagating errors. Done.","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1c534857f097468309f47631753205c685ffdf28","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            max_workers\u003dCONF.health_manager.health_update_threads)"},{"line_number":159,"context_line":"        self.stats_executor \u003d futures.ProcessPoolExecutor("},{"line_number":160,"context_line":"            max_workers\u003dCONF.health_manager.stats_update_threads)"},{"line_number":161,"context_line":"        self.repo \u003d repo.AmphoraHealthRepository()"},{"line_number":162,"context_line":"        self.health_updater \u003d UpdateHealthDb()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def update(self, key, ip, port):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_0d8cac7d","line":161,"range":{"start_line":161,"start_character":13,"end_line":161,"end_character":17},"updated":"2020-07-06 23:30:03.000000000","message":"nit: this is totally not your issue, but if you feel motivated, repo is to vague here. We have a \"repo\" class, but what this is creating is an amphora_health_repo object. It might be nice to have this be self.amphora_health_repo just to remove confusion with the Repositories() class. This would also make is consistent with the code below.","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2d8d9f0e1dad2e686efff0ec139421b222d8c1f4","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            max_workers\u003dCONF.health_manager.health_update_threads)"},{"line_number":159,"context_line":"        self.stats_executor \u003d futures.ProcessPoolExecutor("},{"line_number":160,"context_line":"            max_workers\u003dCONF.health_manager.stats_update_threads)"},{"line_number":161,"context_line":"        self.repo \u003d repo.AmphoraHealthRepository()"},{"line_number":162,"context_line":"        self.health_updater \u003d UpdateHealthDb()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def update(self, key, ip, port):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_f16306db","line":161,"range":{"start_line":161,"start_character":13,"end_line":161,"end_character":17},"in_reply_to":"bf51134e_0d8cac7d","updated":"2020-07-07 14:04:13.000000000","message":"Yeah, we can rename this.","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"},{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"e863dd186a3bbd99dc2963153ff2c882d2466a8a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            max_workers\u003dCONF.health_manager.health_update_threads)"},{"line_number":159,"context_line":"        self.stats_executor \u003d futures.ProcessPoolExecutor("},{"line_number":160,"context_line":"            max_workers\u003dCONF.health_manager.stats_update_threads)"},{"line_number":161,"context_line":"        self.repo \u003d repo.AmphoraHealthRepository()"},{"line_number":162,"context_line":"        self.health_updater \u003d UpdateHealthDb()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def update(self, key, ip, port):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_753e8db8","line":161,"range":{"start_line":161,"start_character":13,"end_line":161,"end_character":17},"in_reply_to":"bf51134e_0d8cac7d","updated":"2020-07-27 19:52:01.000000000","message":"self.repo was not being used at all in this class, so we removed it entirely.","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2c1d0bc283c0a1efc413cb15153e39386b95f551","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            max_workers\u003dCONF.health_manager.health_update_threads)"},{"line_number":159,"context_line":"        self.stats_executor \u003d futures.ProcessPoolExecutor("},{"line_number":160,"context_line":"            max_workers\u003dCONF.health_manager.stats_update_threads)"},{"line_number":161,"context_line":"        self.repo \u003d repo.AmphoraHealthRepository()"},{"line_number":162,"context_line":"        self.health_updater \u003d UpdateHealthDb()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    def update(self, key, ip, port):"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf51134e_32d69250","line":161,"range":{"start_line":161,"start_character":13,"end_line":161,"end_character":17},"in_reply_to":"bf51134e_f16306db","updated":"2020-07-16 10:17:49.000000000","message":"Turns out it just wasn\u0027t used, so we removed it.","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"}],"octavia/api/drivers/driver_agent/driver_updater.py":[{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"42e8df4b0616c2624c5b84d516cfbacfb041964d","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # constraint requirement."},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if stats_objects:"},{"line_number":182,"context_line":"                stats_base.update_stats_via_driver(stats_objects)"},{"line_number":183,"context_line":"        except Exception as e:"},{"line_number":184,"context_line":"            return {"},{"line_number":185,"context_line":"                lib_consts.STATUS_CODE: lib_consts.DRVR_STATUS_CODE_FAILED,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_46eedc8b","line":182,"range":{"start_line":182,"start_character":16,"end_line":182,"end_character":50},"updated":"2020-08-11 16:48:34.000000000","message":"This is octavia.controller.healthmanager.stats_drivers so amphora-specific code. The driver agent should be provider agnostic.","commit_id":"4f6234229aae6a56062c2afa4e9213e9a5ba53fa"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c8d327da378fc668959ff8f839d283d4b5b17ec0","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # constraint requirement."},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if stats_objects:"},{"line_number":182,"context_line":"                stats_base.update_stats_via_driver(stats_objects)"},{"line_number":183,"context_line":"        except Exception as e:"},{"line_number":184,"context_line":"            return {"},{"line_number":185,"context_line":"                lib_consts.STATUS_CODE: lib_consts.DRVR_STATUS_CODE_FAILED,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_e386fdba","line":182,"range":{"start_line":182,"start_character":16,"end_line":182,"end_character":50},"in_reply_to":"9f560f44_46eedc8b","updated":"2020-08-11 21:51:43.000000000","message":"These are not amphora-specific, and in fact were moved to the least amphora-related place I could find that still made some sense. Maybe they could move out further? These are totally agnostic and will work with any provider.","commit_id":"4f6234229aae6a56062c2afa4e9213e9a5ba53fa"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"a1a95eeb66eae4141aed30fd7392ff47eb8ba2c2","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        # constraint requirement."},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            if stats_objects:"},{"line_number":182,"context_line":"                stats_base.update_stats_via_driver(stats_objects)"},{"line_number":183,"context_line":"        except Exception as e:"},{"line_number":184,"context_line":"            return {"},{"line_number":185,"context_line":"                lib_consts.STATUS_CODE: lib_consts.DRVR_STATUS_CODE_FAILED,"}],"source_content_type":"text/x-python","patch_set":25,"id":"9f560f44_5434bdfb","line":182,"range":{"start_line":182,"start_character":16,"end_line":182,"end_character":50},"in_reply_to":"9f560f44_e386fdba","updated":"2020-08-12 06:44:31.000000000","message":"I know it will work with any provider but path octavia/controller/ is amphora specific. Maybe consider new directory octavia/statistics","commit_id":"4f6234229aae6a56062c2afa4e9213e9a5ba53fa"}],"octavia/common/config.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9e3f8937900ae44c0bfb868739763adb62f3bdf8","unresolved":false,"context_lines":[{"line_number":301,"context_line":"               mutable\u003dTrue,"},{"line_number":302,"context_line":"               help\u003d_(\u0027Sleep time between sending heartbeats.\u0027)),"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    # Used for updating health and stats"},{"line_number":305,"context_line":"    cfg.StrOpt(\u0027health_update_driver\u0027, default\u003d\u0027health_db\u0027,"},{"line_number":306,"context_line":"               help\u003d_(\u0027Driver for updating amphora health system.\u0027)),"},{"line_number":307,"context_line":"    cfg.StrOpt(\u0027stats_update_driver\u0027, default\u003d\u0027stats_db\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_84414eac","side":"PARENT","line":304,"updated":"2020-06-24 22:06:46.000000000","message":"I think we should leave health_update_driver in deprecated mode with a comment that this is no longer used. At least so folks can clean out their config files.\nhttps://docs.openstack.org/oslo.config/latest/reference/deprecating.html","commit_id":"77786595e5803488f46e9b4faae02b5bccdfe88d"},{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"cf6b9364b9c27e757696cfd74e097c9293d20759","unresolved":false,"context_lines":[{"line_number":301,"context_line":"               mutable\u003dTrue,"},{"line_number":302,"context_line":"               help\u003d_(\u0027Sleep time between sending heartbeats.\u0027)),"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    # Used for updating health and stats"},{"line_number":305,"context_line":"    cfg.StrOpt(\u0027health_update_driver\u0027, default\u003d\u0027health_db\u0027,"},{"line_number":306,"context_line":"               help\u003d_(\u0027Driver for updating amphora health system.\u0027)),"},{"line_number":307,"context_line":"    cfg.StrOpt(\u0027stats_update_driver\u0027, default\u003d\u0027stats_db\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_2572fcad","side":"PARENT","line":304,"in_reply_to":"bf51134e_84414eac","updated":"2020-06-25 01:25:52.000000000","message":"Done","commit_id":"77786595e5803488f46e9b4faae02b5bccdfe88d"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6934969319844e90c5b3f41aee6c4959ce57a52f","unresolved":false,"context_lines":[{"line_number":471,"context_line":"    cfg.StrOpt(\u0027distributor_driver\u0027,"},{"line_number":472,"context_line":"               default\u003d\u0027distributor_noop_driver\u0027,"},{"line_number":473,"context_line":"               help\u003d_(\u0027Name of the distributor driver to use\u0027)),"},{"line_number":474,"context_line":"    cfg.ListOpt(\u0027stats_update_drivers\u0027, default\u003d[\u0027stats_db\u0027],"},{"line_number":475,"context_line":"                deprecated_name\u003d\u0027stats_update_driver\u0027,"},{"line_number":476,"context_line":"                deprecated_group\u003d\u0027health_manager\u0027,"},{"line_number":477,"context_line":"                deprecated_since\u003d\u0027Victoria\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"bf51134e_923e7e88","line":474,"updated":"2020-07-16 10:19:52.000000000","message":"Is this where this option should live? (It\u0027s hard to see in the diff, but we\u0027re in controller_worker_opts)\nAlso, is this how deprecated_name/group/since work?","commit_id":"6800c91c5e16679f57f8557a543c715776f9682c"}],"octavia/common/data_models.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"1ea5e7e1fdea9673d323ae4e2b7d2008f429256b","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                 bytes_out\u003d0, active_connections\u003d0,"},{"line_number":186,"context_line":"                 total_connections\u003d0, request_errors\u003d0):"},{"line_number":187,"context_line":"        self.listener_id \u003d listener_id"},{"line_number":188,"context_line":"        self.amphora_id \u003d amphora_id"},{"line_number":189,"context_line":"        self.bytes_in \u003d bytes_in"},{"line_number":190,"context_line":"        self.bytes_out \u003d bytes_out"},{"line_number":191,"context_line":"        self.active_connections \u003d active_connections"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_167eb66a","line":188,"updated":"2020-07-27 21:16:20.000000000","message":"Need to also include loadbalancer_id and project_id since this is useful information to be passed to other backends.","commit_id":"5cbba60aa1880c3d8172627a56b9be028357584e"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3824dd12f3d0e7fa73d025d93ff9e9bc85c01c11","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            self.bytes_out +\u003d other.bytes_out"},{"line_number":209,"context_line":"            self.request_errors +\u003d other.request_errors"},{"line_number":210,"context_line":"            self.total_connections +\u003d other.total_connections"},{"line_number":211,"context_line":"            # TODO(rm_work): Would it be confusing to do this?"},{"line_number":212,"context_line":"            # self.active_connections \u003d other.active_connections"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            raise TypeError(  # noqa: O342"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_d211bdae","line":211,"updated":"2020-07-29 23:31:30.000000000","message":"Is this needed?\nIf so, yeah, it would be confusing for sure. If it makes sense to do all of these in one method on the object, we should just create an \"update_stats\" or something similar method on the object. Because, replacing on an \u0027+\u0027 action would be.... non-intuitive.\nIf this isn\u0027t needed, let\u0027s remove the comments.","commit_id":"42ca88b7306c1aa19f0e5bec4de4e98655dcca2a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2b1c9c50e33970aa9d599e9352f5f0ce770a524a","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            self.bytes_out +\u003d other.bytes_out"},{"line_number":209,"context_line":"            self.request_errors +\u003d other.request_errors"},{"line_number":210,"context_line":"            self.total_connections +\u003d other.total_connections"},{"line_number":211,"context_line":"            # TODO(rm_work): Would it be confusing to do this?"},{"line_number":212,"context_line":"            # self.active_connections \u003d other.active_connections"},{"line_number":213,"context_line":"        else:"},{"line_number":214,"context_line":"            raise TypeError(  # noqa: O342"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_60bbb671","line":211,"in_reply_to":"9f560f44_d211bdae","updated":"2020-07-30 19:12:38.000000000","message":"Basically, updating non-deltas... But yes, maybe the time for cleverly abusing +\u003d on this object is over, as that operation is a bit too simplistic now for what needs to happen. I think replacing this with a real method is probably better.","commit_id":"42ca88b7306c1aa19f0e5bec4de4e98655dcca2a"}],"octavia/common/stats.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"842cb30bc6e6ae355967fb56c273bce8e12e2dc6","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            statistics +\u003d db_l"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"            amp \u003d self.repo_amphora.get(session, id\u003ddb_l.amphora_id)"},{"line_number":46,"context_line":"            if (amp and amp.status \u003d\u003d constants.AMPHORA_ALLOCATED) or ("},{"line_number":47,"context_line":"                    db_l.amphora_id \u003d\u003d db_l.listener_id):"},{"line_number":48,"context_line":"                statistics.active_connections +\u003d db_l.active_connections"},{"line_number":49,"context_line":"        return statistics"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f560f44_a88d757d","line":46,"updated":"2020-09-07 21:33:39.000000000","message":"nit: It would be nice to have a comment here of why the amp ID and the listener ID may be the same.","commit_id":"0e6a6532c3ecaf1b490227add41b8f552b5467ea"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6d98a48d079b436ef0bd021a92d203771753121b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            statistics +\u003d db_l"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"            amp \u003d self.repo_amphora.get(session, id\u003ddb_l.amphora_id)"},{"line_number":46,"context_line":"            if (amp and amp.status \u003d\u003d constants.AMPHORA_ALLOCATED) or ("},{"line_number":47,"context_line":"                    db_l.amphora_id \u003d\u003d db_l.listener_id):"},{"line_number":48,"context_line":"                statistics.active_connections +\u003d db_l.active_connections"},{"line_number":49,"context_line":"        return statistics"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f560f44_ef1c80c3","line":46,"in_reply_to":"9f560f44_a88d757d","updated":"2020-09-08 21:39:53.000000000","message":"Hmm yes, I feel like even I would lose context on this shortly. Will add something.","commit_id":"0e6a6532c3ecaf1b490227add41b8f552b5467ea"}],"octavia/controller/healthmanager/health_drivers/update_db.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"9e3f8937900ae44c0bfb868739763adb62f3bdf8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bf51134e_24a16247","updated":"2020-06-24 22:06:46.000000000","message":"Does it make sense to still have thise under health drivers?","commit_id":"55769481cec9345b0cbdd148e861dd8764f75352"},{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"cf6b9364b9c27e757696cfd74e097c9293d20759","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bf51134e_45a45008","in_reply_to":"bf51134e_24a16247","updated":"2020-06-25 01:25:52.000000000","message":"Nope!\nFixed this!","commit_id":"55769481cec9345b0cbdd148e861dd8764f75352"}],"octavia/controller/healthmanager/stats_drivers/stats_base.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3824dd12f3d0e7fa73d025d93ff9e9bc85c01c11","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    handlers.map_method(\u0027update_stats\u0027, listener_stats, deltas\u003ddeltas)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class StatsDriverMixin(object, metaclass\u003dabc.ABCMeta):"},{"line_number":52,"context_line":"    @abc.abstractmethod"},{"line_number":53,"context_line":"    def update_stats(self, listener_stats, deltas\u003dFalse):"},{"line_number":54,"context_line":"        \"\"\"Return a stats object formatted for a generic backend"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_b2f08969","line":51,"updated":"2020-07-29 23:31:30.000000000","message":"This should probably be in octavia-lib instead of here.\nWe do not want people importing octavia directly if they are creating a out-of-tree driver.\nThis could be handled in a followup patch.","commit_id":"42ca88b7306c1aa19f0e5bec4de4e98655dcca2a"}],"octavia/controller/healthmanager/stats_drivers/update_db.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"1c534857f097468309f47631753205c685ffdf28","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bf51134e_4d3984a1","updated":"2020-07-06 23:30:03.000000000","message":"Ah, so nice and clean now!","commit_id":"f8bf58edbeb662f7d911d5eb67b2c872d1a44c5a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3824dd12f3d0e7fa73d025d93ff9e9bc85c01c11","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class StatsUpdateDb(stats_base.StatsDriverMixin):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self):"},{"line_number":29,"context_line":"        super(StatsUpdateDb, self).__init__()"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_ed57c401","line":26,"updated":"2020-07-29 23:31:30.000000000","message":"This whole class appears to be missing test coverage.","commit_id":"42ca88b7306c1aa19f0e5bec4de4e98655dcca2a"}],"octavia/controller/healthmanager/stats_drivers/update_logging.py":[{"author":{"_account_id":32084,"name":"Anushka Singh","email":"anushka.singh.2511@gmail.com","username":"aannuusshhkkaa"},"change_message_id":"e863dd186a3bbd99dc2963153ff2c882d2466a8a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class StatsUpdateLogger(stats_base.StatsDriverMixin):"},{"line_number":23,"context_line":"    def update_stats(self, listener_stats, deltas\u003dFalse):"},{"line_number":24,"context_line":"        for stats_object in listener_stats:"},{"line_number":25,"context_line":"            LOG.info(\"Updating listener stats%s in db for listener `%s` / \""},{"line_number":26,"context_line":"                     \"amphora `%s`: %s\","},{"line_number":27,"context_line":"                     \u0027 deltas\u0027 if deltas else \u0027\u0027,"},{"line_number":28,"context_line":"                     stats_object.listener_id, stats_object.amphora_id,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f560f44_d708bd29","line":25,"range":{"start_line":25,"start_character":51,"end_line":25,"end_character":53},"updated":"2020-07-27 19:52:01.000000000","message":"This is not doing anything in the database.","commit_id":"5cbba60aa1880c3d8172627a56b9be028357584e"}],"octavia/db/repositories.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3824dd12f3d0e7fa73d025d93ff9e9bc85c01c11","unresolved":false,"context_lines":[{"line_number":1215,"context_line":"        \"\"\""},{"line_number":1216,"context_line":"        if not stats_obj.amphora_id:"},{"line_number":1217,"context_line":"            # amphora_id can\u0027t be null, so clone the listener_id"},{"line_number":1218,"context_line":"            stats_obj.amphora_id \u003d stats_obj.listener_id"},{"line_number":1219,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":1220,"context_line":"            count \u003d session.query(self.model_class).filter_by("},{"line_number":1221,"context_line":"                listener_id\u003dstats_obj.listener_id,"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_2d41bc3a","line":1218,"updated":"2020-07-29 23:31:30.000000000","message":"Missing test coverage","commit_id":"42ca88b7306c1aa19f0e5bec4de4e98655dcca2a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3824dd12f3d0e7fa73d025d93ff9e9bc85c01c11","unresolved":false,"context_lines":[{"line_number":1240,"context_line":"        \"\"\""},{"line_number":1241,"context_line":"        if not delta_stats.amphora_id:"},{"line_number":1242,"context_line":"            # amphora_id can\u0027t be null, so clone the listener_id"},{"line_number":1243,"context_line":"            delta_stats.amphora_id \u003d delta_stats.listener_id"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":1246,"context_line":"            count \u003d session.query(self.model_class).filter_by("}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_0d3cb8bd","line":1243,"updated":"2020-07-29 23:31:30.000000000","message":"Missing test coverage","commit_id":"42ca88b7306c1aa19f0e5bec4de4e98655dcca2a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"3824dd12f3d0e7fa73d025d93ff9e9bc85c01c11","unresolved":false,"context_lines":[{"line_number":1242,"context_line":"            # amphora_id can\u0027t be null, so clone the listener_id"},{"line_number":1243,"context_line":"            delta_stats.amphora_id \u003d delta_stats.listener_id"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":1246,"context_line":"            count \u003d session.query(self.model_class).filter_by("},{"line_number":1247,"context_line":"                listener_id\u003ddelta_stats.listener_id,"},{"line_number":1248,"context_line":"                amphora_id\u003ddelta_stats.amphora_id).count()"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_ed09842c","line":1245,"updated":"2020-07-29 23:31:30.000000000","message":"This can be simplified and optimized using an \"upsert\" or in sqlalchemy terms \"ON DUPLICATE KEY UPDATE\", we can also push the math down to the DB to improve the performance.\nBoth mysql and sqlite support this, but I\u0027m not 100% sure if sqlalchemy does for sqlite.\nMaybe we should add a comment here and address that in a future patch.","commit_id":"42ca88b7306c1aa19f0e5bec4de4e98655dcca2a"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"2b1c9c50e33970aa9d599e9352f5f0ce770a524a","unresolved":false,"context_lines":[{"line_number":1242,"context_line":"            # amphora_id can\u0027t be null, so clone the listener_id"},{"line_number":1243,"context_line":"            delta_stats.amphora_id \u003d delta_stats.listener_id"},{"line_number":1244,"context_line":""},{"line_number":1245,"context_line":"        with session.begin(subtransactions\u003dTrue):"},{"line_number":1246,"context_line":"            count \u003d session.query(self.model_class).filter_by("},{"line_number":1247,"context_line":"                listener_id\u003ddelta_stats.listener_id,"},{"line_number":1248,"context_line":"                amphora_id\u003ddelta_stats.amphora_id).count()"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_4063121b","line":1245,"in_reply_to":"9f560f44_ed09842c","updated":"2020-07-30 19:12:38.000000000","message":"Great! This was done previously by someone who knows more about how this works in SQLAlchemy than I do, and it has been functioning correctly, but if we can improve it I\u0027m all for that.","commit_id":"42ca88b7306c1aa19f0e5bec4de4e98655dcca2a"}],"octavia/statistics/stats_base.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"842cb30bc6e6ae355967fb56c273bce8e12e2dc6","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    handlers.map_method(\u0027update_stats\u0027, listener_stats, deltas\u003ddeltas)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class StatsDriverMixin(object, metaclass\u003dabc.ABCMeta):"},{"line_number":52,"context_line":"    @abc.abstractmethod"},{"line_number":53,"context_line":"    def update_stats(self, listener_stats, deltas\u003dFalse):"},{"line_number":54,"context_line":"        \"\"\"Return a stats object formatted for a generic backend"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f560f44_08f461f0","line":51,"updated":"2020-09-07 21:33:39.000000000","message":"nit: This should probably move to octavia-lib along with the listener_stats data model if we ex","commit_id":"0e6a6532c3ecaf1b490227add41b8f552b5467ea"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6d98a48d079b436ef0bd021a92d203771753121b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    handlers.map_method(\u0027update_stats\u0027, listener_stats, deltas\u003ddeltas)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class StatsDriverMixin(object, metaclass\u003dabc.ABCMeta):"},{"line_number":52,"context_line":"    @abc.abstractmethod"},{"line_number":53,"context_line":"    def update_stats(self, listener_stats, deltas\u003dFalse):"},{"line_number":54,"context_line":"        \"\"\"Return a stats object formatted for a generic backend"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f560f44_4f83eccb","line":51,"in_reply_to":"9f560f44_08f461f0","updated":"2020-09-08 21:39:53.000000000","message":"Possibly... I could look at doing this, but I think it\u0027s too late to make lib changes now? So maybe we live with this and either fix it later or forget about it? :P","commit_id":"0e6a6532c3ecaf1b490227add41b8f552b5467ea"}],"octavia/tests/unit/controller/healthmanager/stats_drivers/test_update_db.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"bce3a5ec87695614421967baea15ad3d96143857","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            bytes_out\u003dself.listener_stats.bytes_out,"},{"line_number":81,"context_line":"            active_connections\u003dself.listener_stats.active_connections,"},{"line_number":82,"context_line":"            total_connections\u003dself.listener_stats.total_connections,"},{"line_number":83,"context_line":"            request_errors\u003dself.listener_stats.request_errors)"}],"source_content_type":"text/x-python","patch_set":11,"id":"bf51134e_ed26ffca","line":83,"updated":"2020-07-16 12:08:40.000000000","message":"pep8: W292 no newline at end of file","commit_id":"eed60a2eb42b3ddea4f583c158d5bcde9c7ed5d0"}],"releasenotes/notes/stats-update-drivers-interface-changes-c8f2bf3b02eec767.yaml":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"842cb30bc6e6ae355967fb56c273bce8e12e2dc6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    The internal interface for loadbalancer statistics collection has moved."},{"line_number":9,"context_line":"    When upgrading, see deprecation notes for the ``stats_update_driver``"},{"line_number":10,"context_line":"    config option, as it will need to be moved and renamed."},{"line_number":11,"context_line":"deprecations:"},{"line_number":12,"context_line":"  - |"},{"line_number":13,"context_line":"    The option ``health_manager.health_update_driver`` has been deprecated as"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"9f560f44_6897dd91","line":10,"updated":"2020-09-07 21:33:39.000000000","message":"nit: we probably should add an upgrade checker message for this.","commit_id":"0e6a6532c3ecaf1b490227add41b8f552b5467ea"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6d98a48d079b436ef0bd021a92d203771753121b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  - |"},{"line_number":8,"context_line":"    The internal interface for loadbalancer statistics collection has moved."},{"line_number":9,"context_line":"    When upgrading, see deprecation notes for the ``stats_update_driver``"},{"line_number":10,"context_line":"    config option, as it will need to be moved and renamed."},{"line_number":11,"context_line":"deprecations:"},{"line_number":12,"context_line":"  - |"},{"line_number":13,"context_line":"    The option ``health_manager.health_update_driver`` has been deprecated as"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"9f560f44_af260815","line":10,"in_reply_to":"9f560f44_6897dd91","updated":"2020-09-08 21:39:53.000000000","message":"I am unfamiliar, will need to look into this.","commit_id":"0e6a6532c3ecaf1b490227add41b8f552b5467ea"}],"setup.cfg":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"6934969319844e90c5b3f41aee6c4959ce57a52f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"octavia.amphora.drivers \u003d"},{"line_number":63,"context_line":"    amphora_noop_driver \u003d octavia.amphorae.drivers.noop_driver.driver:NoopAmphoraLoadBalancerDriver"},{"line_number":64,"context_line":"    amphora_haproxy_rest_driver \u003d octavia.amphorae.drivers.haproxy.rest_api_driver:HaproxyAmphoraLoadBalancerDriver"},{"line_number":65,"context_line":"octavia.statistics.drivers \u003d"},{"line_number":66,"context_line":"    stats_logger \u003d octavia.controller.healthmanager.stats_drivers.update_logging:StatsUpdateLogger"},{"line_number":67,"context_line":"    stats_db \u003d octavia.controller.healthmanager.stats_drivers.update_db:UpdateStatsDb"},{"line_number":68,"context_line":"octavia.amphora.udp_api_server \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"bf51134e_526186a8","line":65,"updated":"2020-07-16 10:19:52.000000000","message":"I couldn\u0027t figure out a good existing place to put this so I made a new sort of namespace... Thoughts?","commit_id":"6800c91c5e16679f57f8557a543c715776f9682c"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"876b75d723f4b79d5e3f909358a6f0d7a38724b4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"octavia.amphora.drivers \u003d"},{"line_number":63,"context_line":"    amphora_noop_driver \u003d octavia.amphorae.drivers.noop_driver.driver:NoopAmphoraLoadBalancerDriver"},{"line_number":64,"context_line":"    amphora_haproxy_rest_driver \u003d octavia.amphorae.drivers.haproxy.rest_api_driver:HaproxyAmphoraLoadBalancerDriver"},{"line_number":65,"context_line":"octavia.statistics.drivers \u003d"},{"line_number":66,"context_line":"    stats_logger \u003d octavia.controller.healthmanager.stats_drivers.update_logging:StatsUpdateLogger"},{"line_number":67,"context_line":"    stats_db \u003d octavia.controller.healthmanager.stats_drivers.update_db:UpdateStatsDb"},{"line_number":68,"context_line":"octavia.amphora.udp_api_server \u003d"}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"bf51134e_debd9cb1","line":65,"in_reply_to":"bf51134e_526186a8","updated":"2020-07-16 17:00:44.000000000","message":"Makes sense to me.","commit_id":"6800c91c5e16679f57f8557a543c715776f9682c"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"42e8df4b0616c2624c5b84d516cfbacfb041964d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    amphora_noop_driver \u003d octavia.amphorae.drivers.noop_driver.driver:NoopAmphoraLoadBalancerDriver"},{"line_number":64,"context_line":"    amphora_haproxy_rest_driver \u003d octavia.amphorae.drivers.haproxy.rest_api_driver:HaproxyAmphoraLoadBalancerDriver"},{"line_number":65,"context_line":"octavia.statistics.drivers \u003d"},{"line_number":66,"context_line":"    stats_logger \u003d octavia.controller.healthmanager.stats_drivers.logger:StatsLogger"},{"line_number":67,"context_line":"    stats_db \u003d octavia.controller.healthmanager.stats_drivers.update_db:StatsUpdateDb"},{"line_number":68,"context_line":"octavia.amphora.udp_api_server \u003d"},{"line_number":69,"context_line":"    keepalived_lvs \u003d octavia.amphorae.backends.agent.api_server.keepalivedlvs:KeepalivedLvs"}],"source_content_type":"text/x-ttcn-cfg","patch_set":25,"id":"9f560f44_d1c3c489","line":66,"updated":"2020-08-11 16:48:34.000000000","message":"Before this change, these drivers were clearly marked (octavia.amphora.XXXX) to be part of the amphora driver . With this change, they still are amphora-only but their names are not as the entrypoint name changed to \"octavia.statistics.drivers\".\n\nRename them by prefixing with \"amphora_\"?","commit_id":"4f6234229aae6a56062c2afa4e9213e9a5ba53fa"},{"author":{"_account_id":6469,"name":"Carlos Gonçalves","display_name":"Carlos Goncalves","email":"cgoncalves@redhat.com","username":"cgoncalves"},"change_message_id":"a1a95eeb66eae4141aed30fd7392ff47eb8ba2c2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    amphora_noop_driver \u003d octavia.amphorae.drivers.noop_driver.driver:NoopAmphoraLoadBalancerDriver"},{"line_number":64,"context_line":"    amphora_haproxy_rest_driver \u003d octavia.amphorae.drivers.haproxy.rest_api_driver:HaproxyAmphoraLoadBalancerDriver"},{"line_number":65,"context_line":"octavia.statistics.drivers \u003d"},{"line_number":66,"context_line":"    stats_logger \u003d octavia.controller.healthmanager.stats_drivers.logger:StatsLogger"},{"line_number":67,"context_line":"    stats_db \u003d octavia.controller.healthmanager.stats_drivers.update_db:StatsUpdateDb"},{"line_number":68,"context_line":"octavia.amphora.udp_api_server \u003d"},{"line_number":69,"context_line":"    keepalived_lvs \u003d octavia.amphorae.backends.agent.api_server.keepalivedlvs:KeepalivedLvs"}],"source_content_type":"text/x-ttcn-cfg","patch_set":25,"id":"9f560f44_943e55d8","line":66,"in_reply_to":"9f560f44_c383f9a8","updated":"2020-08-12 06:44:31.000000000","message":"Same comment here: the controller code in octavia.controller is specific to the amphora provider.","commit_id":"4f6234229aae6a56062c2afa4e9213e9a5ba53fa"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"c8d327da378fc668959ff8f839d283d4b5b17ec0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    amphora_noop_driver \u003d octavia.amphorae.drivers.noop_driver.driver:NoopAmphoraLoadBalancerDriver"},{"line_number":64,"context_line":"    amphora_haproxy_rest_driver \u003d octavia.amphorae.drivers.haproxy.rest_api_driver:HaproxyAmphoraLoadBalancerDriver"},{"line_number":65,"context_line":"octavia.statistics.drivers \u003d"},{"line_number":66,"context_line":"    stats_logger \u003d octavia.controller.healthmanager.stats_drivers.logger:StatsLogger"},{"line_number":67,"context_line":"    stats_db \u003d octavia.controller.healthmanager.stats_drivers.update_db:StatsUpdateDb"},{"line_number":68,"context_line":"octavia.amphora.udp_api_server \u003d"},{"line_number":69,"context_line":"    keepalived_lvs \u003d octavia.amphorae.backends.agent.api_server.keepalivedlvs:KeepalivedLvs"}],"source_content_type":"text/x-ttcn-cfg","patch_set":25,"id":"9f560f44_c383f9a8","line":66,"in_reply_to":"9f560f44_d1c3c489","updated":"2020-08-11 21:51:43.000000000","message":"They were renamed away from being related to amphora, because they are for generic use by any provider. That\u0027s part of the point. :)","commit_id":"4f6234229aae6a56062c2afa4e9213e9a5ba53fa"}]}
