yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #85450
[Bug 1918565] [NEW] quota: invalid JSON for reservation value when positive
Public bug reported:
# High level description
When a resource (e.g. port) is requested, QuotaDetail returns invalid
JSON until all resources of that type are created (e.g. all ports
requested are now created and there is no ongoing request to create any
other port). The invalid JSON is only for the "reserved" key, which
returns a string instead of an integer.
This is incompatible with what the API is supposed to return:
https://docs.openstack.org/api-ref/network/v2/index.html?expanded=show-quota-details-for-a-tenant-detail
"The value for each resource type is itself an object (the quota set)
containing the quota’s used, limit and reserved integer values."
It is problematic in the context of gophercloud, which expect an integer to be returned, and not a string:
https://github.com/gophercloud/gophercloud/blob/cd9c207e93f4f76af2c0a06c6d449ab342bfbe56/openstack/networking/v2/extensions/quotas/results.go#L125
# Pre-conditions
* Neutron QuotaDB driver is used.
* Resources have to be under creation (e.g. ports)
# Step-by-step reproduction steps
* Get a token from Keystone:
$ openstack token issue
And export its ID as $token.
* Run this loop:
$ while true; do curl -H "X-Auth-Token: $token" <your-neutron-endpoint>:9696/v2.0/quotas/<your-project-id>/details.json | jq '.'|& tee -a logs; done
* In another terminal, run this command:
$ tail -f logs|grep 'reserved": "'
* Now, create ports (e.g. 3 ports)
$ openstack port create (...)
* Expected output
{
"quota": {
"port": {
"limit": 500,
"used": 0,
"reserved": 3
},
...
}
Then:
{
"quota": {
"port": {
"limit": 500,
"used": 1,
"reserved": 2
},
...
}
Then:
{
"quota": {
"port": {
"limit": 500,
"used": 2,
"reserved": 1
},
...
}
And then:
{
"quota": {
"port": {
"limit": 500,
"used": 3,
"reserved": 0
},
...
}
* Actual output
{
"quota": {
"port": {
"limit": 500,
"used": 0,
"reserved": "3"
},
...
}
Then:
{
"quota": {
"port": {
"limit": 500,
"used": 1,
"reserved": "2"
},
...
}
Then:
{
"quota": {
"port": {
"limit": 500,
"used": 2,
"reserved": "1"
},
...
}
And then:
{
"quota": {
"port": {
"limit": 500,
"used": 3,
"reserved": 0 // an integer!
},
...
}
# Version:
Master and stable branches.
RHEL 8.3
TripleO based deployment (OSP 17)
# Environment:
OSP17 deployed in standalone, OVN backend.
# Perceived severity:
Workaround is possible but currently blocking gophercloud to be working for QuotaDetails.
** Affects: neutron
Importance: Undecided
Status: New
** Summary changed:
- quota: invalid JSON for reservation data
+ quota: invalid JSON for reservation value when positive
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1918565
Title:
quota: invalid JSON for reservation value when positive
Status in neutron:
New
Bug description:
# High level description
When a resource (e.g. port) is requested, QuotaDetail returns invalid
JSON until all resources of that type are created (e.g. all ports
requested are now created and there is no ongoing request to create
any other port). The invalid JSON is only for the "reserved" key,
which returns a string instead of an integer.
This is incompatible with what the API is supposed to return:
https://docs.openstack.org/api-ref/network/v2/index.html?expanded=show-quota-details-for-a-tenant-detail
"The value for each resource type is itself an object (the quota set)
containing the quota’s used, limit and reserved integer values."
It is problematic in the context of gophercloud, which expect an integer to be returned, and not a string:
https://github.com/gophercloud/gophercloud/blob/cd9c207e93f4f76af2c0a06c6d449ab342bfbe56/openstack/networking/v2/extensions/quotas/results.go#L125
# Pre-conditions
* Neutron QuotaDB driver is used.
* Resources have to be under creation (e.g. ports)
# Step-by-step reproduction steps
* Get a token from Keystone:
$ openstack token issue
And export its ID as $token.
* Run this loop:
$ while true; do curl -H "X-Auth-Token: $token" <your-neutron-endpoint>:9696/v2.0/quotas/<your-project-id>/details.json | jq '.'|& tee -a logs; done
* In another terminal, run this command:
$ tail -f logs|grep 'reserved": "'
* Now, create ports (e.g. 3 ports)
$ openstack port create (...)
* Expected output
{
"quota": {
"port": {
"limit": 500,
"used": 0,
"reserved": 3
},
...
}
Then:
{
"quota": {
"port": {
"limit": 500,
"used": 1,
"reserved": 2
},
...
}
Then:
{
"quota": {
"port": {
"limit": 500,
"used": 2,
"reserved": 1
},
...
}
And then:
{
"quota": {
"port": {
"limit": 500,
"used": 3,
"reserved": 0
},
...
}
* Actual output
{
"quota": {
"port": {
"limit": 500,
"used": 0,
"reserved": "3"
},
...
}
Then:
{
"quota": {
"port": {
"limit": 500,
"used": 1,
"reserved": "2"
},
...
}
Then:
{
"quota": {
"port": {
"limit": 500,
"used": 2,
"reserved": "1"
},
...
}
And then:
{
"quota": {
"port": {
"limit": 500,
"used": 3,
"reserved": 0 // an integer!
},
...
}
# Version:
Master and stable branches.
RHEL 8.3
TripleO based deployment (OSP 17)
# Environment:
OSP17 deployed in standalone, OVN backend.
# Perceived severity:
Workaround is possible but currently blocking gophercloud to be working for QuotaDetails.
To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1918565/+subscriptions
Follow ups