
Specs repos now build with tox -e docs and this fails since warnings are treated as errors. Fix issues, see below for details. tox -e docs fails with: 1) queens/remove-pool-group-from-zaqar.rst:402: WARNING: Inline emphasis start-string without end-string. Fix RST syntax. 2) queens/support-md5-of-body.rst:: WARNING: document isn't included in any toctree Include document in toctree. 3) rocky/queue-filter-support.rst:38: WARNING: Literal block expected; none found. Fixed RST. 4) rocky/remove-format-constraint-of-client-id.rst:13: WARNING: Title overline too short. Fixed RST. 5) rocky/remove-format-constraint-of-client-id.rst:37: ERROR: Unexpected indentation. Fixed RST. 6) rocky/subscription-filtering-tags.rst:82: WARNING: Bullet list ends without a blank line; unexpected unindent. Fixed RST. Change-Id: Ide32b348d68e35f8f531c30ddae680d085553b68
11 KiB
Remove pools group from Zaqar
https://blueprints.launchpad.net/zaqar/+spec/remove-pool-group-from-zaqar
Remove pool group from pool and flavor resource.
Problem description
Currently pool group is used in pool and flavor resource, but the pool group only supports a 1:1 mapping with flavor. So it's not necessary to keep it since we can map 1 flavor : N pool directly. Another issue is currently there is no API to handle the pool group resource, which is very annoying to maintain by operators.
For making a clarification to user, this bp proposes to remove useless pool group from Zaqar, just keeps the pool resource.
For backward compatibility, we will split this work into two steps:
- In Queens, we support the old way to use pool_group and the new way without it in Flavor both. The pool_group will be marked to let users know it will be useless soon and remove in R release.
- In Rocky, we will remove the pool_group totally and only keep the new way in Flavor and Pool.
Proposed change
- Modify pool and flavor operation API:
- Remove group from flavor operation API: like creat, update, show, list.
- Remove group from pool operation API: like creat, update, show, list.
..note:
This changes isn't going to happen in Queens release for backward
compatibility, we keep the pool_group this circle and mark it will be
useless in Zaqar log and remove the pool group totally in R release.
Modify the related logic codes about group in the zaqar server:
For example, now in the creation of the queue, first we find all the pools base on group, and then select the appropriate pool (pool = select.weighted (pools)) to create the queue.
We modify as follows: Find all the pools base on flavor, and then select the appropriate pool to create a queue.
etc.
Change the Data model of flavor and pool resources, detail see Data model impact.
Modify the related logic codes about group in the zaqar client:
- openstack messaging flavor create
- openstack messaging flavor update
- openstack messaging pool create
- openstack messaging pool update
..note:
Like the changes in Zaqar APIs, this change is also going to do in R
release.
Drawbacks
None
Alternatives
None
Data model impact
For sqlalchemy:
Drop table PoolGroup in R.
Modify Flavors table:
- Discard pool_group field, but do not remove the field in Q in order to be
-
compatible with the latter : CREATE TABLE Flavors ( name varchar(64) NOT NULL, project varchar(64) DEFAULT NULL, pool_group varchar(64) NOT NULL, capabilities text, PRIMARY KEY (name), ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Modify Pools table:
- Discard group field, but do not remove the field in Q in order to be
-
compatible with the latter; Add flavor field, this flavor field equals name field of the flavor: CREATE TABLE Pools ( name varchar(64) NOT NULL, group varchar(64) DEFAULT NULL, uri varchar(255) NOT NULL, weight int(11) NOT NULL, options text, flavor varchar(64) DEFAULT NULL, PRIMARY KEY (name), UNIQUE KEY uri (uri), CONSTRAINT Pools_flavor_fk FOREIGN KEY (flavor) REFERENCES fla (name) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Migration strategy for Flavor and Pools table:
- Query all the Pools, and then process every record as follows:
- Find Flavors.name where Flavors.pool_group = Pools.group
- Modify Pools.flavor = Flavors.name
- For mongodb:
- The upgrade strategy is similar. We need to introduce a script to implement the data migration.
..note:
Since we decide to remove the pool_group totally in Rocky, that then we need
to provide a script to help users to migrate the data and remove the
pool_group column from db table.
REST API impact
1. Create flavor API The Request JSON when create flavor:
PUT: /v2/flavors/{flavor_name}
{
"pool_group": "testgroup", # remove pool_group in Rocky release
"pool_list": [pool1, pool2]
}
The response JSON when Create flavor:
Normal response codes: 201
Error response codes:
•BadRequest (400)
•Unauthorized (401)
•Forbidden (403)
2. Update flavor API The Request JSON when update flavor:
PATCH: /v2/flavors/{flavor_name}
{
"pool_group": "testgroup", # remove pool_group in Rocky release
"pool_list": [pool1, pool2, pool3]
}
The response JSON when update flavor:
{
"href": "/v2/flavors/testflavor",
"pool_group": "testgroup",# remove pool_group in Rocky release
"name": "testflavor",
"capabilities": [
"FIFO",
"CLAIMS",
"DURABILITY",
"AOD",
"HIGH_THROUGHPUT"
],
"pool_list": [pool1, pool2, pool3]
}
Normal response codes: 200
Error response codes:
•BadRequest (400)
•Unauthorized (401)
•Forbidden (403)
•Not Found (404)
•ServiceUnavailable (503)
3. Shows details for a flavor API The response JSON when show details flavor:
GET: /v2/flavors/{flavor_name}
{
"href": "/v2/flavors/testflavor",
"pool_group": "testgroup", # remove pool_group in Rocky release
"capabilities": [
"FIFO",
"CLAIMS",
"DURABILITY",
"AOD",
"HIGH_THROUGHPUT"
],
"pool_list": [pool1, pool2],
"name": "testflavor"
}
The response JSON when show details flavor:
Normal response codes: 200
Error response codes:
•BadRequest (400)
•Unauthorized (401)
•Forbidden (403)
•Not Found (404)
•ServiceUnavailable (503)
4. List flavor API The response JSON when list flavors:
GET: /v2/flavors
{
"flavors": [
{
"href": "/v2/flavors/test_flavor1",
"pool_group": "testgroup", # remove pool_group in Rocky release
"name": "test_flavor1",
"pool": "testgroup", # remove pool_group in Rocky release
"pool_list": [pool1, pool2]
},
{
"href": "/v2/flavors/test_flavor2",
"pool_group": "testgroup", # remove pool_group in Rocky release
"name": "test_flavor2",
"pool": "testgroup", # remove pool_group in Rocky release
"pool_list": [pool3, pool4]
}
],
"links": [
{
"href": "/v2/flavors?marker=test_flavor2",
"rel": "next"
}
]
}
The response JSON when list flavors:
Normal response codes: 200
Error response codes:
•Unauthorized (401)
•Forbidden (403)
5. Create pools API The Request JSON when create pools:
PUT: /v2/pools/{pool_name}
{
"weight": 100,
"uri": "mongodb://127.0.0.1:27017",
"options":{
"max_retry_sleep": 1
},
"group": "poolgroup", # remove pool_group in Rocky release
"flavor": "testflavor"
}
The response JSON when Create pools:
Normal response codes: 201
Error response codes:
•BadRequest (400)
•Unauthorized (401)
••Conflict (409)
6. Update pools API The Request JSON when update pools:
PATCH: /v2/pools/{pool_name}
{
"weight": 60,
"uri": "mongodb://127.0.0.1:27017",
"options":{
"max_retry_sleep": 1
},
"group": "newpoolgroup", # remove pool_group in Rocky release
"flavor": "testflavor1"
}
The response JSON when update pools:
{
"href": "/v2/pools/test_pool",
"group": "newpoolgroup", # remove pool_group in Rocky release
"name": "test_pool",
"weight": 60,
"uri": "mongodb://127.0.0.1:27017",
"flavor": "testflavor1"
}
Normal response codes: 200
Error response codes:
•BadRequest (400)
•Unauthorized (401)
•Not Found (404)
•ServiceUnavailable (503)
7. Shows details for a pool API The response JSON when show details pool:
GET: /v2/pools/{pool_name}
{
"href": "/v2/pools/test_pool",
"group": "testpoolgroup", # remove pool_group in Rocky release
"flavor": "flavor1",
"name": "test_pool",
"weight": 100,
"uri": "mongodb://127.0.0.1:27017"
}
The response JSON when show details pool:
Normal response codes: 200
Error response codes:
•BadRequest (400)
•Unauthorized (401)
•ServiceUnavailable (503)
8. List pools API The response JSON when list pools:
GET: /v2/pools
{
"pools": [
{
"href": "/v2/pools/test_pool1",
"group": "poolgroup", # remove pool_group in Rocky release
"flavor": "flavor1",
"name": "test_pool1",
"weight": 60,
"uri": "mongodb://192.168.1.10:27017"
},
{
"href": "/v2/pools/test_pool2",
"group": "poolgroup", # remove pool_group in Rocky release
"flavor": "flavor1",
"name": "test_pool2",
"weight": 40,
"uri": "mongodb://192.168.1.20:27017"
}
],
"links": [
{
"href": "/v2/pools?marker=test_pool2",
"rel": "next"
}
]
}
The response JSON when list pools:
Normal response codes: 200
Error response codes:
•Unauthorized (401)
•Not Found (404)
We use the v2 interface, just add pool_list in the flavor API and add the flavor in the pool API. This can be compatible with the old way.
- Old Way:
- configure group in pool API and in flavor API;
- New Way:
configure pool_list in flavor API
add a pool to flavor:
- method one: update pool_list in flavor API
- method two: config a pool with the flavor in pool API.
Implementation
Assignee(s)
- Primary assignee:
-
wanghao<sxmatch1986@gmail.com>
- Secondary assignee:
-
gengchc2 <geng.changcai2@zte.com.cn>
Milestones
- Target Milestone for completion:
-
Queens and Rocky
Work Items
- Modify pool and flavor operation APIs.
- Modify the related logic codes about group in the zaqar server.
- Modify the Data model about Flavors , Pools and PoolGroup.
- Modify the related logic codes about group in the zaqar client.
Dependencies
None
Testing
Both unit and Tempest tests need to be created to cover the code change.
Documentation Impact
The Zaqar API documentation will need to be updated to reflect the REST API changes.
References
None