diff --git a/apps/client/app/modules/repositories/tabs/snapshots.tsx b/apps/client/app/modules/repositories/tabs/snapshots.tsx
index 2d397dd..0f9e571 100644
--- a/apps/client/app/modules/repositories/tabs/snapshots.tsx
+++ b/apps/client/app/modules/repositories/tabs/snapshots.tsx
@@ -33,7 +33,7 @@ export const formatSnapshotDuration = (seconds: number) => {
export const RepositorySnapshotsTabContent = ({ repository }: Props) => {
const [searchQuery, setSearchQuery] = useState("");
- const { data, isLoading, error } = useQuery({
+ const { data, isLoading, failureReason } = useQuery({
...listSnapshotsOptions({ path: { name: repository.name } }),
refetchInterval: 10000,
refetchOnWindowFocus: true,
@@ -72,23 +72,23 @@ export const RepositorySnapshotsTabContent = ({ repository }: Props) => {
);
}
- if (isLoading && !data && !error) {
+ if (isLoading && !data && !failureReason) {
return (
- Loading snapshots...
+ Loading snapshots yo...
);
}
- if (error) {
+ if (failureReason) {
return (
Failed to Load Snapshots
- {error.message}
+ {failureReason.message}
);
diff --git a/apps/server/src/modules/backends/utils/backend-utils.ts b/apps/server/src/modules/backends/utils/backend-utils.ts
index 9cb6e28..abdb98b 100644
--- a/apps/server/src/modules/backends/utils/backend-utils.ts
+++ b/apps/server/src/modules/backends/utils/backend-utils.ts
@@ -5,14 +5,27 @@ import { promisify } from "node:util";
import { OPERATION_TIMEOUT } from "../../../core/constants";
import { toMessage } from "../../../utils/errors";
import { logger } from "../../../utils/logger";
+import { access, constants } from "node:fs/promises";
const execFile = promisify(execFileCb);
export const executeMount = async (args: string[]): Promise => {
- const { stderr } = await execFile("nsenter", ["--mount=/host/proc/1/ns/mnt", "mount", ...args], {
- timeout: OPERATION_TIMEOUT,
- maxBuffer: 1024 * 1024,
- });
+ let stderr: string | undefined;
+
+ try {
+ await access("/host/proc", constants.F_OK);
+ const result = await execFile("nsenter", ["--mount=/host/proc/1/ns/mnt", "mount", ...args], {
+ timeout: OPERATION_TIMEOUT,
+ maxBuffer: 1024 * 1024,
+ });
+ stderr = result.stderr;
+ } catch (_) {
+ const result = await execFile("mount", args, {
+ timeout: OPERATION_TIMEOUT,
+ maxBuffer: 1024 * 1024,
+ });
+ stderr = result.stderr;
+ }
if (stderr?.trim()) {
logger.warn(stderr.trim());
@@ -20,10 +33,22 @@ export const executeMount = async (args: string[]): Promise => {
};
export const executeUnmount = async (path: string): Promise => {
- const { stderr } = await execFile("nsenter", ["--mount=/host/proc/1/ns/mnt", "umount", "-l", "-f", path], {
- timeout: OPERATION_TIMEOUT,
- maxBuffer: 1024 * 1024,
- });
+ let stderr: string | undefined;
+
+ try {
+ await access("/host/proc", constants.F_OK);
+ const result = await execFile("nsenter", ["--mount=/host/proc/1/ns/mnt", "umount", "-l", "-f", path], {
+ timeout: OPERATION_TIMEOUT,
+ maxBuffer: 1024 * 1024,
+ });
+ stderr = result.stderr;
+ } catch (_) {
+ const result = await execFile("umount", ["-l", "-f", path], {
+ timeout: OPERATION_TIMEOUT,
+ maxBuffer: 1024 * 1024,
+ });
+ stderr = result.stderr;
+ }
if (stderr?.trim()) {
logger.warn(stderr.trim());