Просмотр исходного кода

Make compression configurable

Currently, compression is enabled by default, and there is no way
to disable it via config or from the providers calling
SSHBackupWriter. This PR adds the ability to do both.
Gabriel Adrian Samfira 7 лет назад
Родитель
Сommit
733949dac2
2 измененных файлов с 20 добавлено и 3 удалено
  1. 15 2
      coriolis/providers/backup_writers.py
  2. 5 1
      coriolis/providers/replicator.py

+ 15 - 2
coriolis/providers/backup_writers.py

@@ -7,6 +7,7 @@ import errno
 import os
 import threading
 
+from oslo_config import cfg
 from oslo_log import log as logging
 import paramiko
 from six import with_metaclass
@@ -16,6 +17,13 @@ from coriolis import exception
 from coriolis import utils
 
 LOG = logging.getLogger(__name__)
+CONF = cfg.CONF
+opts = [
+    cfg.BoolOpt('compress_transfers',
+               default=True,
+               help='Use compression if possible during disk transfers'),
+]
+CONF.register_opts(opts)
 
 
 class BaseBackupWriterImpl(with_metaclass(abc.ABCMeta)):
@@ -98,13 +106,16 @@ class FileBackupWriter(BaseBackupWriter):
 
 
 class SSHBackupWriterImpl(BaseBackupWriterImpl):
-    def __init__(self, path, disk_id):
+    def __init__(self, path, disk_id, compress_transfer=None):
         self._msg_id = None
         self._stdin = None
         self._stdout = None
         self._stderr = None
         self._offset = None
         self._ssh = None
+        self._compress_transfer = compress_transfer
+        if self._compress_transfer is None:
+            self._compress_transfer = CONF.compress_transfers
         super(SSHBackupWriterImpl, self).__init__(path, disk_id)
 
     def _set_ssh_client(self, ssh):
@@ -119,7 +130,9 @@ class SSHBackupWriterImpl(BaseBackupWriterImpl):
 
     def _encode_data(self, content):
         msg = data_transfer.encode_data(
-            self._msg_id, self._path, self._offset, content)
+            self._msg_id, self._path,
+            self._offset, content,
+            compress=self._compress_transfer)
 
         LOG.debug(
             "Guest path: %(path)s, offset: %(offset)d, content len: "

+ 5 - 1
coriolis/providers/replicator.py

@@ -246,7 +246,7 @@ class Client(object):
 class Replicator(object):
 
     def __init__(self, conn_info, event_manager, volumes_info, replica_state,
-                 use_compression=False, ignore_mounted=True,
+                 use_compression=None, ignore_mounted=True,
                  hash_method=HASH_METHOD_SHA256, watch_devices=True,
                  chunk_size=10485760, use_tunnel=False):
         self._event_manager = event_manager
@@ -255,7 +255,11 @@ class Replicator(object):
         self._config_dir = None
         self._cert_dir = None
         self._volumes_info = volumes_info
+
         self._use_compression = use_compression
+        if self._use_compression is None:
+            self._use_compression = CONF.compress_transfers
+
         self._watch_devices = watch_devices
         self._hash_method = hash_method
         self._ignore_mounted = ignore_mounted