浏览代码

Remote: don't print tracebacks for Error exceptions handled downstream

(What we'd really want is to have proper exception transporting over
 the RPC)

Fixes #792
Marian Beermann 9 年之前
父节点
当前提交
425a4d819d
共有 1 个文件被更改,包括 6 次插入2 次删除
  1. 6 2
      borg/remote.py

+ 6 - 2
borg/remote.py

@@ -93,8 +93,12 @@ class RepositoryServer:  # pragma: no cover
                             f = getattr(self.repository, method)
                             f = getattr(self.repository, method)
                         res = f(*args)
                         res = f(*args)
                     except BaseException as e:
                     except BaseException as e:
-                        logging.exception('Borg %s: exception in RPC call:', __version__)
-                        logging.error(sysinfo())
+                        # These exceptions are reconstructed on the client end in RemoteRepository.call_many(),
+                        # and will be handled just like locally raised exceptions. Suppress the remote traceback
+                        # for these, except ErrorWithTraceback, which should always display a traceback.
+                        if not isinstance(e, (Repository.DoesNotExist, Repository.AlreadyExists, PathNotAllowed)):
+                            logging.exception('Borg %s: exception in RPC call:', __version__)
+                            logging.error(sysinfo())
                         exc = "Remote Exception (see remote log for the traceback)"
                         exc = "Remote Exception (see remote log for the traceback)"
                         os.write(stdout_fd, msgpack.packb((1, msgid, e.__class__.__name__, exc)))
                         os.write(stdout_fd, msgpack.packb((1, msgid, e.__class__.__name__, exc)))
                     else:
                     else: