)]}'
{"neutron/db/db_base_plugin_v2.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"d1ddc7baccffbf32e4588ed8e992bb742ecc78fc","unresolved":false,"context_lines":[{"line_number":1310,"context_line":""},{"line_number":1311,"context_line":"            # remove network owned ports"},{"line_number":1312,"context_line":"            for a in allocated:"},{"line_number":1313,"context_line":"                if a.ports.device_owner in AUTO_DELETE_PORT_OWNERS:"},{"line_number":1314,"context_line":"                    NeutronDbPluginV2._delete_ip_allocation("},{"line_number":1315,"context_line":"                        context, subnet.network_id, id, a.ip_address)"},{"line_number":1316,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_44ab9274","line":1313,"updated":"2014-06-13 07:27:35.000000000","message":"Now that you are querying the ports table you will get a list of ports back, so \u0027a\u0027 should already be a port and you can query device owner directly.","commit_id":"31b7146e08b10a808612ed1cd9c598dfda241fef"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"7d0691659836ab85c8c8f70cb335428ce1e7973d","unresolved":false,"context_lines":[{"line_number":1310,"context_line":""},{"line_number":1311,"context_line":"            # remove network owned ports"},{"line_number":1312,"context_line":"            for a in allocated:"},{"line_number":1313,"context_line":"                if a.ports.device_owner in AUTO_DELETE_PORT_OWNERS:"},{"line_number":1314,"context_line":"                    NeutronDbPluginV2._delete_ip_allocation("},{"line_number":1315,"context_line":"                        context, subnet.network_id, id, a.ip_address)"},{"line_number":1316,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_2a93ada3","line":1313,"in_reply_to":"1ae5cdf2_44ab9274","updated":"2014-06-13 08:34:03.000000000","message":"I forgot to set patch set 2 as a WIP - But, it is :) I\u0027m trying out different things to make multiple API/RPC pass Tempest, and I\u0027m doing it on Gerrit to get all 3rd party CI as well. You can ignore this patch until I get a working solution and CI starts passing...","commit_id":"31b7146e08b10a808612ed1cd9c598dfda241fef"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"9f7cb0be75b14001457722fa9a4520c2e4b51ef8","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            # Check if any tenant owned ports are using this subnet"},{"line_number":1305,"context_line":"            allocated \u003d (context.session.query(models_v2.Port)."},{"line_number":1306,"context_line":"                         filter_by(network_id\u003dsubnet[\u0027network_id\u0027])."},{"line_number":1307,"context_line":"                         join(models_v2.IPAllocation)."},{"line_number":1308,"context_line":"                         filter_by(subnet_id\u003dsubnet[\u0027id\u0027])."},{"line_number":1309,"context_line":"                         with_lockmode(\u0027update\u0027))"},{"line_number":1310,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_8f99eed2","line":1307,"updated":"2014-06-16 13:54:49.000000000","message":"that will not work for postgress:\n NotSupportedError: (NotSupportedError) SELECT FOR UPDATE/SHARE cannot be applied to the nullable side of an outer join","commit_id":"3a59fdd39a9002016c4b3579026ab287eeba214a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"3e9b6a6ca70c669df0ee1946c5f8d45730c302cf","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            # Check if any tenant owned ports are using this subnet"},{"line_number":1305,"context_line":"            allocated \u003d (context.session.query(models_v2.Port)."},{"line_number":1306,"context_line":"                         filter_by(network_id\u003dsubnet[\u0027network_id\u0027])."},{"line_number":1307,"context_line":"                         join(models_v2.IPAllocation)."},{"line_number":1308,"context_line":"                         filter_by(subnet_id\u003dsubnet[\u0027id\u0027])."},{"line_number":1309,"context_line":"                         with_lockmode(\u0027update\u0027))"},{"line_number":1310,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_12c87574","line":1307,"in_reply_to":"1ae5cdf2_525cbd19","updated":"2014-06-17 13:47:28.000000000","message":"Oops, you\u0027re right though, the query in this patch is indeed a left outer join. In any case I\u0027m investigating other approaches.","commit_id":"3a59fdd39a9002016c4b3579026ab287eeba214a"},{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"0774e1dc0dfb7b918e27fe051e498c79280ec444","unresolved":false,"context_lines":[{"line_number":1304,"context_line":"            # Check if any tenant owned ports are using this subnet"},{"line_number":1305,"context_line":"            allocated \u003d (context.session.query(models_v2.Port)."},{"line_number":1306,"context_line":"                         filter_by(network_id\u003dsubnet[\u0027network_id\u0027])."},{"line_number":1307,"context_line":"                         join(models_v2.IPAllocation)."},{"line_number":1308,"context_line":"                         filter_by(subnet_id\u003dsubnet[\u0027id\u0027])."},{"line_number":1309,"context_line":"                         with_lockmode(\u0027update\u0027))"},{"line_number":1310,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_525cbd19","line":1307,"in_reply_to":"1ae5cdf2_8f99eed2","updated":"2014-06-17 13:41:45.000000000","message":"This is still WIP / I\u0027m not actually proposing a change, but the query above translates to an inner join, not an outer join. I checked this by printing \u0027allocated\u0027 and observing the SQL statement. Here\u0027s the SQL generated for the original statement:\n\nSELECT ipallocations.port_id AS ipallocations_port_id, ipallocations.ip_address AS ipallocations_ip_address, ipallocations.subnet_id AS ipallocations_subnet_id, ipallocations.network_id AS ipallocations_network_id \nFROM ipallocations JOIN ports ON ports.id \u003d ipallocations.port_id \nWHERE ipallocations.subnet_id \u003d :subnet_id_1 AND ports.network_id \u003d :network_id_1 FOR UPDATE","commit_id":"3a59fdd39a9002016c4b3579026ab287eeba214a"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"f756df5488f147ec7e8015a3dc9a3175f8a61e24","unresolved":false,"context_lines":[{"line_number":583,"context_line":"                allocated \u003d (session.query(models_v2.IPAllocation)."},{"line_number":584,"context_line":"                             options(orm.joinedload(\u0027ports\u0027, innerjoin\u003dTrue))."},{"line_number":585,"context_line":"                             filter_by(subnet_id\u003did)."},{"line_number":586,"context_line":"                             with_lockmode(\u0027update\u0027)."},{"line_number":587,"context_line":"                             all())"},{"line_number":588,"context_line":"                LOG.debug(_(\"Ports to auto-deallocate: %s\"), allocated)"},{"line_number":589,"context_line":"                only_auto_del \u003d all(a.ports.device_owner in db_base_plugin_v2."}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_114bdc2b","line":586,"updated":"2014-06-18 12:30:47.000000000","message":"this code will not work with postgres","commit_id":"7806856831eb6cfff91fa2d752764245148105db"}]}
