)]}'
{"octavia/amphorae/driver_exceptions/exceptions.py":[{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"90af6760b0112e22197e2fbdcf4910d8bab3602c","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"class AmpConnectionRetry(AmphoraDriverError):"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    message \u003d _(\u0027Could not connect to amphora, retry exception\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_1c700adc","line":128,"range":{"start_line":128,"start_character":47,"end_line":128,"end_character":61},"updated":"2019-06-11 05:12:47.000000000","message":"nit: we can add retry counts/timeout in this message","commit_id":"12b1e89aab37a789bcc683e0af1d5d756ccb4892"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"650455f6bfd7c6bf24d85763464c344d8d7124e7","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"class AmpConnectionRetry(AmphoraDriverError):"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    message \u003d _(\u0027Could not connect to amphora, retry exception\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_53867015","line":128,"range":{"start_line":128,"start_character":47,"end_line":128,"end_character":61},"in_reply_to":"9fb8cfa7_1c700adc","updated":"2019-06-11 07:16:47.000000000","message":"OK","commit_id":"12b1e89aab37a789bcc683e0af1d5d756ccb4892"}],"octavia/amphorae/drivers/driver_base.py":[{"author":{"_account_id":30619,"name":"Ajay Kumar","email":"mahajanajay33@gmail.com","username":"ajaykumar33"},"change_message_id":"62a159a4df6404e0b28ef60d9793b52377f3e0ed","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \"\"\"Returns information about the amphora."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        :param amphora: amphora object, need to use its id property"},{"line_number":89,"context_line":"        :param raise_retry_exception: Boolean value if task should be retried"},{"line_number":90,"context_line":"        :type amphora: octavia.db.models.Amphora"},{"line_number":91,"context_line":"        :returns: return a value list (amphora.id, status flag--\u0027info\u0027)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_87cf1d28","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":77},"updated":"2019-10-23 05:09:31.000000000","message":"As docstring is for end user, I think we should also mention the default value for \"raise_retry_exception\" in the docstring message so that end user can know the default value for this parameter.","commit_id":"e64bb14f2e036ca44ca54b82cbaf89525627e8ef"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"6595860a6a40cf52099933c3820080503c7c7a89","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \"\"\"Returns information about the amphora."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        :param amphora: amphora object, need to use its id property"},{"line_number":89,"context_line":"        :param raise_retry_exception: Boolean value if task should be retried"},{"line_number":90,"context_line":"        :type amphora: octavia.db.models.Amphora"},{"line_number":91,"context_line":"        :returns: return a value list (amphora.id, status flag--\u0027info\u0027)"},{"line_number":92,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa7e38b_c470ac43","line":89,"range":{"start_line":89,"start_character":8,"end_line":89,"end_character":77},"in_reply_to":"3fa7e38b_87cf1d28","updated":"2019-10-23 12:41:59.000000000","message":"Done","commit_id":"e64bb14f2e036ca44ca54b82cbaf89525627e8ef"}],"octavia/amphorae/drivers/haproxy/rest_api_driver.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7bd0467782d50401624bed8f571470b93fb914c1","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                exception \u003d e"},{"line_number":517,"context_line":"                LOG.warning(\"Could not connect to instance. Retrying.\")"},{"line_number":518,"context_line":"                time.sleep(conn_retry_interval)"},{"line_number":519,"context_line":"                if CONF.api_settings.default_provider_driver \u003d\u003d \u0027amphorav2\u0027:"},{"line_number":520,"context_line":"                    raise driver_except.AmpConnectionRetry()"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        LOG.error(\"Connection retries (currently set to %(max_retries)s) \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_950f11e0","line":519,"updated":"2019-06-07 20:45:52.000000000","message":"I think it would be safer to pass down something in kwargs that changes the exception behavior. The driver may be in use even when it\u0027s not the default. That is what I had to do for the timeout_dict","commit_id":"a3d172f075dd2cc62634db8e268f3f2eb9474f2e"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"650455f6bfd7c6bf24d85763464c344d8d7124e7","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                exception \u003d e"},{"line_number":517,"context_line":"                LOG.warning(\"Could not connect to instance. Retrying.\")"},{"line_number":518,"context_line":"                time.sleep(conn_retry_interval)"},{"line_number":519,"context_line":"                if CONF.api_settings.default_provider_driver \u003d\u003d \u0027amphorav2\u0027:"},{"line_number":520,"context_line":"                    raise driver_except.AmpConnectionRetry()"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        LOG.error(\"Connection retries (currently set to %(max_retries)s) \""}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_d6b4a5d3","line":519,"in_reply_to":"9fb8cfa7_950f11e0","updated":"2019-06-11 07:16:47.000000000","message":"OK, got it, will rework this part.","commit_id":"a3d172f075dd2cc62634db8e268f3f2eb9474f2e"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"90af6760b0112e22197e2fbdcf4910d8bab3602c","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                exception \u003d e"},{"line_number":518,"context_line":"                LOG.warning(\"Could not connect to instance. Retrying.\")"},{"line_number":519,"context_line":"                time.sleep(conn_retry_interval)"},{"line_number":520,"context_line":"                if flow_retry:"},{"line_number":521,"context_line":"                    raise driver_except.AmpConnectionRetry()"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        LOG.error(\"Connection retries (currently set to %(max_retries)s) \""},{"line_number":524,"context_line":"                  \"exhausted.  The amphora is unavailable. Reason: \""}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_9cf87a49","line":521,"range":{"start_line":520,"start_character":16,"end_line":521,"end_character":60},"updated":"2019-06-11 05:12:47.000000000","message":"It seems meaningless to sleep before raising exception. So this can be moved before line#519 (i.e.  time.sleep(conn_retry_interval).)","commit_id":"12b1e89aab37a789bcc683e0af1d5d756ccb4892"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"650455f6bfd7c6bf24d85763464c344d8d7124e7","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                exception \u003d e"},{"line_number":518,"context_line":"                LOG.warning(\"Could not connect to instance. Retrying.\")"},{"line_number":519,"context_line":"                time.sleep(conn_retry_interval)"},{"line_number":520,"context_line":"                if flow_retry:"},{"line_number":521,"context_line":"                    raise driver_except.AmpConnectionRetry()"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        LOG.error(\"Connection retries (currently set to %(max_retries)s) \""},{"line_number":524,"context_line":"                  \"exhausted.  The amphora is unavailable. Reason: \""}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_d3982076","line":521,"range":{"start_line":520,"start_character":16,"end_line":521,"end_character":60},"in_reply_to":"9fb8cfa7_9cf87a49","updated":"2019-06-11 07:16:47.000000000","message":"The logic here is to sleep before trying again and AmpConnectionRetry exception will trigger task retry, so I think it is not meaningless.","commit_id":"12b1e89aab37a789bcc683e0af1d5d756ccb4892"},{"author":{"_account_id":18955,"name":"dharmendra","email":"dharmendra.kushwaha@gmail.com","username":"dharmendra"},"change_message_id":"9d63644c8788272a7cac6666ae90dfccdf6ab4c0","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                exception \u003d e"},{"line_number":518,"context_line":"                LOG.warning(\"Could not connect to instance. Retrying.\")"},{"line_number":519,"context_line":"                time.sleep(conn_retry_interval)"},{"line_number":520,"context_line":"                if flow_retry:"},{"line_number":521,"context_line":"                    raise driver_except.AmpConnectionRetry()"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"        LOG.error(\"Connection retries (currently set to %(max_retries)s) \""},{"line_number":524,"context_line":"                  \"exhausted.  The amphora is unavailable. Reason: \""}],"source_content_type":"text/x-python","patch_set":9,"id":"9fb8cfa7_d2430d41","line":521,"range":{"start_line":520,"start_character":16,"end_line":521,"end_character":60},"in_reply_to":"9fb8cfa7_d3982076","updated":"2019-06-13 04:58:57.000000000","message":"ok, then look fine to me.","commit_id":"12b1e89aab37a789bcc683e0af1d5d756ccb4892"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"97b5ceb4e0aa7d1d255f90afe66111648e6e41e1","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def delete(self, listener, vip):"},{"line_number":208,"context_line":"        self._apply(self.client.delete_listener, listener)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def get_info(self, amphora, flow_retry\u003dFalse):"},{"line_number":211,"context_line":"        return self.client.get_info(amphora, flow_retry\u003dflow_retry)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def get_diagnostics(self, amphora):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_2c2a9a8f","line":210,"updated":"2019-07-11 20:51:58.000000000","message":"Please update the driver_base and the no-op driver for this new parameter:\nhttps://opendev.org/openstack/octavia/src/branch/master/octavia/amphorae/drivers/driver_base.py#L105\nhttps://opendev.org/openstack/octavia/src/branch/master/octavia/amphorae/drivers/noop_driver/driver.py#L79\nhttps://opendev.org/openstack/octavia/src/branch/master/octavia/amphorae/drivers/noop_driver/driver.py#L149","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a181b3ac57dccc1a67f86ff8ce836dcdc082677c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    def delete(self, listener, vip):"},{"line_number":208,"context_line":"        self._apply(self.client.delete_listener, listener)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def get_info(self, amphora, flow_retry\u003dFalse):"},{"line_number":211,"context_line":"        return self.client.get_info(amphora, flow_retry\u003dflow_retry)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def get_diagnostics(self, amphora):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_33ee6fed","line":210,"in_reply_to":"7faddb67_2c2a9a8f","updated":"2019-07-12 13:01:44.000000000","message":"Done","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"}],"octavia/controller/queue/v2/endpoints.py":[{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"04c930587522ee3648db94926b4c7203b58783c6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import oslo_messaging as messaging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from octavia.common import constants"},{"line_number":20,"context_line":"from octavia.controller.worker.v2 import controller_worker"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d cfg.CONF"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_16170bf0","line":20,"updated":"2019-06-18 09:14:37.000000000","message":"I guess this directly follows? If we\u0027re on queue.v2 then we need controller.worker.v2 as well ... so we could do this same change on the v1 side and not need stevedore here?","commit_id":"ce81ba1c725b98981f1eaaf7c365821c77a31d47"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"936e207d9421dd03cc09efa17117df7626c8f45b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import oslo_messaging as messaging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from octavia.common import constants"},{"line_number":20,"context_line":"from octavia.controller.worker.v2 import controller_worker"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d cfg.CONF"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_473cefbe","line":20,"in_reply_to":"9fb8cfa7_16170bf0","updated":"2019-06-18 11:33:52.000000000","message":"I guess yes, but we try to minimize change for v1, maybe we can live this as it is.","commit_id":"ce81ba1c725b98981f1eaaf7c365821c77a31d47"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"84238fc2370fc878ac681fc13f8f5b8b82ec7b34","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        version\u003d\u00272.0\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        self.worker \u003d controller_worker.ControllerWorker()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def create_load_balancer(self, context, load_balancer_id,"},{"line_number":40,"context_line":"                             flavor\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa7e38b_89ff3665","line":37,"updated":"2019-12-02 16:02:37.000000000","message":"Ah, so I guess we basically gave up considering that drivers exist at this level, and are just importing directly? Which I think is probably true... Just making sure to call that out and confirm.","commit_id":"314b43af9a57a698a66d46c11892380bff315166"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8b4ed68f619be95ded616eac8f5ddba76a9cd034","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        version\u003d\u00272.0\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        self.worker \u003d controller_worker.ControllerWorker()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def create_load_balancer(self, context, load_balancer_id,"},{"line_number":40,"context_line":"                             flavor\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa7e38b_7e8e2727","line":37,"in_reply_to":"3fa7e38b_624d2fc4","updated":"2019-12-02 20:59:55.000000000","message":"This was dumb as if we want an alternate controller worker, we just implement it as a new endpoint. So I removed the stevedore here.\nCould be added back if it makes sense in the future.","commit_id":"314b43af9a57a698a66d46c11892380bff315166"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"99c34cd5350bc7f7fce9d077e0ed91c41b8279c3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        version\u003d\u00272.0\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        self.worker \u003d controller_worker.ControllerWorker()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def create_load_balancer(self, context, load_balancer_id,"},{"line_number":40,"context_line":"                             flavor\u003dNone):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3fa7e38b_624d2fc4","line":37,"in_reply_to":"3fa7e38b_89ff3665","updated":"2019-12-02 18:25:05.000000000","message":"Actually this approach was introduced in johnsom\u0027s change https://review.opendev.org/#/c/660236/6/octavia/controller/queue/v2/endpoints.py I just reused it here as this required to have things worked.\nRefactor change which adds new v2 controller do not add it as octavia.plugin, so I assumed it is not required. I can introduce it here.","commit_id":"314b43af9a57a698a66d46c11892380bff315166"}],"octavia/controller/worker/v2/flows/amphora_flows.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7bd0467782d50401624bed8f571470b93fb914c1","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        create_amphora_flow.add(database_tasks.UpdateAmphoraInfo("},{"line_number":71,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.COMPUTE_OBJ),"},{"line_number":72,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":73,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":74,"context_line":"                                      retry\u003d(amphora_driver_tasks.AmpRetry()))"},{"line_number":75,"context_line":"        create_amphora_flow.add(retry_flow).add("},{"line_number":76,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_55f999c5","line":73,"updated":"2019-06-07 20:45:52.000000000","message":"Yes, this is what we discussed for the retries.","commit_id":"a3d172f075dd2cc62634db8e268f3f2eb9474f2e"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"04c930587522ee3648db94926b4c7203b58783c6","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":73,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":74,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":75,"context_line":"        create_amphora_flow.add(retry_flow.add("},{"line_number":76,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("},{"line_number":77,"context_line":"                requires\u003dconstants.AMPHORA, inject\u003d{\u0027flow_retry\u0027: True})))"},{"line_number":78,"context_line":"        create_amphora_flow.add(database_tasks.ReloadAmphora("}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_d6d65328","line":75,"updated":"2019-06-18 09:14:37.000000000","message":"Just a nitpick, could we not do an add inside of an add? Just do the retry_flow.add() and then create_amphora_flow.add(retry_flow) after. This is hard to see when scanning quickly through.","commit_id":"ce81ba1c725b98981f1eaaf7c365821c77a31d47"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"936e207d9421dd03cc09efa17117df7626c8f45b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":73,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":74,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":75,"context_line":"        create_amphora_flow.add(retry_flow.add("},{"line_number":76,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("},{"line_number":77,"context_line":"                requires\u003dconstants.AMPHORA, inject\u003d{\u0027flow_retry\u0027: True})))"},{"line_number":78,"context_line":"        create_amphora_flow.add(database_tasks.ReloadAmphora("}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_a774cb9d","line":75,"in_reply_to":"9fb8cfa7_d6d65328","updated":"2019-06-18 11:33:52.000000000","message":"Done","commit_id":"ce81ba1c725b98981f1eaaf7c365821c77a31d47"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"04c930587522ee3648db94926b4c7203b58783c6","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        subflowname \u003d sf_name + \u0027-\u0027 + constants.AMP_COMPUTE_CONNECTIVITY_WAIT"},{"line_number":199,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":200,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":201,"context_line":"        create_amp_for_lb_subflow.add(retry_flow.add("},{"line_number":202,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("},{"line_number":203,"context_line":"                name\u003dsubflowname, requires\u003dconstants.AMPHORA,"},{"line_number":204,"context_line":"                inject\u003d{\u0027flow_retry\u0027: True})))"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_76dbe74e","line":201,"updated":"2019-06-18 09:14:37.000000000","message":"Same as above.","commit_id":"ce81ba1c725b98981f1eaaf7c365821c77a31d47"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"936e207d9421dd03cc09efa17117df7626c8f45b","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        subflowname \u003d sf_name + \u0027-\u0027 + constants.AMP_COMPUTE_CONNECTIVITY_WAIT"},{"line_number":199,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":200,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":201,"context_line":"        create_amp_for_lb_subflow.add(retry_flow.add("},{"line_number":202,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("},{"line_number":203,"context_line":"                name\u003dsubflowname, requires\u003dconstants.AMPHORA,"},{"line_number":204,"context_line":"                inject\u003d{\u0027flow_retry\u0027: True})))"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fb8cfa7_47938fa4","line":201,"in_reply_to":"9fb8cfa7_76dbe74e","updated":"2019-06-18 11:33:52.000000000","message":"Done","commit_id":"ce81ba1c725b98981f1eaaf7c365821c77a31d47"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3c557f80361cd4988883b5515b0790e2e19be37","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        create_amphora_flow.add(database_tasks.UpdateAmphoraInfo("},{"line_number":71,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.COMPUTE_OBJ),"},{"line_number":72,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":73,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":74,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":75,"context_line":"        retry_flow.add("},{"line_number":76,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_8cab8e87","line":73,"range":{"start_line":73,"start_character":48,"end_line":73,"end_character":67},"updated":"2019-07-11 20:13:27.000000000","message":"This will create a name conflict with the outer flow. We should uniquely name this subflow.\nThis flow is only used by the spares pool, which the tempest test patch hasn\u0027t merged yet.\nUsually the docs job for the flow diagrams flag this, but for some reason it only rendered the flow without the retry.","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a181b3ac57dccc1a67f86ff8ce836dcdc082677c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        create_amphora_flow.add(database_tasks.UpdateAmphoraInfo("},{"line_number":71,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.COMPUTE_OBJ),"},{"line_number":72,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":73,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":74,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":75,"context_line":"        retry_flow.add("},{"line_number":76,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_b3afbf7b","line":73,"range":{"start_line":73,"start_character":48,"end_line":73,"end_character":67},"in_reply_to":"7faddb67_8cab8e87","updated":"2019-07-12 13:01:44.000000000","message":"Done","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"97b5ceb4e0aa7d1d255f90afe66111648e6e41e1","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.UPDATE_AMPHORA_INFO,"},{"line_number":197,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.COMPUTE_OBJ),"},{"line_number":198,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":199,"context_line":"        subflowname \u003d sf_name + \u0027-\u0027 + constants.AMP_COMPUTE_CONNECTIVITY_WAIT"},{"line_number":200,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":201,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":202,"context_line":"        retry_flow.add("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_16000cab","line":199,"range":{"start_line":199,"start_character":8,"end_line":199,"end_character":29},"updated":"2019-07-11 20:51:58.000000000","message":"You are naming a task, not a subflow here.","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a181b3ac57dccc1a67f86ff8ce836dcdc082677c","unresolved":false,"context_lines":[{"line_number":196,"context_line":"            name\u003dsf_name + \u0027-\u0027 + constants.UPDATE_AMPHORA_INFO,"},{"line_number":197,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.COMPUTE_OBJ),"},{"line_number":198,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":199,"context_line":"        subflowname \u003d sf_name + \u0027-\u0027 + constants.AMP_COMPUTE_CONNECTIVITY_WAIT"},{"line_number":200,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":201,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":202,"context_line":"        retry_flow.add("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_13bfb3b0","line":199,"range":{"start_line":199,"start_character":8,"end_line":199,"end_character":29},"in_reply_to":"7faddb67_16000cab","updated":"2019-07-12 13:01:44.000000000","message":"Done","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3c557f80361cd4988883b5515b0790e2e19be37","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.COMPUTE_OBJ),"},{"line_number":198,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":199,"context_line":"        subflowname \u003d sf_name + \u0027-\u0027 + constants.AMP_COMPUTE_CONNECTIVITY_WAIT"},{"line_number":200,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":201,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":202,"context_line":"        retry_flow.add("},{"line_number":203,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_6c9e5255","line":200,"range":{"start_line":200,"start_character":48,"end_line":200,"end_character":67},"updated":"2019-07-11 20:13:27.000000000","message":"Again, this is ok in running, but really should have a unique name for this subflow to avoid conflicts.\nCREATE_AMPHORA_RETRY_SUBFLOW?","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a181b3ac57dccc1a67f86ff8ce836dcdc082677c","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            requires\u003d(constants.AMPHORA_ID, constants.COMPUTE_OBJ),"},{"line_number":198,"context_line":"            provides\u003dconstants.AMPHORA))"},{"line_number":199,"context_line":"        subflowname \u003d sf_name + \u0027-\u0027 + constants.AMP_COMPUTE_CONNECTIVITY_WAIT"},{"line_number":200,"context_line":"        retry_flow \u003d linear_flow.Flow(constants.CREATE_AMPHORA_FLOW,"},{"line_number":201,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":202,"context_line":"        retry_flow.add("},{"line_number":203,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_d3b4bbd3","line":200,"range":{"start_line":200,"start_character":48,"end_line":200,"end_character":67},"in_reply_to":"7faddb67_6c9e5255","updated":"2019-07-12 13:01:44.000000000","message":"Done","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"97b5ceb4e0aa7d1d255f90afe66111648e6e41e1","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":202,"context_line":"        retry_flow.add("},{"line_number":203,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("},{"line_number":204,"context_line":"                name\u003dsubflowname, requires\u003dconstants.AMPHORA,"},{"line_number":205,"context_line":"                inject\u003d{\u0027flow_retry\u0027: True}))"},{"line_number":206,"context_line":"        create_amp_for_lb_subflow.add(retry_flow)"},{"line_number":207,"context_line":"        create_amp_for_lb_subflow.add(amphora_driver_tasks.AmphoraFinalize("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_d62fd43c","line":204,"range":{"start_line":204,"start_character":21,"end_line":204,"end_character":32},"updated":"2019-07-11 20:51:58.000000000","message":"This is a task name.","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a181b3ac57dccc1a67f86ff8ce836dcdc082677c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"                                      retry\u003damphora_driver_tasks.AmpRetry())"},{"line_number":202,"context_line":"        retry_flow.add("},{"line_number":203,"context_line":"            amphora_driver_tasks.AmphoraComputeConnectivityWait("},{"line_number":204,"context_line":"                name\u003dsubflowname, requires\u003dconstants.AMPHORA,"},{"line_number":205,"context_line":"                inject\u003d{\u0027flow_retry\u0027: True}))"},{"line_number":206,"context_line":"        create_amp_for_lb_subflow.add(retry_flow)"},{"line_number":207,"context_line":"        create_amp_for_lb_subflow.add(amphora_driver_tasks.AmphoraFinalize("}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_93cac34b","line":204,"range":{"start_line":204,"start_character":21,"end_line":204,"end_character":32},"in_reply_to":"7faddb67_d62fd43c","updated":"2019-07-12 13:01:44.000000000","message":"Done","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"}],"octavia/controller/worker/v2/tasks/amphora_driver_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"7bd0467782d50401624bed8f571470b93fb914c1","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        max_retry_attempt \u003d CONF.haproxy_amphora.connection_max_retries"},{"line_number":58,"context_line":"        for task_name, ex_info in last_errors.items():"},{"line_number":59,"context_line":"            if len(history) \u003c\u003d max_retry_attempt:"},{"line_number":60,"context_line":"                # needed for restoring flows case"},{"line_number":61,"context_line":"                if ex_info is None:"},{"line_number":62,"context_line":"                    return retry.RETRY"},{"line_number":63,"context_line":"                excp \u003d ex_info._exc_info[1]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fb8cfa7_75f4ddcf","line":60,"updated":"2019-06-07 20:45:52.000000000","message":"Nice!","commit_id":"a3d172f075dd2cc62634db8e268f3f2eb9474f2e"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3c557f80361cd4988883b5515b0790e2e19be37","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        max_retry_attempt \u003d CONF.haproxy_amphora.connection_max_retries"},{"line_number":58,"context_line":"        for task_name, ex_info in last_errors.items():"},{"line_number":59,"context_line":"            if len(history) \u003c\u003d max_retry_attempt:"},{"line_number":60,"context_line":"                # needed for restoring flows case"},{"line_number":61,"context_line":"                if ex_info is None:"},{"line_number":62,"context_line":"                    return retry.RETRY"},{"line_number":63,"context_line":"                excp \u003d ex_info._exc_info[1]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_ac11aaae","line":60,"updated":"2019-07-11 20:13:27.000000000","message":"nit: I get the point here, that when jobboard restarts a flow we need this. However, this code is a bit \"TaskFlow obscure\".\nIt might be nice to expand this comment a bit for future generations.","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a181b3ac57dccc1a67f86ff8ce836dcdc082677c","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        max_retry_attempt \u003d CONF.haproxy_amphora.connection_max_retries"},{"line_number":58,"context_line":"        for task_name, ex_info in last_errors.items():"},{"line_number":59,"context_line":"            if len(history) \u003c\u003d max_retry_attempt:"},{"line_number":60,"context_line":"                # needed for restoring flows case"},{"line_number":61,"context_line":"                if ex_info is None:"},{"line_number":62,"context_line":"                    return retry.RETRY"},{"line_number":63,"context_line":"                excp \u003d ex_info._exc_info[1]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_d32a7b2a","line":60,"in_reply_to":"7faddb67_ac11aaae","updated":"2019-07-12 13:01:44.000000000","message":"Done","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"f3c557f80361cd4988883b5515b0790e2e19be37","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        \"\"\"Execute get_info routine for an amphora until it responds.\"\"\""},{"line_number":378,"context_line":"        try:"},{"line_number":379,"context_line":"            amp_info \u003d self.amphora_driver.get_info(amphora,"},{"line_number":380,"context_line":"                                                    flow_retry\u003dflow_retry)"},{"line_number":381,"context_line":"            LOG.debug(\u0027Successfuly connected to amphora %s: %s\u0027,"},{"line_number":382,"context_line":"                      amphora.id, amp_info)"},{"line_number":383,"context_line":"        except driver_except.TimeOutException:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_2cf93a4c","line":380,"updated":"2019-07-11 20:13:27.000000000","message":"nit: I would have called this something like raise_retry_exception as it bleeds the taskflow concept into the amphora driver API. Really, sometime in the future, this should be refactored to move all of the retries up to the flow level. Now is not that time.","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"a181b3ac57dccc1a67f86ff8ce836dcdc082677c","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        \"\"\"Execute get_info routine for an amphora until it responds.\"\"\""},{"line_number":378,"context_line":"        try:"},{"line_number":379,"context_line":"            amp_info \u003d self.amphora_driver.get_info(amphora,"},{"line_number":380,"context_line":"                                                    flow_retry\u003dflow_retry)"},{"line_number":381,"context_line":"            LOG.debug(\u0027Successfuly connected to amphora %s: %s\u0027,"},{"line_number":382,"context_line":"                      amphora.id, amp_info)"},{"line_number":383,"context_line":"        except driver_except.TimeOutException:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7faddb67_f338d7a0","line":380,"in_reply_to":"7faddb67_2cf93a4c","updated":"2019-07-12 13:01:44.000000000","message":"Done","commit_id":"999a35c11e4471494ddfea51890d7f61fe88fd35"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"8dd24cad4595e828cb53e0627eb0e518467c3ce7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"class AmpRetry(retry.Times):"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def on_failure(self, history, *args, **kwargs):"},{"line_number":56,"context_line":"        last_errors \u003d history[-1][1]"},{"line_number":57,"context_line":"        max_retry_attempt \u003d CONF.haproxy_amphora.connection_max_retries"},{"line_number":58,"context_line":"        for task_name, ex_info in last_errors.items():"},{"line_number":59,"context_line":"            if len(history) \u003c\u003d max_retry_attempt:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_dde5ef39","line":56,"range":{"start_line":56,"start_character":22,"end_line":56,"end_character":36},"updated":"2019-07-25 12:21:16.000000000","message":"Today face an issue with running this with taskflow persistence.\nEach time it saves tracebacks, error, etc as a taskflow Failure object here in history.\nI hit an issue with writing retry task info: \n\n    DataError: (pymysql.err.DataError) (1406, u\"Data too long for column \u0027results\u0027\n\nSeems, that when I checked this before my devstack was faster/vms were spawning faster, so such error didn\u0027t appear as there was not so many retries. \n\nNeed to understand if there is anything can be done to fix, or this whole approach is useless.","commit_id":"0fae7e68028bbec37d22783b51b2b51aa06e0d9a"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"918899c28ee077d7119615596d374be87b5ef4bb","unresolved":false,"context_lines":[{"line_number":53,"context_line":"class AmpRetry(retry.Times):"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def on_failure(self, history, *args, **kwargs):"},{"line_number":56,"context_line":"        last_errors \u003d history[-1][1]"},{"line_number":57,"context_line":"        max_retry_attempt \u003d CONF.haproxy_amphora.connection_max_retries"},{"line_number":58,"context_line":"        for task_name, ex_info in last_errors.items():"},{"line_number":59,"context_line":"            if len(history) \u003c\u003d max_retry_attempt:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7faddb67_10d5d043","line":56,"range":{"start_line":56,"start_character":22,"end_line":56,"end_character":36},"in_reply_to":"7faddb67_dde5ef39","updated":"2019-08-08 15:50:38.000000000","message":"Just to capture our IRC discussion. We agreed that the current workaround is to propose a taskflow DB migration that changes the results column from \"text\" to \"LONGTEXT\" to provide extra storage. We also opened a bug to see if this code in taskflow could be refactored to not require so much storage per retry.","commit_id":"0fae7e68028bbec37d22783b51b2b51aa06e0d9a"}]}
