
As suggested open openstack-discuss ML[1], some sphinxcontrib packages have not been updated for several years and might going to be maintained anymore. In tacker-specs repo, many diagrams are compiled with sphinxcontrib-seqdiag and sphinxcontrib-nwdiag. This update is to drop using the packages and add image files instead. The embedded source codes are remained as separated files and named as "*.diag". In addition, it includes two updates other than that. * usage of the dropped diagram support described in the `specs/template.rst` is also removed because it's no longer supported. * Upgrade the version of `pillow` to the latest 11.0.0 since installation is failed if the version is old. [1] https://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/message/4IID4UEXY4PJJGBTMFMTRYLKJIN4GOQ6/ Change-Id: I8cede6de0770b68a9984617643aa4aa81e47ba5c
6.1 KiB
Support PostgreSQL as Tacker DB backend
https://blueprints.launchpad.net/tacker/+spec/support-multidb-backend
This specification proposes tacker-db-manage improvements to support Multi-DB backends, especially PostgreSQL as Tacker DB backend.
Problem description
OpenStack Tacker has supported MySQL for database backends. When
initializing DB, tacker-db-manage
upgrades the database and
run any corresponding database migrations to the DB backend type.
$ /usr/local/bin/tacker-db-manage --config-file \
/etc/tacker/tacker.conf upgrade head
DevStack1 that includes a set of scripts and
utilities to develop OpenStack environments also support MySQL and
PostgreSQL. However, the current Tacker and
tacker-db-manage
does not support PostgreSQL and cause some
practical errors due to differences in the implementation between MySQL
and PostgreSQL.
Proposed change
This specification proposes the following changes.
- Support PostgreSQL by tacker-db-manage
- Support PostgreSQL by Tacker
- Add configuration to set PostgreSQL as Tacker DB backend and PostgreSQL install manuals to Tacker Installation Guide
Support PostgreSQL by tacker-db-manage
Add initialization functions for PostgreSQL and adapt to the differences in the implementation between MySQL and PostgreSQL. These functions will be implemented by changing parameters or using branching process in tacker-db-manage.
The following items will be fixed and added for PostgreSQL.
Problems | Implementations for PostgreSQL |
---|---|
Boolean Type Error (MySQL use tinyint(1) as
Boolean.) |
Replace smallint(1). |
Text Type Error (PostgreSQL does not set upper value in TEXT(length).) | Replace VARCHAR(length). |
MEDIUMTEXT could not be used in PostgreSQL. | Replace TEXT. |
PostgreSQL ENUM type requires a name. | Add a name attribute (e.g name=`verbosity`). |
Json common functions (e.g, json_extract(), json_length()) could not be used in PostgreSQL. | Replace decode(), json_array_length() and json search methods. |
SQL words such as CHANGE and GENERATED could not be used in PostgreSQL. | Replace other SQL commands. |
ifnull() could not be used in PostgreSQL. | Replace coalesce(). |
index auth_url does not exist in PostgreSQL. |
Replace op.drop_constraint(). |
Note
Tacker provides VNF version upgrading tools from v1 API to v2 API by
tacker-db-manage
2. However, PostgreSQL
environments provided in this specification do not support VNF version
upgrading functions.
Support PostgreSQL by Tacker
To support PostgreSQL, Tacker also needs to be fixed. These functions will be implemented by changing parameters or using branching process in Tacker. The following items will be fixed and added.
Problems | Implementations for PostgreSQL |
---|---|
jsonutils.dump_as_bytes() converts json to binary data. | Use jsonutils.dumps(value). |
<class dict> initialization is different (NULL and empty). | Support empty dict. |
Type comparison errors in deleted column. |
Fix the type of comparison destinations. |
Add configuration to set PostgreSQL as Tacker DB backend
The configuration of PostgreSQL (postgresql.conf) and Tacker (tacker.conf) also need to be changed when Tacker uses PostgreSQL as a DB backend.
- postgresql.conf
$ vi /etc/postgresql/12/main/postgresql.conf
bytea_output = 'escape'
- tacker.conf
$ vi /etc/tacker/tacker.conf
[database]
connection = postgresql://tacker:<POSTGRES_PASSWORD>@<POSTGRES_IP>/tacker?client_encoding=utf8
Note
Since users need to set the above configurations by themselves when they use PostgreSQL, example configurations for PostgreSQL will be described in the Installation Guide.
Flow of initializing PostgreSQL as Tacker DB backend
The following sequence diagram describes initializing PostgreSQL as Tacker DB backend.
- The Client creates Tacker DB and user in PostgreSQL.
- The Client requests Tacker to execute tacker-db-manage for PostgreSQL.
- Tacker executes tacker-db-manage.
- Tacker-db-manage updates Tacker DB in PostgreSQL.
Data model impact
None
REST API impact
None
Security impact
None
Notifications impact
None
Other end user impact
None
Performance Impact
None
Other deployer impact
Deployer need to set the usage of PostgreSQL from tacker.conf.
Developer impact
When adding new tables to the Tacker DB in the future, developer should support multi db such as MySQL and PostgreSQL.
Implementation
Assignee(s)
- Primary assignee:
-
Yuta Kazato <yuta.kazato.nw@hco.ntt.co.jp>
- Other contributors:
-
Shun Higuchi <higuchis@intellilink.co.jp>
Reina Yoshitani <yoshitanir@intellilink.co.jp>
Tetsuro Kaneko <kaneko_te@tdc.co.jp>
Work Items
- Add PostgreSQL migration functions to tacker-db-manage.
- Add PostgreSQL migration functions to Tacker.
- Add PostgreSQL install manuals to Tacker Installation Guide.
Dependencies
None
Testing
Unit test cases for tacker-db-manage and Tacker will be used.
Documentation Impact
PostgreSQL configuration in Tacker Installation Guide will be added.