diff --git a/lib/backend.py b/lib/backend.py index 85bb9b4454f2e17f17d3c51fabf468ebfd59e3ee..ddccc3b055a31b01993f53044f457fb05d224871 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -2697,6 +2697,9 @@ def StartImportExportDaemon(mode, opts, host, port, instance, ieio, ieioargs): if port: cmd.append("--port=%s" % port) + if opts.compress: + cmd.append("--compress=%s" % opts.compress) + if cmd_prefix: cmd.append("--cmd-prefix=%s" % cmd_prefix) diff --git a/lib/masterd/instance.py b/lib/masterd/instance.py index f638407610a344a6c5cfc2c80b012bf4127c4866..b830dfe2838fa50b32a0d902b7ab549e09d03856 100644 --- a/lib/masterd/instance.py +++ b/lib/masterd/instance.py @@ -743,7 +743,7 @@ class ImportExportLoop: class _TransferInstCbBase(ImportExportCbBase): def __init__(self, lu, feedback_fn, instance, timeouts, src_node, src_cbs, - dest_node, dest_ip): + dest_node, dest_ip, export_opts): """Initializes this class. """ @@ -757,6 +757,7 @@ class _TransferInstCbBase(ImportExportCbBase): self.src_cbs = src_cbs self.dest_node = dest_node self.dest_ip = dest_ip + self.export_opts = export_opts class _TransferInstSourceCb(_TransferInstCbBase): @@ -808,10 +809,9 @@ class _TransferInstDestCb(_TransferInstCbBase): self.feedback_fn("%s is now listening, starting export" % dtp.data.name) - opts = objects.ImportExportOptions(key_name=None, ca_pem=None) - # Start export on source node - de = DiskExport(self.lu, self.src_node, opts, self.dest_ip, ie.listen_port, + de = DiskExport(self.lu, self.src_node, self.export_opts, + self.dest_ip, ie.listen_port, self.instance, dtp.data.src_io, dtp.data.src_ioargs, self.timeouts, self.src_cbs, private=dtp) ie.loop.Add(de) @@ -914,12 +914,23 @@ def TransferInstanceData(lu, feedback_fn, src_node, dest_node, dest_ip, each transfer """ - opts = objects.ImportExportOptions(key_name=None, ca_pem=None) + # Compress only if transfer is to another node + if src_node == dest_node: + compress = constants.IEC_NONE + else: + compress = constants.IEC_GZIP + + logging.debug("Source node %s, destination node %s, compression '%s'", + src_node, dest_node, compress) + + opts = objects.ImportExportOptions(key_name=None, ca_pem=None, + compress=compress) + timeouts = ImportExportTimeouts(constants.DISK_TRANSFER_CONNECT_TIMEOUT) src_cbs = _TransferInstSourceCb(lu, feedback_fn, instance, timeouts, - src_node, None, dest_node, dest_ip) + src_node, None, dest_node, dest_ip, opts) dest_cbs = _TransferInstDestCb(lu, feedback_fn, instance, timeouts, - src_node, src_cbs, dest_node, dest_ip) + src_node, src_cbs, dest_node, dest_ip, opts) all_dtp = [] diff --git a/lib/objects.py b/lib/objects.py index 678ab99e93717883137e229e3734c78300bb142b..59d94bd3fb88f2e38fbf9ad55284a645cd59dd3d 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -1027,11 +1027,13 @@ class ImportExportOptions(ConfigObject): @ivar key_name: X509 key name (None for cluster certificate) @ivar ca_pem: Remote peer CA in PEM format (None for cluster certificate) + @ivar compress: Compression method (one of L{constants.IEC_ALL}) """ __slots__ = [ "key_name", "ca_pem", + "compress", ]