Read ahead: resolve paths before opening connections; a failing readAhead() leaves no spool folder

This commit is contained in:
2026-10-19 01:52:58 +02:00
parent ccbbf01c54
commit 1d7f7e6423
2 changed files with 7 additions and 2 deletions
+2 -1
View File
@@ -257,6 +257,8 @@ final class StorageBackend implements IBackend, IReadsAhead {
if (!$this->sftpReads || $reconnect === null || $ranges === []) {
return null;
}
// before any connection is opened: an invalid path throws
$abs = array_map(fn (array $r): array => [$this->abs($r[0]), $r[1], $r[2]], $ranges);
$storages = [];
$connections = [];
$root = '';
@@ -277,7 +279,6 @@ final class StorageBackend implements IBackend, IReadsAhead {
if ($connections === []) {
return null;
}
$abs = array_map(fn (array $r): array => [$this->abs($r[0]), $r[1], $r[2]], $ranges);
return (static function () use ($storages, $connections, $root, $abs, $spool): \Generator {
// the storages hold their connections: kept until the fetcher is done
try {
+5 -1
View File
@@ -254,7 +254,11 @@ final class Repository {
if (count($plan->ranges()) < 2 || (!is_dir($plan->spool) && !@mkdir($plan->spool, 0700, true))) {
return null;
}
$streams = $this->backend->readAhead($plan->ranges(), $plan->spool);
try {
$streams = $this->backend->readAhead($plan->ranges(), $plan->spool);
} catch (\Throwable) {
$streams = null; // the usual reads report what is wrong
}
if ($streams === null) {
@rmdir($plan->spool);
return null;