guestagent: implement 'rebuild' for postgres manager
This is almost but not quite a copy of the same function from mysql_common. Story: 2011172 Change-Id: I232f53bdbba0d0a17dfda395b89300419879575e
This commit is contained in:
parent
7358330c14
commit
b1c74bf6bf
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Rebuild of postgresql database instances is now supported. Older postgresql
|
||||||
|
instances can be rebuilt as long as the target guest image is built from this
|
||||||
|
release or later.
|
@ -266,3 +266,38 @@ class PostgresManager(manager.Manager):
|
|||||||
except exception.PollTimeOut:
|
except exception.PollTimeOut:
|
||||||
raise exception.TroveError(
|
raise exception.TroveError(
|
||||||
f"Timeout occurred waiting for wal offset to change to {txn}")
|
f"Timeout occurred waiting for wal offset to change to {txn}")
|
||||||
|
|
||||||
|
def rebuild(self, context, ds_version, config_contents=None,
|
||||||
|
config_overrides=None):
|
||||||
|
"""Restore datastore service after instance rebuild."""
|
||||||
|
LOG.info("Starting to restore database service")
|
||||||
|
self.status.begin_install()
|
||||||
|
|
||||||
|
mount_point = CONF.get(CONF.datastore_manager).mount_point
|
||||||
|
data_dir = mount_point + '/data'
|
||||||
|
operating_system.ensure_directory(data_dir,
|
||||||
|
user=self.app.database_service_uid,
|
||||||
|
group=self.app.database_service_gid,
|
||||||
|
as_root=True)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Prepare postgres configuration
|
||||||
|
LOG.debug('Preparing database configuration')
|
||||||
|
self.app.configuration_manager.reset_configuration(config_contents)
|
||||||
|
|
||||||
|
# note that this is a different 'datadir' from the one above.
|
||||||
|
# The actual postgres data is in the 'pgdata' subdir of the
|
||||||
|
# volume mount.
|
||||||
|
self.app.set_data_dir(self.app.datadir)
|
||||||
|
self.app.update_overrides(config_overrides)
|
||||||
|
|
||||||
|
# Start database service.
|
||||||
|
command = f"postgres -c config_file={service.CONFIG_FILE}"
|
||||||
|
self.app.start_db(ds_version=ds_version, command=command)
|
||||||
|
except Exception as e:
|
||||||
|
LOG.error(f"Failed to restore database service after rebuild, "
|
||||||
|
f"error: {str(e)}")
|
||||||
|
self.prepare_error = True
|
||||||
|
raise
|
||||||
|
finally:
|
||||||
|
self.status.end_install(error_occurred=self.prepare_error)
|
||||||
|
Loading…
Reference in New Issue
Block a user