Bug 1749962

Summary: [OSP15][Vnes]Bulk port creation time depends of the number of ports in the cluster
Product: Red Hat OpenStack Reporter: Candido Campos <ccamposr>
Component: openstack-neutronAssignee: Nate Johnston <njohnston>
Status: CLOSED DUPLICATE QA Contact: Candido Campos <ccamposr>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 15.0 (Stein)CC: amuller, chrisw, njohnston, scohen
Target Milestone: ---Flags: ccamposr: needinfo-
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2019-12-02 20:51:24 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Candido Campos 2019-09-06 22:42:28 UTC
Description of problem:


[Vnes]Bulk port creation time idepends or the number of ports in the cluster


(overcloud) [stack@undercloud-0 ~]$ time openstack port list | wc -l 
14018

real	0m38.881s
user	0m22.124s
sys	0m0.408s
(overcloud) [stack@undercloud-0 ~]$ 
(overcloud) [stack@undercloud-0 ~]$ 
(overcloud) [stack@undercloud-0 ~]$ 
(reverse-i-search)`port_': for i in $(seq 1 10);do time ./^Crt_creator 2000 7e8cb7c40c7547b0825901f7f948d9ff bfac6736-fb2f-4356-85a6-7e7ff68b41f4 f9d2b7b3-3c3f-4311-b6e7-e66a6ccffcf2 ; done 
(overcloud) [stack@undercloud-0 ~]$ time ./port_creator 20 7e8cb7c40c7547b0825901f7f948d9ff bfac6736-fb2f-4356-85a6-7e7ff68b41f4 f9d2b7b3-3c3f-4311-b6e7-e66a6ccffcf
Traceback (most recent call last):
  File "./port_creator", line 26, in <module>
    ports = neutron.create_port(bulk_port_req).get('ports')
  File "/usr/lib/python3.6/site-packages/neutronclient/v2_0/client.py", line 803, in create_port
    return self.post(self.ports_path, body=body)
  File "/usr/lib/python3.6/site-packages/neutronclient/v2_0/client.py", line 359, in post
    headers=headers, params=params)
  File "/usr/lib/python3.6/site-packages/neutronclient/v2_0/client.py", line 294, in do_request
    self._handle_fault_response(status_code, replybody, resp)
  File "/usr/lib/python3.6/site-packages/neutronclient/v2_0/client.py", line 269, in _handle_fault_response
    exception_handler_v20(status_code, error_body)
  File "/usr/lib/python3.6/site-packages/neutronclient/v2_0/client.py", line 93, in exception_handler_v20
    request_ids=request_ids)
neutronclient.common.exceptions.BadRequest: Invalid input for security_groups. Reason: 'f9d2b7b3-3c3f-4311-b6e7-e66a6ccffcf' is not a valid UUID.
Neutron server returns request_ids: ['req-ca0ef86b-e173-47b8-b7f5-91b85e18cea8']

real	0m3.574s
user	0m0.979s
sys	0m0.100s
(overcloud) [stack@undercloud-0 ~]$ time ./port_creator 20 7e8cb7c40c7547b0825901f7f948d9ff bfac6736-fb2f-4356-85a6-7e7ff68b41f4 f9d2b7b3-3c3f-4311-b6e7-e66a6ccffcf2

real	1m0.290s
user	0m1.011s
sys	0m0.108s
(overcloud) [stack@undercloud-0 ~]$ time ./port_creator 40 7e8cb7c40c7547b0825901f7f948d9ff bfac6736-fb2f-4356-85a6-7e7ff68b41f4 f9d2b7b3-3c3f-4311-b6e7-e66a6ccffcf2

real	1m57.048s
user	0m1.004s
sys	0m0.109s
(overcloud) [stack@undercloud-0 ~]$ time ./port_creator 40 7e8cb7c40c7547b0825901f7f948d9ff bfac6736-fb2f-4356-85a6-7e7ff68b41f4 f9d2b7b3-3c3f-4311-b6e7-e66a6ccffcf2

real	2m20.527s
user	0m1.048s
sys	0m0.092s


How reproducible:

#!/usr/bin/env python3.6
import sys

import os_client_config
from pprint import pprint


neutron = os_client_config.make_client('network', cloud='envvars')
nova = os_client_config.make_client('compute', cloud='envvars')

hypervisors = nova.hypervisors.list()

bulk_port_req = {'ports': []}
for hyper in hypervisors:
    if 'compute-0' in hyper.hypervisor_hostname:
        continue
    bulk_port_req['ports'].extend([{
        'binding:host_id': hyper.hypervisor_hostname,
        'project_id': sys.argv[2],
        'network_id': sys.argv[3],
        'device_owner': 'compute:kuryr',
        'admin_state_up': True,
        'name': 'kaboom',
        'security_groups': sys.argv[4].split(',')} for _ in range(int(sys.argv[1]))])

ports = neutron.create_port(bulk_port_req).get('ports')
#pprint(ports)





Additional info:

Bug 1504662 - [RFE] Fast bulk neutron port create/update operations

Comment 5 Nate Johnston 2019-12-02 20:51:24 UTC

*** This bug has been marked as a duplicate of bug 1703467 ***