** Changed in: neutron
       Status: Fix Committed => Fix Released

** Changed in: neutron
    Milestone: None => liberty-3

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1484379

Title:
  Passing PD subnet_id in fixed_ips to port-create causes
  DBDuplicateEntry

Status in neutron:
  Fix Released

Bug description:
  Found this when testing the v6 prefix delegation patch
  https://review.openstack.org/#/c/185977/ and trying to use the debug-
  probe.

  Got a DB error when trying to create a port where the subnet id is
  passed in fixed ips.  Note this subnet has "subnetpool_id":
  "prefix_delegation".

  vagrant@node1:~$ curl -s -X  GET 
http://192.168.2.2:9696/v2.0/subnets/a524ad8d-644d-4f89-ade8-960dcbd8fb72.json 
-H "User-Agent: python-neutronclient" -H "Accept: application/json" -H 
"X-Auth-Token: 246cf05ad88843d0b4e76ae6dda6e6b6" | python -m json.tool
  {
      "subnet": {
          "allocation_pools": [
              {
                  "end": "2222:2222:2222:3c0f:ffff:ffff:ffff:ffff",
                  "start": "2222:2222:2222:3c0f::2"
              }
          ],
          "cidr": "2222:2222:2222:3c0f::/64",
          "dns_nameservers": [],
          "enable_dhcp": true,
          "gateway_ip": "2222:2222:2222:3c0f::1",
          "host_routes": [],
          "id": "a524ad8d-644d-4f89-ade8-960dcbd8fb72",
          "ip_version": 6,
          "ipv6_address_mode": "slaac",
          "ipv6_ra_mode": "slaac",
          "name": "sub6",
          "network_id": "26c63522-375a-49e8-8d37-bc0124c53076",
          "subnetpool_id": "prefix_delegation",
          "tenant_id": "48560abddfec4170bfdb5f6ed79e2847"
      }
  }

  
  vagrant@node1:~$ neutron port-create 26c63522-375a-49e8-8d37-bc0124c53076 
--fixed_ips list=true type=dict subnet_id=a524ad8d-644d-4f89-ade8-960dcbd8fb72
  Request Failed: internal server error while processing your request.

  
  2015-08-13 06:34:08.363 DEBUG neutron.db.db_base_plugin_common 
[req-bfcdb604-1491-4108-912e-b960b4329d5d admin admin] Allocated IP 
2222:2222:2222:3c0f:f816:3eff:fe3b:91c7 
(26c63522-375a-49e8-8d37-bc0124c53076/a524ad8d-644d-4f89-ade8-960dcbd8fb72/0879bbc4-d3d0-4b57-ae6a-382757bcb330)
 _store_ip_allocation /opt/stack/neutron/neutron/db/db_base_plugin_common.py:68
  2015-08-13 06:34:08.363 DEBUG neutron.db.db_base_plugin_common 
[req-bfcdb604-1491-4108-912e-b960b4329d5d admin admin] Allocated IP 
2222:2222:2222:3c0f:f816:3eff:fe3b:91c7 
(26c63522-375a-49e8-8d37-bc0124c53076/a524ad8d-644d-4f89-ade8-960dcbd8fb72/0879bbc4-d3d0-4b57-ae6a-382757bcb330)
 _store_ip_allocation /opt/stack/neutron/neutron/db/db_base_plugin_common.py:68
  2015-08-13 06:34:08.370 ERROR neutron.api.v2.resource 
