Fix: Pass backup timeout to remote SSH process
Allows user-configured backup timeouts > 3600 to be respected. Previously, the SSH process used a hardcoded 3600 second timeout regardless of the job timeout setting. Now the timeout is passed through to instant_remote_process() for all backup operations. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
b55aaf34d3
commit
05fc5d70c5
2 changed files with 8 additions and 7 deletions
|
|
@ -508,7 +508,7 @@ private function backup_standalone_mongodb(string $databaseWithCollections): voi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$this->backup_output = instant_remote_process($commands, $this->server);
|
$this->backup_output = instant_remote_process($commands, $this->server, true, false, $this->timeout);
|
||||||
$this->backup_output = trim($this->backup_output);
|
$this->backup_output = trim($this->backup_output);
|
||||||
if ($this->backup_output === '') {
|
if ($this->backup_output === '') {
|
||||||
$this->backup_output = null;
|
$this->backup_output = null;
|
||||||
|
|
@ -537,7 +537,7 @@ private function backup_standalone_postgresql(string $database): void
|
||||||
}
|
}
|
||||||
|
|
||||||
$commands[] = $backupCommand;
|
$commands[] = $backupCommand;
|
||||||
$this->backup_output = instant_remote_process($commands, $this->server);
|
$this->backup_output = instant_remote_process($commands, $this->server, true, false, $this->timeout);
|
||||||
$this->backup_output = trim($this->backup_output);
|
$this->backup_output = trim($this->backup_output);
|
||||||
if ($this->backup_output === '') {
|
if ($this->backup_output === '') {
|
||||||
$this->backup_output = null;
|
$this->backup_output = null;
|
||||||
|
|
@ -560,7 +560,7 @@ private function backup_standalone_mysql(string $database): void
|
||||||
$escapedDatabase = escapeshellarg($database);
|
$escapedDatabase = escapeshellarg($database);
|
||||||
$commands[] = "docker exec $this->container_name mysqldump -u root -p\"{$this->database->mysql_root_password}\" $escapedDatabase > $this->backup_location";
|
$commands[] = "docker exec $this->container_name mysqldump -u root -p\"{$this->database->mysql_root_password}\" $escapedDatabase > $this->backup_location";
|
||||||
}
|
}
|
||||||
$this->backup_output = instant_remote_process($commands, $this->server);
|
$this->backup_output = instant_remote_process($commands, $this->server, true, false, $this->timeout);
|
||||||
$this->backup_output = trim($this->backup_output);
|
$this->backup_output = trim($this->backup_output);
|
||||||
if ($this->backup_output === '') {
|
if ($this->backup_output === '') {
|
||||||
$this->backup_output = null;
|
$this->backup_output = null;
|
||||||
|
|
@ -583,7 +583,7 @@ private function backup_standalone_mariadb(string $database): void
|
||||||
$escapedDatabase = escapeshellarg($database);
|
$escapedDatabase = escapeshellarg($database);
|
||||||
$commands[] = "docker exec $this->container_name mariadb-dump -u root -p\"{$this->database->mariadb_root_password}\" $escapedDatabase > $this->backup_location";
|
$commands[] = "docker exec $this->container_name mariadb-dump -u root -p\"{$this->database->mariadb_root_password}\" $escapedDatabase > $this->backup_location";
|
||||||
}
|
}
|
||||||
$this->backup_output = instant_remote_process($commands, $this->server);
|
$this->backup_output = instant_remote_process($commands, $this->server, true, false, $this->timeout);
|
||||||
$this->backup_output = trim($this->backup_output);
|
$this->backup_output = trim($this->backup_output);
|
||||||
if ($this->backup_output === '') {
|
if ($this->backup_output === '') {
|
||||||
$this->backup_output = null;
|
$this->backup_output = null;
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ function () use ($server, $command_string) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function instant_remote_process(Collection|array $command, Server $server, bool $throwError = true, bool $no_sudo = false): ?string
|
function instant_remote_process(Collection|array $command, Server $server, bool $throwError = true, bool $no_sudo = false, ?int $timeout = null): ?string
|
||||||
{
|
{
|
||||||
$command = $command instanceof Collection ? $command->toArray() : $command;
|
$command = $command instanceof Collection ? $command->toArray() : $command;
|
||||||
|
|
||||||
|
|
@ -126,11 +126,12 @@ function instant_remote_process(Collection|array $command, Server $server, bool
|
||||||
$command = parseCommandsByLineForSudo(collect($command), $server);
|
$command = parseCommandsByLineForSudo(collect($command), $server);
|
||||||
}
|
}
|
||||||
$command_string = implode("\n", $command);
|
$command_string = implode("\n", $command);
|
||||||
|
$effectiveTimeout = $timeout ?? config('constants.ssh.command_timeout');
|
||||||
|
|
||||||
return \App\Helpers\SshRetryHandler::retry(
|
return \App\Helpers\SshRetryHandler::retry(
|
||||||
function () use ($server, $command_string) {
|
function () use ($server, $command_string, $effectiveTimeout) {
|
||||||
$sshCommand = SshMultiplexingHelper::generateSshCommand($server, $command_string);
|
$sshCommand = SshMultiplexingHelper::generateSshCommand($server, $command_string);
|
||||||
$process = Process::timeout(config('constants.ssh.command_timeout'))->run($sshCommand);
|
$process = Process::timeout($effectiveTimeout)->run($sshCommand);
|
||||||
|
|
||||||
$output = trim($process->output());
|
$output = trim($process->output());
|
||||||
$exitCode = $process->exitCode();
|
$exitCode = $process->exitCode();
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue