)]}'
{"quantum/plugins/services/agent_loadbalancer/plugin.py":[{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"d5a0a0b113e0ed6874e91eeb6dbecef27acb08ed","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            )"},{"line_number":55,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Vip.status.in_(ACTIVE_PENDING))"},{"line_number":56,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Pool.status.in_(ACTIVE_PENDING))"},{"line_number":57,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Pool.vip_id \u003d\u003d"},{"line_number":58,"context_line":"                             loadbalancer_db.Vip.id)"},{"line_number":59,"context_line":"            up \u003d True  # makes pep8 and sqlalchemy happy"},{"line_number":60,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Vip.admin_state_up \u003d\u003d up)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F9X0%3D","line":57,"updated":"2013-03-19 15:09:48.000000000","message":"This has little to do with the purpose of your change, but I think we could rewrite this function to something like this:\n\ndef get_ready_devices(self, context, host\u003dNone):\n   with context.session.begin(subtransactions\u003dTrue):\n       qry \u003d context.session.query(loadbalancer_db.Pool.id) \\\n                            .join(loadbalancer_db.Vip)\n\n       qry \u003d qry.filter(loadbalancer_db.Vip.status.in_(ACTIVE_PENDING))\n       qry \u003d qry.filter(loadbalancer_db.Pool.status.in_(ACTIVE_PENDING))\n       up \u003d True  # makes pep8 and sqlalchemy happy\n       qry \u003d qry.filter(loadbalancer_db.Vip.admin_state_up \u003d\u003d up)\n       qry \u003d qry.filter(loadbalancer_db.Pool.admin_state_up \u003d\u003d up)\n       return [p[0] for p in qry.all()]\n\n1. IMHO: explicit inner joins can result in a better execution plan and are more readable.\n\n2. Select only the columns we need.\n\nOriginal query:\n\nSELECT vips.tenant_id AS vips_tenant_id, vips.id AS vips_id, vips.name AS vips_name,\n       vips.description AS vips_description, vips.port_id AS vips_port_id, \n       vips.protocol_port AS vips_protocol_port, vips.protocol AS vips_protocol,\n       vips.pool_id AS vips_pool_id, vips.status AS vips_status, vips.admin_state_up\n       AS vips_admin_state_up, vips.connection_limit AS vips_connection_limit,\n       pools.tenant_id AS pools_tenant_id, pools.id AS pools_id, pools.vip_id AS\n       pools_vip_id, pools.name AS pools_name, pools.description AS pools_description,\n       pools.subnet_id AS pools_subnet_id, pools.protocol AS pools_protocol,\n       pools.lb_method AS pools_lb_method, pools.status AS pools_status,\n       pools.admin_state_up AS pools_admin_state_up \nFROM vips, pools \nWHERE vips.status IN (\u0027ACTIVE\u0027, \u0027PENDING_CREATE\u0027, \u0027PENDING_UPDATE\u0027) AND\n      pools.status IN (\u0027ACTIVE\u0027, \u0027PENDING_CREATE\u0027, \u0027PENDING_UPDATE\u0027) AND\n      pools.vip_id \u003d vips.id AND vips.admin_state_up \u003d true AND \n      pools.admin_state_up \u003d true\n\nThe new one:\n\nSELECT pools.id AS pools_id \nFROM pools JOIN vips ON vips.id \u003d pools.vip_id \nWHERE vips.status IN (\u0027ACTIVE\u0027, \u0027PENDING_CREATE\u0027, \u0027PENDING_UPDATE\u0027) AND\n      pools.status IN (\u0027ACTIVE\u0027, \u0027PENDING_CREATE\u0027, \u0027PENDING_UPDATE\u0027) AND\n      vips.admin_state_up \u003d true AND\n      pools.admin_state_up \u003d true","commit_id":"ba6b32ef531100c00cdcecd0ae6643f0d049f454"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":54,"context_line":"            )"},{"line_number":55,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Vip.status.in_(ACTIVE_PENDING))"},{"line_number":56,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Pool.status.in_(ACTIVE_PENDING))"},{"line_number":57,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Pool.vip_id \u003d\u003d"},{"line_number":58,"context_line":"                             loadbalancer_db.Vip.id)"},{"line_number":59,"context_line":"            up \u003d True  # makes pep8 and sqlalchemy happy"},{"line_number":60,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Vip.admin_state_up \u003d\u003d up)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F9Us%3D","line":57,"in_reply_to":"AAAAOH%2F%2F9X0%3D","updated":"2013-03-19 15:25:33.000000000","message":"+1 to Roman\u0027s suggestion.","commit_id":"ba6b32ef531100c00cdcecd0ae6643f0d049f454"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"unresolved":false,"context_lines":[{"line_number":54,"context_line":"            )"},{"line_number":55,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Vip.status.in_(ACTIVE_PENDING))"},{"line_number":56,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Pool.status.in_(ACTIVE_PENDING))"},{"line_number":57,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Pool.vip_id \u003d\u003d"},{"line_number":58,"context_line":"                             loadbalancer_db.Vip.id)"},{"line_number":59,"context_line":"            up \u003d True  # makes pep8 and sqlalchemy happy"},{"line_number":60,"context_line":"            qry \u003d qry.filter(loadbalancer_db.Vip.admin_state_up \u003d\u003d up)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F9Oo%3D","line":57,"in_reply_to":"AAAAOH%2F%2F9X0%3D","updated":"2013-03-19 16:03:27.000000000","message":"good suggestion.","commit_id":"ba6b32ef531100c00cdcecd0ae6643f0d049f454"}],"quantum/tests/unit/services/agent_loadbalancer/test_plugin.py":[{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.assertEqual(ctx.session.query(ldb.Vip).count(), 2)"},{"line_number":94,"context_line":"        ready \u003d self.callbacks.get_ready_devices(ctx)"},{"line_number":95,"context_line":"        self.assertEqual(len(ready), 2)"},{"line_number":96,"context_line":"        self.assertTrue(pools[0].id in ready)"},{"line_number":97,"context_line":"        self.assertTrue(pools[1].id in ready)"},{"line_number":98,"context_line":"        self.assertTrue(pools[2].id not in ready)"},{"line_number":99,"context_line":"        # cleanup"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F8PA%3D","line":96,"updated":"2013-03-20 01:32:00.000000000","message":"self.assertIn(pools[0].id, ready)","commit_id":"d0255a421956f100e8021cd4ac793dc87e871803"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":94,"context_line":"        ready \u003d self.callbacks.get_ready_devices(ctx)"},{"line_number":95,"context_line":"        self.assertEqual(len(ready), 2)"},{"line_number":96,"context_line":"        self.assertTrue(pools[0].id in ready)"},{"line_number":97,"context_line":"        self.assertTrue(pools[1].id in ready)"},{"line_number":98,"context_line":"        self.assertTrue(pools[2].id not in ready)"},{"line_number":99,"context_line":"        # cleanup"},{"line_number":100,"context_line":"        ctx.session.query(ldb.Pool).delete()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F8O8%3D","line":97,"updated":"2013-03-20 01:32:00.000000000","message":"self.assertIn()","commit_id":"d0255a421956f100e8021cd4ac793dc87e871803"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.assertEqual(len(ready), 2)"},{"line_number":96,"context_line":"        self.assertTrue(pools[0].id in ready)"},{"line_number":97,"context_line":"        self.assertTrue(pools[1].id in ready)"},{"line_number":98,"context_line":"        self.assertTrue(pools[2].id not in ready)"},{"line_number":99,"context_line":"        # cleanup"},{"line_number":100,"context_line":"        ctx.session.query(ldb.Pool).delete()"},{"line_number":101,"context_line":"        ctx.session.query(ldb.Vip).delete()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F8O0%3D","line":98,"updated":"2013-03-20 01:32:00.000000000","message":"self.assertNotIn()","commit_id":"d0255a421956f100e8021cd4ac793dc87e871803"}]}
