From fde9c5cc3064d0a92d4bb4c85f42454ce402462d Mon Sep 17 00:00:00 2001 From: Victoria Martinez de la Cruz Date: Mon, 10 Aug 2015 18:01:44 -0300 Subject: [PATCH] MariaDB datastore support Specification for the support addition for MariaDB in Trove Change-Id: I93e19e7567d7e9376dd45d69c79cff0e053d0ed4 Related: blueprint mariadb-datastore-support --- specs/liberty/mariadb-datastore-support.rst | 208 ++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 specs/liberty/mariadb-datastore-support.rst diff --git a/specs/liberty/mariadb-datastore-support.rst b/specs/liberty/mariadb-datastore-support.rst new file mode 100644 index 0000000..6e2d7c2 --- /dev/null +++ b/specs/liberty/mariadb-datastore-support.rst @@ -0,0 +1,208 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + + http://creativecommons.org/licenses/by/3.0/legalcode + + +========================= +MariaDB Datastore Support +========================= + +MariaDB [1]_ is a community-developed fork of MySQL licensed under GNU GPL. + +It aims to maintain high compatibility with MySQL, ensuring a "drop-in" +replacement capability with library binary equivalency and exact matching +with MySQL APIs and commands. + +https://blueprints.launchpad.net/trove/+spec/mariadb-datastore-support + +Problem Description +=================== + +MariaDB versioning follow the MySQL's versioning scheme up to version 5.5. +Thus, MariaDB 5.5 offers all of the MySQL 5.5 features. After the 5.5 version, +MariaDB developers decided to start a branch numbered 10, as an attempt +to make it clear that specific new features have been developed in MariaDB 10 +that are not included in MySQL 5.6. + +Currently, Trove has support for MySQL but not for MariaDB in particular. +This could be easily fixed for MariaDB 5.5 by just adapting the main +configuration file (my.cnf). +But in the case of MariaDB 10, this will no-longer be so straightforward. + +With this in mind, and the fact that several GNU/Linux distributions +are adopting MariaDB as the default MySQL implementation, it seems important +to add support for this datastore. + +Proposed Change +=============== + +To add support for this datastore, we will need the following: + + - Implement instance management for the datastore: + + - Launch new instance + - Terminate instance + - Reboot instance + - Resize instance + + - Implement user and database management for the datastore: + + - CRUD users + - CRUD databases + + - Add new elements in trove-integration project to enable the creation + of Ubuntu/Fedora images with MariaDB + +In this first approach, it makes sense to take profit of the MySQL Refactor +spec [2]_ and inherit as much as possible from the MySQL implementation, +providing a cleaner way to launch MariaDB 5.5 instances. + +In a follow up spec, differences in implementation will be tackled +(e.g. a GTID based replication strategy [3]_ for MariaDB 10 will be proposed) +and we would be able to provide support for MariaDB newer versions. + +Configuration +------------- + +A new configuration group for MariaDB and the different configuration options +specific to MariaDB have to be added to trove/common/cfg.py + +Some of the examples for the configuration options are: + + - tcp_ports + - udp_ports + - backup_strategy + - backup_incremental_strategy + - replication_strategy + - mount_point + - volume_support + - device_path + - backup_namespace + - restore_namespace + +Database +-------- + +None + +Public API +---------- + +None + +Public API Security +------------------- + +None + +Python API +---------- + +None + +CLI (python-troveclient) +------------------------ + +None + +Internal API +------------ + +None + +Guest Agent +----------- + +- This requires implementing the various datastore features for MariaDB + like Launch, Reboot, Terminate and Resize. + +- This requires implementing the various CRUD features for users and databases + for MariaDB. + +- This will include adding the following files specific to MariaDB under the + guestagent/datastore module: + + - manager.py + - service.py + +These changes will not affect the behavior of the guestagent or its interaction +with other components. + +Alternatives +------------ + +Do not support MariaDB. + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + - vkmc + +Milestones +---------- + +Liberty-3 + +Work Items +---------- + +- Update trove-integration to support MariaDB image creation + + - Create MariaDB elements for Ubuntu/Fedora + +- Update trove/common/cfg.py with the configuration options for MariaDB +- Add MariaDB configuration templates under templates/mariadb +- Add support for instance management features in + guestagent/experimental/mariadb/service.py [*] +- Add support for user and databases management features in + guestagent/experimental/mariadb/service.py [*] + +- Add unit and integration tests specific to MariaDB + +[*] This items rely on the MySQL Manager Refactor spec [2]_ and in the first +iteration it will only require inheriting from the MySQL existing +implementation. + +Upgrade Implications +==================== + +None + +Dependencies +============ + +MySQL Manager Refactor [2]_ + +Testing +======= + +- Unit tests will be added for MariaDB guestagent + +- Integration tests will be added for end-to-end feature testing + + - Create/Delete MariaDB instances + - Resize MariaDB instances + +Documentation Impact +==================== + +- Docs will be updated to indicate that: + + - Which MariaDB version is supported + - Trove capabilities for MariaDB datastore + - Instructions to build guest MariaDB images using trove-integration elements + +References +========== + +.. [1] https://mariadb.org/ + +.. [2] http://specs.openstack.org/openstack/trove-specs/specs/liberty/mysql-manager-refactor.html + +.. [3] https://mariadb.com/kb/en/mariadb/global-transaction-id/