Merge "Add deleted domain purging spec"

This commit is contained in:
Jenkins 2015-08-19 18:37:43 +00:00 committed by Gerrit Code Review
commit 4f3d054366
1 changed files with 137 additions and 0 deletions

View File

@ -0,0 +1,137 @@
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
http://creativecommons.org/licenses/by/3.0/legalcode
=============================
Deleted domains purging
=============================
https://blueprints.launchpad.net/designate/+spec/deleted-domains-purging
Implementation of a mechanism to routinely purge deleted domains from the
database.
Problem description
===================
Once deleted, domains are not removed immediatly from the database, mostly for
billing reasons. They are flagged as deleted in the "deleted" database column
and the "deleted_at" column is populated with a timestamp.
Currently, deleted domains are purged manually by running SQL queries against
the database.
The purging process impacts the database performance and requires manual
intervention.
Proposed change
===============
This change is to implement an automated purging mechanism for deleted domains.
It also provides "purge_domain" and "purge_domains" calls to purge domains using an
arbitrary criterion.
API Changes
-----------
Central API bumps to version 5.3 with the addition of the "purge_domains" call.
Zone Manager Changes
--------------------
Implement purging as a periodic task in Zone Manager using a "domain_purge"
plugin. The task will select a group of domains and send a RPC call to Central.
Central will run a query against the database to purge any deleted domain if
needed and log the number of purged domains.
Configuration paramenters:
Purging run frequency.
Default: hourly. Users might want to run it frequently to minimize the cycle duration.
Per-cycle purging limit.
Default: 100.
Time threshold.
Default: 7 days.
Configuration example:
.. code-block:: cfg
# Deleted domains purging
#------------------------
[zone_manager:domain_purge]
# How frequently to purge deleted domains, in seconds
#run_interval = 3600 # 1h
# How many deleted domains to be purged on each run
#limit = 100
# How old deleted domains should be to be purged, in seconds (deleted_at column)
#time_threshold = 604800 # 7 days
Central Changes
---------------
Implement purge_domains() method.
Storage Changes
---------------
Implement purge_domain(), purge_domains() method.
Update the _delete() method to allow forced hard delete.
Other Changes
-------------
Add a new task to setup.cfg and a new purge_domains policy item to policy.json
Add some test utility functions.
Alternatives
------------
1) No change: keeping the current manual process in place.
2) Deleting+purging the domains immediately.
3) Purging the domains on a record creation/deletion event.
4) Purging deleted domains with a single SQL query.
Further improvements
--------------------
Domains for purging are queried with a column comparison "deleted_at > $date"
Query performance can be improved by indexing the "deleted_at" column as a
B-Tree (supported by InnoDB and MyISAM):
https://dev.mysql.com/doc/refman/5.0/en/index-btree-hash.html
Implementation
==============
Assignee(s)
-----------
Primary assignee:
https://launchpad.net/~federico-ceratto
Milestones
----------
Target Milestone for completion:
Libery-3
Work Items
----------
* Implement purging
* Update documentation
* Implement benchmarks
Dependencies
============
TODO