borgbase / vorta

Desktop Backup Client for Borg Backup
https://vorta.borgbase.com
GNU General Public License v3.0
1.97k stars 130 forks source link

Handle network error with a more userfriendly message. #1444

Open RubenKelevra opened 1 year ago

RubenKelevra commented 1 year ago

Description

I wanted to create my first backup with Vorta on a “Storage Box” by Hetzner.

A disconnect occurred.

This is not explained in an error popup, but with a message which is hardly readable due to having no scroll bar – I had to turn my screen 90° to read it.

Screenshot from 2022-10-31 06-25-55


Apart from not handling this error:

As this is the first time I'm using Borg I'm a bit confused – I thought Borg can continue by running create again. So Vorta isn't doing this?

Reproduction

OS

ArchLinux latest

Version of Vorta

0.8.7

What did you install Vorta with?

Other

Version of Borg

1.2.2

Logs

2022-10-30 22:27:46,666 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-30 22:27:46,667 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-30 22:27:54,957 - vorta.keyring.abc - DEBUG - Only available on macOS
2022-10-30 22:27:54,958 - asyncio - DEBUG - Using selector: EpollSelector
2022-10-30 22:27:54,959 - vorta.keyring.abc - DEBUG - Using VortaSecretStorageKeyring
2022-10-30 22:27:54,959 - vorta.borg.borg_job - DEBUG - Using VortaSecretStorageKeyring keyring to store passwords.
2022-10-30 22:27:54,959 - asyncio - DEBUG - Using selector: EpollSelector
2022-10-30 22:27:54,960 - vorta.keyring.secretstorage - DEBUG - Found 1 passwords matching repo URL.
2022-10-30 22:27:54,960 - vorta.keyring.secretstorage - DEBUG - Retrieved password for repo anubis:~/backups/borg-backups
2022-10-30 22:27:54,973 - vorta.borg.jobs_manager - DEBUG - Add job for site 2
2022-10-30 22:27:54,973 - vorta.borg.jobs_manager - DEBUG - Start job on site: 2
2022-10-30 22:27:54,992 - vorta.borg.borg_job - INFO - Running command /usr/bin/borg create --list --progress --info --log-json --json --filter=AM -C zstd,8 --noatime --noflags --one-file-system --upload-buffer=100 --exclude-from /tmp/tmp329cmh1b anubis:~/backups/borg-backups::i5.local-2022-10-30-222754 /home/rubenk
2022-10-30 22:27:55,150 - vorta.borg.borg_job - WARNING - Warning: "--noatime" has been deprecated because it is the default now.
2022-10-30 22:27:56,204 - vorta.borg.borg_job - INFO - Creating archive at "anubis:~/backups/borg-backups::i5.local-2022-10-30-222754"
2022-10-30 22:30:46,953 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-30 22:30:46,954 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-30 22:30:46,955 - vorta.scheduler - DEBUG - Scheduling next run for 2022-10-31 01:27:54.973374
2022-10-30 22:36:49,178 - vorta.borg.borg_job - ERROR - Local Exception
2022-10-30 22:36:49,178 - vorta.borg.borg_job - ERROR - Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 183, in wrapper
    return method(self, args, repository=repository, **kwargs)
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 675, in do_create
    create_inner(archive, cache, fso)
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 608, in create_inner
    self._rec_walk(path=path, parent_fd=parent_fd, name=name,
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 820, in _rec_walk
    self._rec_walk(
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 820, in _rec_walk
    self._rec_walk(
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 786, in _rec_walk
    status = self._process_any(path=path, parent_fd=parent_fd, name=name, st=st, fso=fso, cache=cache,
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 688, in _process_any
    return fso.process_file(path=path, parent_fd=parent_fd, name=name, st=st, cache=cache)
  File "/usr/lib/python3.10/site-packages/borg/archive.py", line 1434, in process_file
    self.process_file_chunks(item, cache, self.stats, self.show_progress, backup_io_iter(self.chunker.chunkify(None, fd)))
  File "/usr/lib/python3.10/site-packages/borg/archive.py", line 1261, in process_file_chunks
    item.chunks.append(chunk_processor(chunk))
  File "/usr/lib/python3.10/site-packages/borg/archive.py", line 1249, in chunk_processor
    chunk_entry = cache.add_chunk(chunk_id, data, stats, wait=False)
  File "/usr/lib/python3.10/site-packages/borg/cache.py", line 951, in add_chunk
    self.repository.put(id, data, wait=wait)
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 476, in do_rpc
    return self.call(f.__name__, named, **extra)
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 711, in call
    for resp in self.call_many(cmd, [args], **kw):
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 828, in call_many
    raise ConnectionClosed()
borg.remote.ConnectionClosed: Connection closed by remote host

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 5159, in main
    exit_code = archiver.run(args)
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 5090, in run
    return set_ec(func(args))
  File "/usr/lib/python3.10/site-packages/borg/archiver.py", line 168, in wrapper
    with repository:
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 636, in __exit__
    self.rollback()
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 476, in do_rpc
    return self.call(f.__name__, named, **extra)
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 711, in call
    for resp in self.call_many(cmd, [args], **kw):
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 781, in call_many
    send_buffer()  # Try to send data, as some cases (async_response) will never try to send data otherwise.
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 721, in send_buffer
    written = self.ratelimit.write(self.stdin_fd, self.to_send.peek_front())
  File "/usr/lib/python3.10/site-packages/borg/remote.py", line 417, in write
    written = os.write(fd, to_send)
BrokenPipeError: [Errno 32] Broken pipe

Platform: Linux i5.local 6.0.5-x64v1-xanmod1-1 #1 SMP PREEMPT_DYNAMIC Thu, 27 Oct 2022 04:30:13 +0000 x86_64
Linux: Unknown Linux  
Borg: 1.2.2  Python: CPython 3.10.8 msgpack: 1.0.4 fuse: llfuse 1.4.2 [pyfuse3,llfuse]
PID: 69233  CWD: /home/rubenk
sys.argv: ['/usr/bin/borg', 'create', '--list', '--progress', '--info', '--log-json', '--json', '--filter=AM', '-C', 'zstd,8', '--noatime', '--noflags', '--one-file-system', '--upload-buffer=100', '--exclude-from', '/tmp/tmp329cmh1b', 'anubis:~/backups/borg-backups::i5.local-2022-10-30-222754', '/home/rubenk']
SSH_ORIGINAL_COMMAND: None

2022-10-30 22:36:49,329 - vorta.borg.jobs_manager - DEBUG - Finish job for site: 2
2022-10-30 22:36:49,330 - vorta.borg.jobs_manager - DEBUG - No more jobs for site: 2
2022-10-30 22:36:49,330 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-30 22:36:49,331 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-30 22:45:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-30 22:45:47,054 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-30 22:45:47,054 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-30 23:00:47,053 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-30 23:00:47,055 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-30 23:00:47,055 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-30 23:15:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-30 23:15:47,054 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-30 23:15:47,054 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-30 23:30:47,034 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-30 23:30:47,036 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-30 23:30:47,036 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-30 23:45:47,053 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-30 23:45:47,055 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-30 23:45:47,055 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 00:00:46,984 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 00:00:46,985 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 00:00:46,986 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 00:15:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 00:15:47,054 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 00:15:47,054 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 00:30:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 00:30:47,053 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 00:30:47,054 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 00:45:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 00:45:47,054 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 00:45:47,054 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 01:00:47,024 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 01:00:47,025 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 01:00:47,026 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 01:15:47,043 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 01:15:47,045 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 01:15:47,047 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 01:30:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 01:30:47,054 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 01:30:47,054 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 01:45:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 01:45:47,061 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 01:45:47,062 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 02:00:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 02:00:47,061 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 02:00:47,062 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 02:15:47,054 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 02:15:47,063 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 02:15:47,064 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 02:30:47,051 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 02:30:47,052 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 02:30:47,053 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 02:45:46,996 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 02:45:47,005 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 02:45:47,006 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 03:00:47,027 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 03:00:47,036 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 03:00:47,037 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 03:15:47,034 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 03:15:47,044 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 03:15:47,044 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 03:30:47,053 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 03:30:47,055 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 03:30:47,056 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 03:45:47,053 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 03:45:47,054 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 03:45:47,055 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 04:00:47,046 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 04:00:47,048 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 04:00:47,048 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 04:15:47,030 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 04:15:47,031 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 04:15:47,032 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 04:30:47,053 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 04:30:47,055 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 04:30:47,055 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 04:45:47,053 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 04:45:47,054 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 04:45:47,055 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 05:00:47,052 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 05:00:47,054 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 05:00:47,054 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 05:15:47,042 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 05:15:47,043 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 05:15:47,044 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 05:30:47,001 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 05:30:47,003 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 05:30:47,004 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 05:45:47,050 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 05:45:47,052 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 05:45:47,052 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 06:00:47,053 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 06:00:47,055 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 06:00:47,055 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 06:15:47,031 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 06:15:47,033 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 06:15:47,034 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
2022-10-31 06:30:46,968 - vorta.scheduler - DEBUG - Refreshing all scheduler timers
2022-10-31 06:30:46,978 - vorta.scheduler - INFO - Setting timer for profile 1
2022-10-31 06:30:46,979 - vorta.scheduler - INFO - Nothing scheduled for profile 1 because it would be the first backup for this profile.
m3nu commented 1 year ago

You or Hetzner seem to be having some network issues. The error message is a bit unwieldy, but unrelated to Vorta.

real-yfprojects commented 1 year ago

I think OP requests that vorta handles this error more nicely. I agree to that. However the same applies to borg.

RubenKelevra commented 1 year ago

I doubt that's an issue on Hetzner's side, since I use LTE.

I thought a bit about that - I think I make a feature request for a fix.

m3nu commented 1 year ago

Agree that we shouldn't show the full traceback here. That belongs into the log.

stale[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

real-yfprojects commented 1 year ago

borgbackup/borg#7016 will ease this.

RubenKelevra commented 1 year ago

@m3nu why is the stale bot trying to close issues, which are not fixed?

real-yfprojects commented 1 year ago

why is the stale bot trying to close issues, which are not fixed?

Not sure what you want to hear. We configured it like that. That is its purpose. When adding specific tags like type:enhancement or type:bug they will be ignored by the bot.

sammcj commented 1 year ago

Every day I log onto my laptop see a huge pile of alert notifications form Vorta that backups failed.

I have to dig through the logs (I can't see a way to view errors in the application?) only to find that 99% of the time it was just Vorta trying to backup while my laptop went to sleep or I had a blip in my internet connectivity.

2023-02-17 08:39:48,816 - vorta.scheduler - DEBUG - Scheduling next run for 2023-02-18 08:00:00
2023-02-17 08:43:46,399 - vorta.borg.borg_job - WARNING - Remote: client_loop: send disconnect: Broken pipe
2023-02-17 08:43:46,445 - vorta.borg.borg_job - ERROR - Local Exception
2023-02-17 08:43:46,446 - vorta.borg.borg_job - ERROR - Traceback (most recent call last):
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 183, in wrapper
    return method(self, args, repository=repository, **kwargs)
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 675, in do_create
    create_inner(archive, cache, fso)
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 608, in create_inner
    self._rec_walk(path=path, parent_fd=parent_fd, name=name,
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 820, in _rec_walk
    self._rec_walk(
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 820, in _rec_walk
    self._rec_walk(
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 820, in _rec_walk
    self._rec_walk(
  [Previous line repeated 3 more times]
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 786, in _rec_walk
    status = self._process_any(path=path, parent_fd=parent_fd, name=name, st=st, fso=fso, cache=cache,
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 688, in _process_any
    return fso.process_file(path=path, parent_fd=parent_fd, name=name, st=st, cache=cache)
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archive.py", line 1434, in process_file
    self.process_file_chunks(item, cache, self.stats, self.show_progress, backup_io_iter(self.chunker.chunkify(None, fd)))
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archive.py", line 1261, in process_file_chunks
    item.chunks.append(chunk_processor(chunk))
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archive.py", line 1249, in chunk_processor
    chunk_entry = cache.add_chunk(chunk_id, data, stats, wait=False)
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/cache.py", line 951, in add_chunk
    self.repository.put(id, data, wait=wait)
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 476, in do_rpc
    return self.call(f.__name__, named, **extra)
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 711, in call
    for resp in self.call_many(cmd, [args], **kw):
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 828, in call_many
    raise ConnectionClosed()
borg.remote.ConnectionClosed: Connection closed by remote host

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 5159, in main
    exit_code = archiver.run(args)
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 5090, in run
    return set_ec(func(args))
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/archiver.py", line 168, in wrapper
    with repository:
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 636, in __exit__
    self.rollback()
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 476, in do_rpc
    return self.call(f.__name__, named, **extra)
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 711, in call
    for resp in self.call_many(cmd, [args], **kw):
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 781, in call_many
    send_buffer()  # Try to send data, as some cases (async_response) will never try to send data otherwise.
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 721, in send_buffer
    written = self.ratelimit.write(self.stdin_fd, self.to_send.peek_front())
  File "/opt/homebrew/Cellar/borgbackup-fuse/1.2.2/libexec/lib/python3.10/site-packages/borg/remote.py", line 417, in write
    written = os.write(fd, to_send)
BrokenPipeError: [Errno 32] Broken pipe