PostgreSQL Configuration Groups

Implement configuration groups support for the PostgreSQL datastore.
Also added Appendix section for technical details to keep the
specification section more concise.

Change-Id: Ifc38043aca4b2596dfc7bcccba4a4b67e4586892
Implements-Blueprint: postgres-configuration-groups
This commit is contained in:
Petr Malik 2015-11-16 12:16:50 -05:00 committed by Doug Shelley
parent 1b06160ed9
commit 906089ea44
7 changed files with 407 additions and 0 deletions

View File

@ -544,3 +544,7 @@ References
.. [2] https://bugs.launchpad.net/trove/+bug/1487233
Appendix
========
None

View File

@ -239,3 +239,9 @@ References
.. [4] DB2 backing up to named pipe: https://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.admin.ha.doc/doc/t0006202.html
.. [5] DB2 Restore procedure: http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.ha.doc/doc/c0006237.html
Appendix
========
None

View File

@ -132,3 +132,8 @@ References
.. [1] `Nova's migration commit <https://review.openstack.org/#/c/101901/>`_.
.. [2] `oslo_db configuration options <http://docs.openstack.org/developer/oslo.db/opts.html#database?>`_.
.. [3] `Associated bug on Launchpad <https://bugs.launchpad.net/trove/+bug/1481493>`_.
Appendix
========
None

View File

@ -295,3 +295,7 @@ References
.. [3] http://www.postgresql.org/docs/current/static/app-pgbasebackup.html
Appendix
========
N/A

View File