[req-bfcdb604-1491-4108-912e-b960b4329d5d admin admin] create failed
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource Traceback (most 
recent call last):
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/api/v2/resource.py", line 83, in resource
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     result = 
method(request=request, **args)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 146, in wrapper
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     ectxt.value = 
e.inner_exc
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 119, in 
__exit__
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
six.reraise(self.type_, self.value, self.tb)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 136, in wrapper
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     return 
f(*args, **kwargs)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/api/v2/base.py", line 486, in create
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     obj = 
obj_creator(request.context, **kwargs)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/plugins/ml2/plugin.py", line 998, in create_port
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     result, 
mech_context = self._create_port_db(context, port)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/plugins/ml2/plugin.py", line 973, in _create_port_db
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     result = 
super(Ml2Plugin, self).create_port(context, port)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/opt/stack/neutron/neutron/db/db_base_plugin_v2.py", line 1018, in create_port
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
self.ipam.allocate_ips_for_port_and_store(context, port, port_id)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 490, 
in __exit__
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     self.rollback()
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 
60, in __exit__
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
compat.reraise(exc_type, exc_value, exc_tb)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 487, 
in __exit__
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     self.commit()
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 392, 
in commit
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
self._prepare_impl()
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 372, 
in _prepare_impl
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
self.session.flush()
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2004, 
in flush
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
self._flush(objects)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2122, 
in _flush
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
transaction.rollback(_capture_exception=True)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 
60, in __exit__
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
compat.reraise(exc_type, exc_value, exc_tb)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2086, 
in _flush
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
flush_context.execute()
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 
373, in execute
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
rec.execute(self)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 
532, in execute
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     uow
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 
174, in save_obj
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     mapper, table, 
insert)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 
728, in _emit_insert_statements
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
execute(statement, multiparams)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, 
in execute
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     return 
meth(self, multiparams, params)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 323, 
in _execute_on_connection
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     return 
connection._execute_clauseelement(self, multiparams, params)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1010, 
in _execute_clauseelement
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     compiled_sql, 
distilled_params
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, 
in _execute_context
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     context)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1337, 
in _handle_dbapi_exception
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
util.raise_from_cause(newraise, exc_info)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 199, 
in raise_from_cause
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
reraise(type(exception), exception, tb=exc_tb)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1116, 
in _execute_context
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     context)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/sqlalchemy/dialects/mysql/mysqldb.py", 
line 95, in do_executemany
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     rowcount = 
cursor.executemany(statement, parameters)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 155, in 
executemany
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
self._get_db().encoding)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 190, in 
_do_execute_many
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     rows += 
self.execute(sql + postfix)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 134, in 
execute
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     result = 
self._query(query)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 282, in _query
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     conn.query(q)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 768, in 
query
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 929, in 
_read_query_result
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     result.read()
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1125, in 
read
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     first_packet = 
self.connection._read_packet()
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 893, in 
_read_packet
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
packet.check_error()
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 369, in 
check_error
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
err.raise_mysql_exception(self._data)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 120, in 
raise_mysql_exception
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     
_check_mysql_exception(errinfo)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource   File 
"/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 112, in 
_check_mysql_exception
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource     raise 
errorclass(errno, errorvalue)
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource DBDuplicateEntry: 
(pymysql.err.IntegrityError) (1062, u"Duplicate entry 
'2222:2222:2222:3c0f:f816:3eff:fe3b:91c7-a524ad8d-644d-4f89-ade8-' for key 
'PRIMARY'") [SQL: u'INSERT INTO ipallocations (port_id, ip_address, subnet_id, 
network_id) VALUES (%s, %s, %s, %s)'] [parameters: 
(('0879bbc4-d3d0-4b57-ae6a-382757bcb330', 
'2222:2222:2222:3c0f:f816:3eff:fe3b:91c7', 
u'a524ad8d-644d-4f89-ade8-960dcbd8fb72', 
u'26c63522-375a-49e8-8d37-bc0124c53076'), 
('0879bbc4-d3d0-4b57-ae6a-382757bcb330', 
'2222:2222:2222:3c0f:f816:3eff:fe3b:91c7', 
u'a524ad8d-644d-4f89-ade8-960dcbd8fb72', 
u'26c63522-375a-49e8-8d37-bc0124c53076'))]
  2015-08-13 06:34:08.370 8032 ERROR neutron.api.v2.resource 
  2015-08-13 06:34:08.475 INFO neutron.wsgi 
[req-bfcdb604-1491-4108-912e-b960b4329d5d admin admin] 192.168.2.2 - - 
[13/Aug/2015 06:34:08] "POST /v2.0/ports.json HTTP/1.1" 500 383 0.248965

  
  Creating a port without specifying the subnet works:
  vagrant@node1:~$ neutron port-create 26c63522-375a-49e8-8d37-bc0124c53076
  Created a new port:
  ....

  And creating a port when the subnet has a blank subnetpool_id works
  vagrant@node1:~$ neutron port-create private --fixed_ips list=true type=dict 
subnet_id=a397013b-0dd2-47c7-ac5d-4e05943373fc
  Created a new port:
  ...

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1484379/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to