)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"a0ebe59c05748d838fb7bff5e6aadc83a3ad1543","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[WIP] Cascading LB delete"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new cascading delete method to the REST API."},{"line_number":10,"context_line":"When a load balancer is deleted it will alo delete"},{"line_number":11,"context_line":"all associated listeners, pools, memebers, healthmonitors"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I0fd88923dc76e573b92d83f68d292ded913b13a6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"bae84128_9ebf5ca9","line":10,"range":{"start_line":10,"start_character":40,"end_line":10,"end_character":43},"updated":"2016-02-23 18:54:56.000000000","message":"also","commit_id":"bf66951ec3c1a3c26e255e5d9c716da894b86cd6"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"1abd3c542711164122db09b7626607a6080be6c3","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a new cascading delete method to the REST API."},{"line_number":10,"context_line":"When a load balancer is deleted it will alo delete"},{"line_number":11,"context_line":"all associated listeners, pools, memebers, healthmonitors,"},{"line_number":12,"context_line":"and L7 Policies"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I0fd88923dc76e573b92d83f68d292ded913b13a6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"9aed3d3a_6bf9acc8","line":11,"range":{"start_line":11,"start_character":33,"end_line":11,"end_character":41},"updated":"2016-02-25 19:18:52.000000000","message":"nit: members","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"}],"octavia/api/v1/controllers/load_balancer.py":[{"author":{"_account_id":10477,"name":"min wang","email":"swiftwangster@gmail.com","username":"minwang"},"change_message_id":"a0ebe59c05748d838fb7bff5e6aadc83a3ad1543","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    @wsme_pecan.wsexpose(None, wtypes.text, status_code\u003d202)"},{"line_number":155,"context_line":"    def delete_cascade(self, id):"},{"line_number":156,"context_line":"        \"\"\"Deletes a load balancer.\"\"\""},{"line_number":157,"context_line":"        return self._delete(id, cascade\u003dTrue)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_9e72bc0f","line":156,"updated":"2016-02-23 18:54:56.000000000","message":"the description here is the same as line 150, we might want add more description such as \u0027Deletes a load balancer with cascade enabled\u0027 to differentiate these two methods.","commit_id":"bf66951ec3c1a3c26e255e5d9c716da894b86cd6"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e3b08b3269c852320c83e762db0b75086e78654b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        context \u003d pecan.request.context.get(\u0027octavia_context\u0027)"},{"line_number":152,"context_line":"        if lb_id and len(remainder) and (remainder[0] \u003d\u003d \u0027listeners\u0027 or"},{"line_number":153,"context_line":"                                         remainder[0] \u003d\u003d \u0027pools\u0027 or"},{"line_number":154,"context_line":"                                         remainder[0] \u003d\u003d \u0027delete_cascade\u0027):"},{"line_number":155,"context_line":"            controller \u003d remainder[0]"},{"line_number":156,"context_line":"            remainder \u003d remainder[1:]"},{"line_number":157,"context_line":"            db_lb \u003d self.repositories.load_balancer.get(context.session,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_965f9ee4","line":154,"range":{"start_line":154,"start_character":57,"end_line":154,"end_character":58},"updated":"2016-02-27 02:07:03.000000000","message":"Was going to ask why you didn\u0027t do this as a query string parameter... then I realized I was being dumb because nobody in their right mind should do a delete off a GET method. So... yes, this a handy trick.","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"}],"octavia/controller/worker/controller_worker.py":[{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"d23b64764ef6f8619efb082a4ae76d7e5c256a16","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        lb \u003d self._lb_repo.get(db_apis.get_session(),"},{"line_number":311,"context_line":"                               id\u003dload_balancer_id)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        if cascade:"},{"line_number":314,"context_line":"            (flow,"},{"line_number":315,"context_line":"             store) \u003d self._lb_flows.get_cascade_delete_load_balancer_flow(lb)"},{"line_number":316,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aed3d3a_dc7f2ede","line":313,"updated":"2016-02-29 22:02:16.000000000","message":"Needs unit test update for missing branch","commit_id":"c22baccd98992800badba3044660de1b54995373"}],"octavia/controller/worker/flows/load_balancer_flows.py":[{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e3b08b3269c852320c83e762db0b75086e78654b","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        :return: (flow, store) -- flow for the deletion and store with all"},{"line_number":147,"context_line":"                    the listeners stored properly"},{"line_number":148,"context_line":"        \"\"\""},{"line_number":149,"context_line":"        listener_delete_flow \u003d unordered_flow.Flow(\u0027listener_delete_flow\u0027)"},{"line_number":150,"context_line":"        store \u003d {}"},{"line_number":151,"context_line":"        for listener in lb.listeners:"},{"line_number":152,"context_line":"            listener_name \u003d \u0027listener_\u0027 + listener.id"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_f6f42a88","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":74},"updated":"2016-02-27 02:07:03.000000000","message":"Nit: Use plural names when potentially more than one is being deleted.","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"04ec5d065a4d6b325142733ab71d2876a73740f8","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        :return: (flow, store) -- flow for the deletion and store with all"},{"line_number":147,"context_line":"                    the listeners stored properly"},{"line_number":148,"context_line":"        \"\"\""},{"line_number":149,"context_line":"        listener_delete_flow \u003d unordered_flow.Flow(\u0027listener_delete_flow\u0027)"},{"line_number":150,"context_line":"        store \u003d {}"},{"line_number":151,"context_line":"        for listener in lb.listeners:"},{"line_number":152,"context_line":"            listener_name \u003d \u0027listener_\u0027 + listener.id"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_c53680e6","line":149,"range":{"start_line":149,"start_character":0,"end_line":149,"end_character":74},"in_reply_to":"9aed3d3a_f6f42a88","updated":"2016-02-27 18:24:22.000000000","message":"Done","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e3b08b3269c852320c83e762db0b75086e78654b","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        :returns: The flow for deleting a load balancer"},{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":"        (listener_delete, store) \u003d self._get_delete_listeners_flow(lb)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        delete_LB_flow \u003d linear_flow.Flow(constants.DELETE_LOADBALANCER_FLOW)"},{"line_number":167,"context_line":"        delete_LB_flow.add(compute_tasks.NovaServerGroupDelete("}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_7693fa4f","line":164,"range":{"start_line":164,"start_character":9,"end_line":164,"end_character":24},"updated":"2016-02-27 02:07:03.000000000","message":"Nit: listeners_delete\nWe are potentially deleting more than one of them.","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"04ec5d065a4d6b325142733ab71d2876a73740f8","unresolved":false,"context_lines":[{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        :returns: The flow for deleting a load balancer"},{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":"        (listener_delete, store) \u003d self._get_delete_listeners_flow(lb)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        delete_LB_flow \u003d linear_flow.Flow(constants.DELETE_LOADBALANCER_FLOW)"},{"line_number":167,"context_line":"        delete_LB_flow.add(compute_tasks.NovaServerGroupDelete("}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_053188ec","line":164,"range":{"start_line":164,"start_character":9,"end_line":164,"end_character":24},"in_reply_to":"9aed3d3a_7693fa4f","updated":"2016-02-27 18:24:22.000000000","message":"Done","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e3b08b3269c852320c83e762db0b75086e78654b","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        :returns: The flow for deleting a load balancer"},{"line_number":210,"context_line":"        \"\"\""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        (listener_delete, store) \u003d self._get_delete_listeners_flow(lb)"},{"line_number":213,"context_line":"        (pool_delete, pool_store) \u003d self._get_delete_pools_flow(lb)"},{"line_number":214,"context_line":"        store.update(pool_store)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_56c6b648","line":212,"range":{"start_line":212,"start_character":9,"end_line":212,"end_character":24},"updated":"2016-02-27 02:07:03.000000000","message":"Again, nit: Use plural names when potentially deleting more than one of the object.","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"04ec5d065a4d6b325142733ab71d2876a73740f8","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        :returns: The flow for deleting a load balancer"},{"line_number":210,"context_line":"        \"\"\""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        (listener_delete, store) \u003d self._get_delete_listeners_flow(lb)"},{"line_number":213,"context_line":"        (pool_delete, pool_store) \u003d self._get_delete_pools_flow(lb)"},{"line_number":214,"context_line":"        store.update(pool_store)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_254dac6c","line":212,"range":{"start_line":212,"start_character":9,"end_line":212,"end_character":24},"in_reply_to":"9aed3d3a_56c6b648","updated":"2016-02-27 18:24:22.000000000","message":"Done","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"}],"octavia/controller/worker/flows/pool_flows.py":[{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e3b08b3269c852320c83e762db0b75086e78654b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        return delete_pool_flow"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_delete_pool_flow_internal(self, name):"},{"line_number":57,"context_line":"        \"\"\"Create a flow to delete a pool, it\u0027s members, and healthmonitor"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        :returns: The flow for deleting a pool"},{"line_number":60,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_d60da691","line":57,"range":{"start_line":57,"start_character":41,"end_line":57,"end_character":42},"updated":"2016-02-27 02:07:03.000000000","message":"Nit: Just use etc. We kill the session persistence and will kill anything new we think of that is just a subordinate object to the pool.","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"04ec5d065a4d6b325142733ab71d2876a73740f8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        return delete_pool_flow"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_delete_pool_flow_internal(self, name):"},{"line_number":57,"context_line":"        \"\"\"Create a flow to delete a pool, it\u0027s members, and healthmonitor"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        :returns: The flow for deleting a pool"},{"line_number":60,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_6575f496","line":57,"range":{"start_line":57,"start_character":41,"end_line":57,"end_character":42},"in_reply_to":"9aed3d3a_d60da691","updated":"2016-02-27 18:24:22.000000000","message":"Done","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e3b08b3269c852320c83e762db0b75086e78654b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        :returns: The flow for deleting a pool"},{"line_number":60,"context_line":"        \"\"\""},{"line_number":61,"context_line":"        delete_pool_flow \u003d linear_flow.Flow(constants.DELETE_POOL_FLOW)"},{"line_number":62,"context_line":"        delete_pool_flow.add(database_tasks.DeleteHealthMonitorInDBByPool("},{"line_number":63,"context_line":"            name\u003d\u0027pool_delete_health_monitor_\u0027 + name,"},{"line_number":64,"context_line":"            requires\u003dconstants.POOL,"},{"line_number":65,"context_line":"            rebind\u003d{constants.POOL: name}))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_f669ca26","line":62,"range":{"start_line":62,"start_character":0,"end_line":62,"end_character":74},"updated":"2016-02-27 02:07:03.000000000","message":"Don\u0027t health monitors also have a cascade\u003ddelete attribute? Or is our code DB model different from how the database is actually set up?  (In which case... maybe we should do a migration to make sure that health monitors in the DB are cascading deleted?)","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"04ec5d065a4d6b325142733ab71d2876a73740f8","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        :returns: The flow for deleting a pool"},{"line_number":60,"context_line":"        \"\"\""},{"line_number":61,"context_line":"        delete_pool_flow \u003d linear_flow.Flow(constants.DELETE_POOL_FLOW)"},{"line_number":62,"context_line":"        delete_pool_flow.add(database_tasks.DeleteHealthMonitorInDBByPool("},{"line_number":63,"context_line":"            name\u003d\u0027pool_delete_health_monitor_\u0027 + name,"},{"line_number":64,"context_line":"            requires\u003dconstants.POOL,"},{"line_number":65,"context_line":"            rebind\u003d{constants.POOL: name}))"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_4578b08f","line":62,"range":{"start_line":62,"start_character":0,"end_line":62,"end_character":74},"in_reply_to":"9aed3d3a_f669ca26","updated":"2016-02-27 18:24:22.000000000","message":"Done","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"}],"octavia/controller/worker/tasks/database_tasks.py":[{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"e3b08b3269c852320c83e762db0b75086e78654b","unresolved":false,"context_lines":[{"line_number":288,"context_line":"#                                  operating_status\u003dconstants.ERROR)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"class DeleteAllL7PoliciesInDB(BaseDatabaseTask):"},{"line_number":292,"context_line":"    \"\"\"Delete the member in the DB."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    Since sqlalchemy will likely retry by itself always revert if it fails"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_d6e92682","line":291,"range":{"start_line":291,"start_character":0,"end_line":291,"end_character":48},"updated":"2016-02-27 02:07:03.000000000","message":"Again, I\u0027m pretty sure that l7policies are set to cascade delete when their parent listener is deleted. At least the octavia/db/models.py seems to indicate that. If they aren\u0027t in the actual MySQL table configuration, that\u0027s probably a bug on my part from L7 that we should address here with an alembic migration. Especially since nobody is using L7 yet and we can change the behavior of this without upsetting anyone.","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"04ec5d065a4d6b325142733ab71d2876a73740f8","unresolved":false,"context_lines":[{"line_number":288,"context_line":"#                                  operating_status\u003dconstants.ERROR)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"class DeleteAllL7PoliciesInDB(BaseDatabaseTask):"},{"line_number":292,"context_line":"    \"\"\"Delete the member in the DB."},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"    Since sqlalchemy will likely retry by itself always revert if it fails"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_8572b8ab","line":291,"range":{"start_line":291,"start_character":0,"end_line":291,"end_character":48},"in_reply_to":"9aed3d3a_d6e92682","updated":"2016-02-27 18:24:22.000000000","message":"Done","commit_id":"1f0b5a06e0bf16a2794256c177734e555bb7c3b1"}]}
