From b289920720f3f3394141adab2f672c0fce4f28e5 Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger Date: Sat, 8 Nov 2025 16:52:58 +0100 Subject: [PATCH] fix: timeout statfs --- apps/server/src/modules/volumes/volume.service.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/server/src/modules/volumes/volume.service.ts b/apps/server/src/modules/volumes/volume.service.ts index d672ddf..201eb2a 100644 --- a/apps/server/src/modules/volumes/volume.service.ts +++ b/apps/server/src/modules/volumes/volume.service.ts @@ -7,10 +7,12 @@ import { eq } from "drizzle-orm"; import { ConflictError, InternalServerError, NotFoundError } from "http-errors-enhanced"; import slugify from "slugify"; import { getCapabilities } from "../../core/capabilities"; +import { OPERATION_TIMEOUT } from "../../core/constants"; import { db } from "../../db/db"; import { volumesTable } from "../../db/schema"; import { toMessage } from "../../utils/errors"; import { getStatFs, type StatFs } from "../../utils/mountinfo"; +import { withTimeout } from "../../utils/timeout"; import { createVolumeBackend } from "../backends/backend"; import type { UpdateVolumeBody } from "./volume.dto"; import { getVolumePath } from "./helpers"; @@ -128,7 +130,11 @@ const getVolume = async (name: string) => { let statfs: Partial = {}; if (volume.status === "mounted") { - statfs = await getStatFs(getVolumePath(volume)).catch(() => ({})); + statfs = await withTimeout(getStatFs(getVolumePath(volume)), OPERATION_TIMEOUT, "getStatFs") + .catch((error) => { + logger.warn(`Failed to get statfs for volume ${name}: ${toMessage(error)}`); + return {}; + }); } return { volume, statfs };