From ba6847dd98e2e7439e907539a89103bb7b81a11d Mon Sep 17 00:00:00 2001 From: Orsiris de Jong Date: Sun, 2 Apr 2023 16:00:21 +0200 Subject: [PATCH] Add timeout for init operations --- npbackup/restic_wrapper/__init__.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/npbackup/restic_wrapper/__init__.py b/npbackup/restic_wrapper/__init__.py index 7d95f21..19bde99 100644 --- a/npbackup/restic_wrapper/__init__.py +++ b/npbackup/restic_wrapper/__init__.py @@ -7,8 +7,8 @@ __intname__ = "npbackup.restic_wrapper" __author__ = "Orsiris de Jong" __copyright__ = "Copyright (C) 2022-2023 NetInvent" __license__ = "GPL-3.0-only" -__build__ = "2023032901" -__version__ = "1.6.0" +__build__ = "2023040201" +__version__ = "1.6.1" from typing import Tuple, List, Optional, Callable, Union @@ -24,6 +24,9 @@ from command_runner import command_runner logger = getLogger(__intname__) +# Arbitrary timeout for init / init checks. +# If init takes more than a minute, we really have a problem +INIT_TIMEOUT=60 class ResticRunner: def __init__( @@ -170,6 +173,7 @@ class ResticRunner: self, cmd: str, errors_allowed: bool = False, + timeout: int = None, live_stream=False, ) -> Tuple[bool, str]: """ @@ -188,7 +192,7 @@ class ResticRunner: if live_stream: exit_code, output = command_runner( _cmd, - timeout=None, + timeout=timeout, split_streams=False, encoding="utf-8", live_output=self.verbose, @@ -203,7 +207,7 @@ class ResticRunner: else: exit_code, output = command_runner( _cmd, - timeout=None, + timeout=timeout, split_streams=False, encoding="utf-8", live_output=self.verbose, @@ -410,7 +414,7 @@ class ResticRunner: cmd = "init --repository-version {} --compression {}".format( repository_version, compression ) - result, output = self.executor(cmd, errors_allowed=errors_allowed) + result, output = self.executor(cmd, errors_allowed=errors_allowed, timeout=INIT_TIMEOUT) if result: if re.search( r"created restic repository ([a-z0-9]+) at .+", output, re.IGNORECASE