@ -0,0 +1,376 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
Sections of this template were taken directly from the Nova spec
template at:
https://github.com/openstack/nova-specs/blob/master/specs/template.rst
=============================
Postgres Configuration Groups
=============================
Launchpad Blueprint:
https://blueprints.launchpad.net/trove/+spec/postgres-configuration-groups
Problem Description
===================
The Postgres guestagent currently does not support configuration groups.
Proposed Change
===============
The patch set will implement configuration groups for Postgres 9.3 or above.
Postgres stores its configuration [1]_ in 'postgresql.conf' file.
Configuration directives have key-value format:
"keyword = value"
In addition to the 'postgresql.conf' file already mentioned,
PostgreSQL uses two other configuration files
('pg_hba.conf' and 'pg_ident.conf'), which control client authentication.
These will be written directly by the guest-agent and will not
be exposed via the configuration groups mechanism.
Configuration changes can be loaded on the fly without interrupting
any open connections by the special 'pg_reload_conf' call [2]_.
Note that Postgres also has a 'SET' command, but it only affects the current
session values.
Most configuration properties will be available via configuration groups.
Some, however, do not make sense in the Trove context.
These include (will be documented in the configuration template):
- guestagent specific (e.g. file paths, passwords, file access rules)
- items that Trove needs to control (replication/clustering/log properties)
See `Available Configuration Properties`_ for the full list of supported
options.
Configuration
-------------
None
Database
--------
None
Public API
----------
None
Public API Security
-------------------
None
Python API
----------
None
CLI (python-troveclient)
------------------------
None
Internal API
------------
CLI (python-troveclient)
------------------------
This work will enable the following client commands:
* configuration-attach
* configuration-create
* configuration-default
* configuration-delete
* configuration-detach
* configuration-instances
* configuration-list
* configuration-parameter-list
* configuration-parameter-show
* configuration-patch
* configuration-show
* configuration-update
Guest Agent
-----------
* Implement *update_overrides* and *apply_overrides* in
the *manager* and *service* modules.
* A configuration template and validation rules will with changes noted in
`Available Configuration Properties`_ will be provided.
The existing 'PropertiesCodec' implementation will be reused to handle
text-file operations.
Configuration overrides will be implemented using the 'OneFileOverrideStrategy'
of the guestagent configuration manager.
Alternatives
------------
None
Implementation
==============
Assignee(s)
-----------
Petr Malik <pmalik@tesora.com>
Milestones
----------
Mitaka
Work Items
----------
All changes will be done in the context of a single task.
1. Implement configuration-related manager API calls:
.. code-block:: python
def update_overrides(self, context, overrides, remove=False)
def apply_overrides(self, context, overrides)
Upgrade Implications
====================
None
Dependencies
============
None
Testing
=======
The change is largely covered by the existing configuration tests.
Unit tests will be added to validate any Postgres-specific codepaths.
A 'postgres_helper' will be contributed to the scenario tests to
enable configuration coverage on this datastore.
Documentation Impact
====================
The datastore documentation should be updated to reflect the enabled features.
References
==========
.. [1] Documentation on Postgres configuration: http://www.postgresql.org/docs/9.3/static/runtime-config.html
.. [2] Notes on Postgres system administration functions: http://www.postgresql.org/docs/9.3/static/functions-admin.html
Appendix
========
Available Configuration Properties
----------------------------------
The properties configurable by the user via the Trove API:
- max_connections
- superuser_reserved_connections
- bonjour
- bonjour_name
- authentication_timeout
- password_encryption
- db_user_namespace
- tcp_keepalives_idle
- tcp_keepalives_interval
- tcp_keepalives_count
- shared_buffers
- huge_pages
- temp_buffers
- max_prepared_transactions
- work_mem
- maintenance_work_mem
- autovacuum_work_mem
- max_stack_depth
- dynamic_shared_memory_type
- temp_file_limit
- max_files_per_process
- vacuum_cost_delay
- vacuum_cost_page_hit
- vacuum_cost_page_miss
- vacuum_cost_page_dirty
- vacuum_cost_limit
- bgwriter_delay
- bgwriter_lru_maxpages
- bgwriter_lru_multiplier
- effective_io_concurrency
- max_worker_processes
- fsync
- synchronous_commit
- wal_sync_method
- full_page_writes
- wal_log_hints
- wal_buffers
- wal_writer_delay
- commit_delay
- commit_siblings
- checkpoint_segments
- checkpoint_timeout
- checkpoint_completion_target
- checkpoint_warning
- wal_keep_segments
- wal_sender_timeout
- synchronous_standby_names
- vacuum_defer_cleanup_age
- hot_standby
- max_standby_archive_delay
- max_standby_streaming_delay
- wal_receiver_status_interval
- hot_standby_feedback
- wal_receiver_timeout
- enable_bitmapscan
- enable_hashagg
- enable_hashjoin
- enable_indexscan
- enable_indexonlyscan
- enable_material
- enable_mergejoin
- enable_nestloop
- enable_seqscan
- enable_sort
- enable_tidscan
- seq_page_cost
- random_page_cost
- cpu_tuple_cost
- cpu_index_tuple_cost
- cpu_operator_cost
- effective_cache_size
- geqo
- geqo_threshold
- geqo_effort
- geqo_pool_size
- geqo_generations
- geqo_selection_bias
- geqo_seed
- default_statistics_target
- constraint_exclusion
- cursor_tuple_fraction
- from_collapse_limit
- join_collapse_limit
- log_truncate_on_rotation
- log_rotation_age
- log_rotation_size
- client_min_messages
- log_min_messages
- log_min_error_statement
- log_min_duration_statement
- debug_print_parse
- debug_print_rewritten
- debug_print_plan
- debug_pretty_print
- log_checkpoints
- log_connections
- log_disconnections
- log_duration
- log_error_verbosity
- log_hostname
- log_line_prefix
- log_lock_waits
- log_statement
- log_temp_files
- log_timezone
- track_activities
- track_counts
- track_io_timing
- track_functions
- track_activity_query_size
- log_parser_stats
- log_planner_stats
- log_executor_stats
- log_statement_stats
- autovacuum
- log_autovacuum_min_duration
- autovacuum_max_workers
- autovacuum_naptime
- autovacuum_vacuum_threshold
- autovacuum_analyze_threshold
- autovacuum_vacuum_scale_factor
- autovacuum_analyze_scale_factor
- autovacuum_freeze_max_age
- autovacuum_multixact_freeze_max_age
- autovacuum_vacuum_cost_delay
- autovacuum_vacuum_cost_limit
- search_path
- default_tablespace
- temp_tablespaces
- check_function_bodies
- default_transaction_isolation
- default_transaction_read_only
- default_transaction_deferrable
- session_replication_role
- statement_timeout
- lock_timeout
- vacuum_freeze_min_age
- vacuum_freeze_table_age
- vacuum_multixact_freeze_min_age
- vacuum_multixact_freeze_table_age
- bytea_output
- xmlbinary
- xmloption
- datestyle
- intervalstyle
- timezone
- timezone_abbreviations
- extra_float_digits
- client_encoding
- lc_messages
- lc_monetary
- lc_numeric
- lc_time
- default_text_search_config
- deadlock_timeout
- max_locks_per_transaction
- max_pred_locks_per_transaction
- array_nulls
- backslash_quote
- default_with_oids
- escape_string_warning
- lo_compat_privileges
- quote_all_identifiers
- sql_inheritance
- standard_conforming_strings
- synchronize_seqscans
- transform_null_equals
- exit_on_error
- restart_after_crash
Guestagent-controlled properties:
- data_directory
- hba_file
- ident_file
- external_pid_file
- listen_addresses
- port
- unix_socket_directories
- unix_socket_group
- unix_socket_permissions
- wal_level
- archive_mode
- archive_command
- archive_timeout
- log_destination
- logging_collector
- log_directory
- log_filename
- log_file_mode
- update_process_title

View File

@ -190,3 +190,9 @@ References
==========
.. [1] https://wiki.openstack.org/wiki/Cinder-multi-backend
Appendix
========
None

View File

@ -244,3 +244,9 @@ references are unavailable. Examples of what you could include are [1]_,
.. [3] Links to relevant research, if appropriate
.. [4] Anything else you feel it is worthwhile to refer to
Appendix
========
Any additional technical information and data.