)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"7d8e6036_de3e8795","updated":"2022-01-19 22:20:16.000000000","message":"This is much better than other proposals. Just a few improvements I think we can make.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"2ae9ad86ba3f7ae947340982758ba933ea2d028a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"549eb316_db3807a7","updated":"2022-01-28 20:10:49.000000000","message":"I wanted to test this commit but I didn\u0027t get any notifications, is there anything to add to the configuration? could you add to the commit message the basic config we need to make it work?\n\nIt would be also really nice to have a doc with the list of the notification events\n\n-1 for visibility","commit_id":"5ce341167ad0f9d86e920342a5e6e93868f209c8"},{"author":{"_account_id":33130,"name":"Susanta gautam","email":"xuxant02@gmail.com","username":"sgautam"},"change_message_id":"0d61d5a8acc0118e5efe6fee8048581b4247079c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"dbe4e8b1_511f0fad","updated":"2022-01-28 18:33:38.000000000","message":"recheck","commit_id":"5ce341167ad0f9d86e920342a5e6e93868f209c8"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"0848282680aff3d2ec0aa8797f4cab0dc1c4161e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"3bf9842d_e364830d","updated":"2023-03-01 13:26:05.000000000","message":"A different implementation of this feature has been merged in Zed.","commit_id":"9866381a573758387c368bd5ff22b1490ba0e966"},{"author":{"_account_id":31746,"name":"Oleksandr Kozachenko","email":"okozachenko1203@gmail.com","username":"okozachenko"},"change_message_id":"f4e50a72eeda0a73258e1b41ee0f492c93ece0c0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"39952a41_5e20a856","updated":"2022-01-31 14:10:13.000000000","message":"recheck","commit_id":"9866381a573758387c368bd5ff22b1490ba0e966"},{"author":{"_account_id":33130,"name":"Susanta gautam","email":"xuxant02@gmail.com","username":"sgautam"},"change_message_id":"046793dd133a2708dea97ef1b15a14fa583bba4e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"6bb755f4_b9e59201","updated":"2022-01-31 10:29:47.000000000","message":"recheck","commit_id":"9866381a573758387c368bd5ff22b1490ba0e966"},{"author":{"_account_id":33130,"name":"Susanta gautam","email":"xuxant02@gmail.com","username":"sgautam"},"change_message_id":"9f2b2631a579b66ee5f21eafccc46b43640c453f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a5cd1d03_354f23ed","updated":"2022-02-01 07:46:51.000000000","message":"recheck","commit_id":"9866381a573758387c368bd5ff22b1490ba0e966"}],"octavia/api/v2/controllers/base.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        ).driver"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        self.repositories \u003d repositories.Repositories()"},{"line_number":48,"context_line":"        self._notifier \u003d rpc.get_notifier()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @staticmethod"},{"line_number":51,"context_line":"    def _convert_db_to_type(db_entity, to_type, children\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":12,"id":"470e2175_3bf2d6f5","line":48,"updated":"2022-01-19 22:20:16.000000000","message":"Can we have a configuration option to enable/disable notifications with a default of disabled?\nThis adds processing overhead that is not necessary unless the deployment wants notifications, so it would be nice to have a configuration setting that disables all of the notification related code.\nNot to mention we don\u0027t need to be filling up rabbitmq queues with notifications that nothing is consuming.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"}],"octavia/api/v2/controllers/load_balancer.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":524,"context_line":""},{"line_number":525,"context_line":"        result \u003d self._convert_db_to_type("},{"line_number":526,"context_line":"            db_lb, lb_types.LoadBalancerFullResponse)"},{"line_number":527,"context_line":"        self._notifier.info(context, \u0027octavia.loadbalancer.create.start\u0027,"},{"line_number":528,"context_line":"                            result.to_dict())"},{"line_number":529,"context_line":"        return lb_types.LoadBalancerFullRootResponse(loadbalancer\u003dresult)"},{"line_number":530,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"facb4e04_90488ac7","line":527,"updated":"2022-01-19 22:20:16.000000000","message":"Same here, would be nice to have this disabled unless someone needs/wants it.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"}],"octavia/cmd/usage_audit.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def main():"},{"line_number":25,"context_line":"    octavia_service.prepare_service(sys.argv)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    ctx \u003d context.Context()"},{"line_number":28,"context_line":"    repos \u003d repositories.Repositories()"}],"source_content_type":"text/x-python","patch_set":12,"id":"6f2348b4_e65616c1","line":25,"updated":"2022-01-19 22:20:16.000000000","message":"This is a one time run tool, why do you need to run the service setup for it?\nThis has the side effect of allocating RPC resources and logging, which isn\u0027t used here.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    lbs, _ \u003d repos.load_balancer.get_all(ctx.session, show_deleted\u003dFalse)"},{"line_number":32,"context_line":"    for lb in lbs:"},{"line_number":33,"context_line":"        result \u003d lb_types.LoadBalancerFullResponse.from_data_model(lb)"},{"line_number":34,"context_line":"        notifier.info(ctx, \u0027octavia.loadbalancer.exists\u0027, result.to_dict())"}],"source_content_type":"text/x-python","patch_set":12,"id":"c6bd92cf_f3337929","line":33,"updated":"2022-01-19 22:20:16.000000000","message":"Since you are converting this format to the API format, why not just have this tool call the API directly? A \"openstack loadbalancer list\" call with admin credentials will give you this exact data.\nThat way it doesn\u0027t have to be co-located with the controllers, etc.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"}],"octavia/common/rpc.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"def get_notifier(service\u003dNone, host\u003dNone, publisher_id\u003dNone):"},{"line_number":70,"context_line":"    if NOTIFIER is None:"},{"line_number":71,"context_line":"        init()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    return NOTIFIER.prepare()"}],"source_content_type":"text/x-python","patch_set":12,"id":"f3477565_c4909c6d","line":70,"updated":"2022-01-19 22:20:16.000000000","message":"This means that TRANSPORT is no longer a singleton. This call to init() will create a second instance.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"}],"octavia/controller/worker/v1/tasks/database_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        self.l7rule_repo \u003d repo.L7RuleRepository()"},{"line_number":57,"context_line":"        self.task_utils \u003d task_utilities.TaskUtils()"},{"line_number":58,"context_line":"        super().__init__(**kwargs)"},{"line_number":59,"context_line":"        self._rpc_notifier \u003d rpc.get_notifier()"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _delete_from_amp_health(self, amphora_id):"},{"line_number":62,"context_line":"        \"\"\"Delete the amphora_health record for an amphora."}],"source_content_type":"text/x-python","patch_set":12,"id":"5d5479ea_a7f9af27","line":59,"updated":"2022-01-19 22:20:16.000000000","message":"This is a class wide init, so we have not used \"_\" for these.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":949,"context_line":""},{"line_number":950,"context_line":"        result \u003d lb_types.LoadBalancerFullResponse.from_data_model("},{"line_number":951,"context_line":"            loadbalancer)"},{"line_number":952,"context_line":"        if loadbalancer.provisioning_status \u003d\u003d constants.PENDING_CREATE:"},{"line_number":953,"context_line":"            event_type \u003d \u0027octavia.loadbalancer.create.end\u0027"},{"line_number":954,"context_line":"        else:"},{"line_number":955,"context_line":"            event_type \u003d \u0027octavia.loadbalancer.update.end\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"68702604_37daa403","line":952,"updated":"2022-01-19 22:20:16.000000000","message":"This is incorrect and will lead to instability.\nloadbalancer here is a sqlalchemy ORM object. The update on line 946 may invalidate or update this object depending on the sqla version and the code in the repository. That would cause provisioning_status here to already be ACTIVE. With this code, every notification would be an \"update\".\nIt\u0027s also worth noting that this task is used in many flows unrelated to just LB create and update.\nIt\u0027s probably best that the notification code has it\u0027s own task and not overload the functionality of these database tasks.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"}],"octavia/controller/worker/v2/tasks/database_tasks.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":57,"context_line":"        self.l7rule_repo \u003d repo.L7RuleRepository()"},{"line_number":58,"context_line":"        self.task_utils \u003d task_utilities.TaskUtils()"},{"line_number":59,"context_line":"        super().__init__(**kwargs)"},{"line_number":60,"context_line":"        self._rpc_notifier \u003d rpc.get_notifier()"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def _delete_from_amp_health(self, amphora_id):"},{"line_number":63,"context_line":"        \"\"\"Delete the amphora_health record for an amphora."}],"source_content_type":"text/x-python","patch_set":12,"id":"05df277b_431b0c2b","line":60,"updated":"2022-01-19 22:20:16.000000000","message":"Same comment as the v1 change.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":1006,"context_line":"        :returns: None"},{"line_number":1007,"context_line":"        \"\"\""},{"line_number":1008,"context_line":""},{"line_number":1009,"context_line":"        db_lb \u003d self.loadbalancer_repo.get("},{"line_number":1010,"context_line":"            db_apis.get_session(), id\u003dloadbalancer[constants.LOADBALANCER_ID])"},{"line_number":1011,"context_line":""},{"line_number":1012,"context_line":"        if self.mark_subobjects:"}],"source_content_type":"text/x-python","patch_set":12,"id":"0afbc99c_a3877204","line":1009,"updated":"2022-01-19 22:20:16.000000000","message":"This adds an extra round trip to the database for every call. I don\u0027t think that is necessary.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                                      provisioning_status\u003dconstants.ACTIVE)"},{"line_number":1023,"context_line":""},{"line_number":1024,"context_line":"        result \u003d lb_types.LoadBalancerFullResponse.from_data_model(db_lb)"},{"line_number":1025,"context_line":"        if db_lb.provisioning_status \u003d\u003d constants.PENDING_CREATE:"},{"line_number":1026,"context_line":"            event_type \u003d \u0027octavia.loadbalancer.create.end\u0027"},{"line_number":1027,"context_line":"        else:"},{"line_number":1028,"context_line":"            event_type \u003d \u0027octavia.loadbalancer.update.end\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"8fb33c6f_32e8cea6","line":1025,"updated":"2022-01-19 22:20:16.000000000","message":"Same comment here as v1, the db_lb will be invalidated by line 1020.","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"cd63db276a1edec5b644c62c5c3a29be13332957","unresolved":true,"context_lines":[{"line_number":1027,"context_line":"        else:"},{"line_number":1028,"context_line":"            event_type \u003d \u0027octavia.loadbalancer.update.end\u0027"},{"line_number":1029,"context_line":"        ctx \u003d context.Context(project_id\u003ddb_lb.project_id)"},{"line_number":1030,"context_line":"        self._rpc_notifier.info(ctx, event_type, result.to_dict())"},{"line_number":1031,"context_line":""},{"line_number":1032,"context_line":"    def _mark_listener_status(self, listener, status):"},{"line_number":1033,"context_line":"        self.listener_repo.update(db_apis.get_session(),"}],"source_content_type":"text/x-python","patch_set":12,"id":"a5a8ce5b_3ea5285c","line":1030,"updated":"2022-01-19 22:20:16.000000000","message":"Same comment here, this notification should be it\u0027s own task(s).","commit_id":"189a6abad75ab683171f5d39505bb3e5ca740619"}]}
