提交 b0b0b958 编写于 作者: N Ning Yu

Exclude files with the --exclude-from option

Which was introduced to exclude a large amount of paths.

Also changed the excluding logic of './db_dumps' and './promote'.  They
were excluded only when an empty 'excludePaths' was specified by the
caller, this is weird, so I changed the logic to always exclude these
two paths.
上级 43b95607
......@@ -5,6 +5,7 @@
import os
import pipes
import tempfile
from gppylib.gplog import *
from gppylib.gparray import *
......@@ -196,17 +197,27 @@ class PgBaseBackup(Command):
cmd_tokens.append('--target-gp-dbid')
cmd_tokens.append(str(target_gp_dbid))
# We exclude certain unnecessary directories from being copied as they will greatly
# slow down the speed of gpinitstandby if containing a lot of data
if excludePaths is None or len(excludePaths) == 0:
cmd_tokens.append('-E')
cmd_tokens.append('./db_dumps')
cmd_tokens.append('-E')
cmd_tokens.append('./promote')
else:
# Create a temp file to include the exclude paths
exclude_fd, exclude_filename = tempfile.mkstemp(suffix='.excludes',
prefix='gpexpand-',
text=True)
cmd_tokens.append('--exclude-from')
cmd_tokens.append(exclude_filename)
with open(exclude_filename, 'a') as f:
# We exclude certain unnecessary directories from being copied as they will greatly
# slow down the speed of gpinitstandby if containing a lot of data
f.write('./db_dumps\n')
f.write('./promote\n')
# Also exclude the paths specified by the caller
for path in excludePaths:
cmd_tokens.append('-E')
cmd_tokens.append(path)
f.write(path + '\n')
# Record the filename, we will remove it later
self.exclude_filename = exclude_filename
os.close(int(exclude_fd))
cmd_tokens.append('--progress')
cmd_tokens.append('--verbose')
......@@ -220,6 +231,14 @@ class PgBaseBackup(Command):
Command.__init__(self, 'pg_basebackup', cmd_str, ctxt=ctxt, remoteHost=remoteHost)
def __del__(self):
if hasattr(self, 'exclude_filename') and self.exclude_filename:
try:
os.unlink(self.exclude_filename)
except:
# ignore the error if fail to remove the exclude-from file
pass
@staticmethod
def _xlog_arguments(replication_slot_name):
if replication_slot_name:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册