瀏覽代碼

rpc negotiate: enable v3 log protocol only for supported clients

avoid seeing JSON log output when a 1.1.0b<5 client talks to a
1.1.0b>6 server.
Marian Beermann 8 年之前
父節點
當前提交
18a2902c9c
共有 2 個文件被更改,包括 11 次插入4 次删除
  1. 8 4
      src/borg/remote.py
  2. 3 0
      src/borg/testsuite/repository.py

+ 8 - 4
src/borg/remote.py

@@ -313,9 +313,10 @@ class RepositoryServer:  # pragma: no cover
         # clients since 1.1.0b3 use a dict as client_data
         if isinstance(client_data, dict):
             self.client_version = client_data[b'client_version']
-            level = logging.getLevelName(logging.getLogger('').level)
-            setup_logging(is_serve=True, json=True, level=level)
-            logger.debug('Initialized loggin system for new protocol')
+            if client_data.get(b'client_supports_log_v3', False):
+                level = logging.getLevelName(logging.getLogger('').level)
+                setup_logging(is_serve=True, json=True, level=level)
+                logger.debug('Initialized logging system for new (v3) protocol')
         else:
             self.client_version = BORG_VERSION  # seems to be newer than current version (no known old format)
 
@@ -559,7 +560,10 @@ class RemoteRepository:
 
         try:
             try:
-                version = self.call('negotiate', {'client_data': {b'client_version': BORG_VERSION}})
+                version = self.call('negotiate', {'client_data': {
+                    b'client_version': BORG_VERSION,
+                    b'client_supports_log_v3': True,
+                }})
             except ConnectionClosed:
                 raise ConnectionClosedWithHint('Is borg working on the server?') from None
             if version == RPC_PROTOCOL_VERSION:

+ 3 - 0
src/borg/testsuite/repository.py

@@ -724,6 +724,9 @@ class RemoteRepositoryTestCase(RepositoryTestCase):
         assert self.repository.borg_cmd(args, testing=False) == ['borg', 'serve', '--umask=077', '--info']
         args.remote_path = 'borg-0.28.2'
         assert self.repository.borg_cmd(args, testing=False) == ['borg-0.28.2', 'serve', '--umask=077', '--info']
+        args.debug_topics = ['something_client_side', 'repository_compaction']
+        assert self.repository.borg_cmd(args, testing=False) == ['borg-0.28.2', 'serve', '--umask=077', '--info',
+                                                                 '--debug-topic=borg.debug.repository_compaction']
 
 
 class RemoteLegacyFree(RepositoryTestCaseBase):