yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #56252
[Bug 1621987] [NEW] Power state synchronization in compute is too agressive
Public bug reported:
By default, 1000 greenthreads can be used to synchronize the power state
of instances running on a compute node.
In the Ironic context, this means 1000 simultaneous HTTP requests can be
initiated to the Ironic API. Some of those requests can fail with the
following error:
ERROR nova.compute.manager [-] [instance: XXXXXXXXXXXXXX] Periodic sync_power_state task had an error while processing an instance.
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] Traceback (most recent call last):
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/compute/manager.py", line 6083, in _sync
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] query_driver_power_state_and_sync()
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/oslo_concurrency/lockutils.py", line 252, in inner
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] return f(*args, **kwargs)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/compute/manager.py", line 6080, in query_driver_power_state_and_sync
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] self._query_driver_power_state_and_sync(context, db_instance)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/compute/manager.py", line 6110, in _query_driver_power_state_and_sync
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] vm_instance = self.driver.get_info(db_instance)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/virt/ironic/driver.py", line 557, in get_info
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] node = _validate_instance_and_node(self.ironicclient, instance)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/virt/ironic/driver.py", line 126, in _validate_instance_and_node
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] return ironicclient.call("node.get_by_instance_uuid", instance.uuid)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/virt/ironic/client_wrapper.py", line 122, in call
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] return self._multi_getattr(client, method)(*args, **kwargs)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/v1/node.py", line 151, in get_by_instance_uuid
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] nodes = self._list(self._path(path), 'nodes')
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/common/base.py", line 119, in _list
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] resp, body = self.api.json_request('GET', url)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/common/http.py", line 351, in json_request
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] resp, body_iter = self._http_request(url, method, **kwargs)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/common/http.py", line 160, in wrapper
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] return func(self, url, method, **kwargs)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/common/http.py", line 296, in _http_request
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] resp = conn.getresponse()
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/usr/lib/python2.7/httplib.py", line 1051, in getresponse
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] response.begin()
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/usr/lib/python2.7/httplib.py", line 415, in begin
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] version, status, reason = self._read_status()
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/usr/lib/python2.7/httplib.py", line 379, in _read_status
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] raise BadStatusLine(line)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] BadStatusLine: ''
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX]
There should be a way to limit the number of simultaneous requests made
against the hypervisor to synchronize the instance power states so it's
not overwhelm.
** Affects: nova
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1621987
Title:
Power state synchronization in compute is too agressive
Status in OpenStack Compute (nova):
New
Bug description:
By default, 1000 greenthreads can be used to synchronize the power
state of instances running on a compute node.
In the Ironic context, this means 1000 simultaneous HTTP requests can
be initiated to the Ironic API. Some of those requests can fail with
the following error:
ERROR nova.compute.manager [-] [instance: XXXXXXXXXXXXXX] Periodic sync_power_state task had an error while processing an instance.
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] Traceback (most recent call last):
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/compute/manager.py", line 6083, in _sync
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] query_driver_power_state_and_sync()
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/oslo_concurrency/lockutils.py", line 252, in inner
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] return f(*args, **kwargs)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/compute/manager.py", line 6080, in query_driver_power_state_and_sync
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] self._query_driver_power_state_and_sync(context, db_instance)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/compute/manager.py", line 6110, in _query_driver_power_state_and_sync
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] vm_instance = self.driver.get_info(db_instance)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/virt/ironic/driver.py", line 557, in get_info
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] node = _validate_instance_and_node(self.ironicclient, instance)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/virt/ironic/driver.py", line 126, in _validate_instance_and_node
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] return ironicclient.call("node.get_by_instance_uuid", instance.uuid)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/nova/virt/ironic/client_wrapper.py", line 122, in call
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] return self._multi_getattr(client, method)(*args, **kwargs)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/v1/node.py", line 151, in get_by_instance_uuid
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] nodes = self._list(self._path(path), 'nodes')
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/common/base.py", line 119, in _list
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] resp, body = self.api.json_request('GET', url)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/common/http.py", line 351, in json_request
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] resp, body_iter = self._http_request(url, method, **kwargs)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/common/http.py", line 160, in wrapper
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] return func(self, url, method, **kwargs)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/opt/nova/local/lib/python2.7/site-packages/ironicclient/common/http.py", line 296, in _http_request
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] resp = conn.getresponse()
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/usr/lib/python2.7/httplib.py", line 1051, in getresponse
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] response.begin()
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/usr/lib/python2.7/httplib.py", line 415, in begin
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] version, status, reason = self._read_status()
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] File "/usr/lib/python2.7/httplib.py", line 379, in _read_status
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] raise BadStatusLine(line)
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX] BadStatusLine: ''
ERROR nova.compute.manager [instance: XXXXXXXXXXXXXX]
There should be a way to limit the number of simultaneous requests
made against the hypervisor to synchronize the instance power states
so it's not overwhelm.
To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1621987/+subscriptions
Follow ups