本文整理汇总了Python中barman.hooks.HookScriptRunner.env_from_wal_info方法的典型用法代码示例。如果您正苦于以下问题:Python HookScriptRunner.env_from_wal_info方法的具体用法?Python HookScriptRunner.env_from_wal_info怎么用?Python HookScriptRunner.env_from_wal_info使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类barman.hooks.HookScriptRunner
的用法示例。
在下文中一共展示了HookScriptRunner.env_from_wal_info方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_wal_info_corner_cases
# 需要导入模块: from barman.hooks import HookScriptRunner [as 别名]
# 或者: from barman.hooks.HookScriptRunner import env_from_wal_info [as 别名]
def test_wal_info_corner_cases(self, command_mock):
# BackupManager mock
backup_manager = build_backup_manager(name='test_server')
backup_manager.config.pre_test_hook = 'not_existent_script'
# WalFileInfo mock
timestamp = time.time()
wal_info = MagicMock(name='wal_info')
wal_info.name = 'XXYYZZAABBCC'
wal_info.size = 1234567
wal_info.time = timestamp
wal_info.compression = None
wal_info.fullpath.return_value = '/incoming/directory'
# the actual test
script = HookScriptRunner(backup_manager, 'test_hook', 'pre')
script.env_from_wal_info(wal_info, '/somewhere', Exception('BOOM!'))
expected_env = {
'BARMAN_PHASE': 'pre',
'BARMAN_VERSION': version,
'BARMAN_SERVER': 'test_server',
'BARMAN_CONFIGURATION': 'build_config_from_dicts',
'BARMAN_HOOK': 'test_hook',
'BARMAN_SEGMENT': 'XXYYZZAABBCC',
'BARMAN_FILE': '/somewhere',
'BARMAN_SIZE': '1234567',
'BARMAN_TIMESTAMP': str(timestamp),
'BARMAN_COMPRESSION': '',
'BARMAN_RETRY': '0',
'BARMAN_ERROR': 'BOOM!',
}
script.run()
assert command_mock.call_count == 1
assert command_mock.call_args[1]['env_append'] == expected_env
示例2: test_wal_info_corner_cases
# 需要导入模块: from barman.hooks import HookScriptRunner [as 别名]
# 或者: from barman.hooks.HookScriptRunner import env_from_wal_info [as 别名]
def test_wal_info_corner_cases(self, command_mock):
# BackupManager mock
backup_manager = build_backup_manager(name="test_server")
backup_manager.config.pre_test_hook = "not_existent_script"
# WalFileInfo mock
timestamp = time.time()
wal_info = MagicMock(name="wal_info")
wal_info.name = "XXYYZZAABBCC"
wal_info.size = 1234567
wal_info.time = timestamp
wal_info.compression = None
wal_info.fullpath.return_value = "/incoming/directory"
# the actual test
script = HookScriptRunner(backup_manager, "test_hook", "pre")
script.env_from_wal_info(wal_info)
expected_env = {
"BARMAN_PHASE": "pre",
"BARMAN_VERSION": version,
"BARMAN_SERVER": "test_server",
"BARMAN_CONFIGURATION": "build_config_from_dicts",
"BARMAN_HOOK": "test_hook",
"BARMAN_SEGMENT": "XXYYZZAABBCC",
"BARMAN_FILE": "/incoming/directory",
"BARMAN_SIZE": "1234567",
"BARMAN_TIMESTAMP": str(timestamp),
"BARMAN_COMPRESSION": "",
}
script.run()
assert command_mock.call_count == 1
assert command_mock.call_args[1]["env_append"] == expected_env
示例3: test_wal_info
# 需要导入模块: from barman.hooks import HookScriptRunner [as 别名]
# 或者: from barman.hooks.HookScriptRunner import env_from_wal_info [as 别名]
def test_wal_info(self, command_mock):
# BackupManager mock
backup_manager = self.build_backup_manager('test_server', 'test_file')
backup_manager.config.pre_test_hook = 'not_existent_script'
# WalFileInfo mock
wal_info = MagicMock(name='wal_info')
wal_info.name = 'XXYYZZAABBCC'
wal_info.size = 1234567
wal_info.time = 1337133713
wal_info.compression = 'gzip'
wal_info.fullpath.return_value = '/incoming/directory'
# the actual test
script = HookScriptRunner(backup_manager, 'test_hook', 'pre')
script.env_from_wal_info(wal_info)
expected_env = {
'BARMAN_PHASE': 'pre',
'BARMAN_VERSION': version,
'BARMAN_SERVER': 'test_server',
'BARMAN_CONFIGURATION': 'test_file',
'BARMAN_HOOK': 'test_hook',
'BARMAN_SEGMENT': 'XXYYZZAABBCC',
'BARMAN_FILE': '/incoming/directory',
'BARMAN_SIZE': '1234567',
'BARMAN_TIMESTAMP': '1337133713',
'BARMAN_COMPRESSION': 'gzip',
}
script.run()
assert command_mock.call_count == 1
assert command_mock.call_args[1]['env_append'] == expected_env
示例4: cron_wal_archival
# 需要导入模块: from barman.hooks import HookScriptRunner [as 别名]
# 或者: from barman.hooks.HookScriptRunner import env_from_wal_info [as 别名]
def cron_wal_archival(self, compressor, wal_info):
"""
Archive a WAL segment from the incoming directory.
This function returns a WalFileInfo object.
:param compressor: the compressor for the file (if any)
:param wal_info: WalFileInfo of the WAL file is being processed
"""
destfile = wal_info.fullpath(self.server)
destdir = os.path.dirname(destfile)
srcfile = os.path.join(self.config.incoming_wals_directory,
wal_info.name)
# Run the pre_archive_script if present.
script = HookScriptRunner(self, 'archive_script', 'pre')
script.env_from_wal_info(wal_info, srcfile)
script.run()
mkpath(destdir)
if compressor:
compressor.compress(srcfile, destfile)
shutil.copystat(srcfile, destfile)
os.unlink(srcfile)
else:
shutil.move(srcfile, destfile)
# execute fsync() on the archived WAL containing directory
fsync_dir(destdir)
# execute fsync() also on the incoming directory
fsync_dir(self.config.incoming_wals_directory)
# execute fsync() on the archived WAL file
file_fd = os.open(destfile, os.O_RDONLY)
os.fsync(file_fd)
os.close(file_fd)
stat = os.stat(destfile)
wal_info.size = stat.st_size
wal_info.compression = compressor and compressor.compression
# Run the post_archive_script if present.
script = HookScriptRunner(self, 'archive_script', 'post')
script.env_from_wal_info(wal_info)
script.run()
示例5: archive_wal
# 需要导入模块: from barman.hooks import HookScriptRunner [as 别名]
# 或者: from barman.hooks.HookScriptRunner import env_from_wal_info [as 别名]
def archive_wal(self, compressor, wal_info):
"""
Archive a WAL segment and update the wal_info object
:param compressor: the compressor for the file (if any)
:param WalFileInfo wal_info: the WAL file is being processed
"""
src_file = wal_info.orig_filename
src_dir = os.path.dirname(src_file)
dst_file = wal_info.fullpath(self.server)
tmp_file = dst_file + '.tmp'
dst_dir = os.path.dirname(dst_file)
error = None
try:
# Run the pre_archive_script if present.
script = HookScriptRunner(self.backup_manager,
'archive_script', 'pre')
script.env_from_wal_info(wal_info, src_file)
script.run()
# Run the pre_archive_retry_script if present.
retry_script = RetryHookScriptRunner(self.backup_manager,
'archive_retry_script',
'pre')
retry_script.env_from_wal_info(wal_info, src_file)
retry_script.run()
# Check if destination already exists
if os.path.exists(dst_file):
src_uncompressed = src_file
dst_uncompressed = dst_file
dst_info = WalFileInfo.from_file(dst_file)
try:
comp_manager = self.backup_manager.compression_manager
if dst_info.compression is not None:
dst_uncompressed = dst_file + '.uncompressed'
comp_manager.get_compressor(
compression=dst_info.compression).decompress(
dst_file, dst_uncompressed)
if wal_info.compression:
src_uncompressed = src_file + '.uncompressed'
comp_manager.get_compressor(
compression=wal_info.compression).decompress(
src_file, src_uncompressed)
# Directly compare files.
# When the files are identical
# raise a MatchingDuplicateWalFile exception,
# otherwise raise a DuplicateWalFile exception.
if filecmp.cmp(dst_uncompressed, src_uncompressed):
raise MatchingDuplicateWalFile(wal_info)
else:
raise DuplicateWalFile(wal_info)
finally:
if src_uncompressed != src_file:
os.unlink(src_uncompressed)
if dst_uncompressed != dst_file:
os.unlink(dst_uncompressed)
mkpath(dst_dir)
# Compress the file only if not already compressed
if compressor and not wal_info.compression:
compressor.compress(src_file, tmp_file)
shutil.copystat(src_file, tmp_file)
os.rename(tmp_file, dst_file)
os.unlink(src_file)
# Update wal_info
stat = os.stat(dst_file)
wal_info.size = stat.st_size
wal_info.compression = compressor.compression
else:
# Try to atomically rename the file. If successful,
# the renaming will be an atomic operation
# (this is a POSIX requirement).
try:
os.rename(src_file, dst_file)
except OSError:
# Source and destination are probably on different
# filesystems
shutil.copy2(src_file, tmp_file)
os.rename(tmp_file, dst_file)
os.unlink(src_file)
# At this point the original file has been removed
wal_info.orig_filename = None
# Execute fsync() on the archived WAL file
file_fd = os.open(dst_file, os.O_RDONLY)
os.fsync(file_fd)
os.close(file_fd)
# Execute fsync() on the archived WAL containing directory
fsync_dir(dst_dir)
# Execute fsync() also on the incoming directory
fsync_dir(src_dir)
except Exception as e:
# In case of failure save the exception for the post scripts
error = e
raise
# Ensure the execution of the post_archive_retry_script and
#.........这里部分代码省略.........
示例6: cron_wal_archival
# 需要导入模块: from barman.hooks import HookScriptRunner [as 别名]
# 或者: from barman.hooks.HookScriptRunner import env_from_wal_info [as 别名]
def cron_wal_archival(self, compressor, wal_info):
"""
Archive a WAL segment from the incoming directory.
This function returns a WalFileInfo object.
:param compressor: the compressor for the file (if any)
:param wal_info: WalFileInfo of the WAL file is being processed
"""
dest_file = wal_info.fullpath(self.server)
dest_dir = os.path.dirname(dest_file)
srcfile = os.path.join(self.config.incoming_wals_directory,
wal_info.name)
error = None
try:
# Run the pre_archive_script if present.
script = HookScriptRunner(self, 'archive_script', 'pre')
script.env_from_wal_info(wal_info, srcfile)
script.run()
# Run the pre_archive_retry_script if present.
retry_script = RetryHookScriptRunner(self,
'archive_retry_script',
'pre')
retry_script.env_from_wal_info(wal_info, srcfile)
retry_script.run()
mkpath(dest_dir)
if compressor:
compressor.compress(srcfile, dest_file)
shutil.copystat(srcfile, dest_file)
os.unlink(srcfile)
else:
shutil.move(srcfile, dest_file)
# Execute fsync() on the archived WAL containing directory
fsync_dir(dest_dir)
# Execute fsync() also on the incoming directory
fsync_dir(self.config.incoming_wals_directory)
# Execute fsync() on the archived WAL file
file_fd = os.open(dest_file, os.O_RDONLY)
os.fsync(file_fd)
os.close(file_fd)
stat = os.stat(dest_file)
wal_info.size = stat.st_size
wal_info.compression = compressor and compressor.compression
except Exception as e:
# In case of failure save the exception for the post sripts
error = e
raise
# Ensure the execution of the post_archive_retry_script and
# the post_archive_script
finally:
# Run the post_archive_retry_script if present.
try:
retry_script = RetryHookScriptRunner(self,
'archive_retry_script',
'post')
retry_script.env_from_wal_info(wal_info, dest_file, error)
retry_script.run()
except AbortedRetryHookScript, e:
# Ignore the ABORT_STOP as it is a post-hook operation
_logger.warning("Ignoring stop request after receiving "
"abort (exit code %d) from post-archive "
"retry hook script: %s",
e.hook.exit_status, e.hook.script)
# Run the post_archive_script if present.
script = HookScriptRunner(self, 'archive_script', 'post', error)
script.env_from_wal_info(wal_info, dest_file)
script.run()