Skip to content

Commit 1ae9935

Browse files
committed
[DDW-826] If disk check has errors or reaches the timeout we "stop" the intervals
1 parent b35bd10 commit 1ae9935

File tree

2 files changed

+48
-23
lines changed

2 files changed

+48
-23
lines changed

source/main/config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,12 @@ export const NODE_UPDATE_TIMEOUT = isTest ? 10000 : 5 * 60 * 1000; // 5 minutes
159159

160160
export const DISK_SPACE_REQUIRED = 2 * 1073741274; // 2 GB | unit: bytes
161161
export const DISK_SPACE_REQUIRED_MARGIN_PERCENTAGE = 10; // 10% of the available disk space
162+
export const DISK_SPACE_CHECK_DONT_BOTHER_ME_INTERVAL = Number.MAX_SAFE_INTEGER; // Maximum interval
162163
export const DISK_SPACE_CHECK_LONG_INTERVAL = 10 * 60 * 1000; // 10 minutes | unit: milliseconds
163164
export const DISK_SPACE_CHECK_MEDIUM_INTERVAL = 60 * 1000; // 1 minute | unit: milliseconds
164165
export const DISK_SPACE_CHECK_SHORT_INTERVAL = isTest ? 2000 : 10 * 1000; // 10 seconds | unit: milliseconds
165166
export const DISK_SPACE_RECOMMENDED_PERCENTAGE = 15; // 15% of the total disk space
167+
export const DISK_SPACE_CHECK_TIMEOUT = 9 * 1000; // Timeout for checking disks pace
166168

167169
export const BLOCK_REPLAY_PROGRESS_CHECK_INTERVAL = 1 * 1000; // 1 seconds | unit: milliseconds
168170

source/main/utils/handleDiskSpace.js

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import prettysize from 'prettysize';
55
import { getDiskSpaceStatusChannel } from '../ipc/get-disk-space-status';
66
import { logger } from './logging';
77
import {
8+
DISK_SPACE_CHECK_DONT_BOTHER_ME_INTERVAL,
89
DISK_SPACE_CHECK_LONG_INTERVAL,
910
DISK_SPACE_CHECK_MEDIUM_INTERVAL,
1011
DISK_SPACE_CHECK_SHORT_INTERVAL,
1112
DISK_SPACE_RECOMMENDED_PERCENTAGE,
1213
DISK_SPACE_REQUIRED,
14+
DISK_SPACE_CHECK_TIMEOUT,
1315
DISK_SPACE_REQUIRED_MARGIN_PERCENTAGE,
1416
stateDirectoryPath,
1517
} from '../config';
@@ -18,7 +20,8 @@ import { CardanoNode } from '../cardano/CardanoNode';
1820
import type { CheckDiskSpaceResponse } from '../../common/types/no-disk-space.types';
1921

2022
const getDiskCheckReport = async (
21-
path: string
23+
path: string,
24+
timeout: number = DISK_SPACE_CHECK_TIMEOUT
2225
): Promise<CheckDiskSpaceResponse> => {
2326
const initialReport: CheckDiskSpaceResponse = {
2427
isNotEnoughDiskSpace: false,
@@ -32,22 +35,37 @@ const getDiskCheckReport = async (
3235
isError: false,
3336
};
3437

35-
try {
36-
const { free, size } = await checkDiskSpace(path);
37-
logger.info('[DISK-SPACE-DEBUG] Disk space check completed', {
38-
free,
39-
size,
40-
});
41-
return {
42-
...initialReport,
43-
diskSpaceAvailableRaw: free,
44-
diskSpaceAvailable: prettysize(free),
45-
diskTotalSpace: size,
46-
};
47-
} catch (error) {
48-
logger.error('[DISK-SPACE-DEBUG] Error getting diskCheckReport', error);
49-
return { ...initialReport, isError: true };
50-
}
38+
return Promise.race([
39+
// Disk space check promise
40+
new Promise((resolve) => {
41+
checkDiskSpace(path)
42+
.then(({ free, size }) => {
43+
logger.info('[DISK-SPACE-DEBUG] Disk space check completed', {
44+
free,
45+
size,
46+
});
47+
resolve({
48+
...initialReport,
49+
diskSpaceAvailableRaw: free,
50+
diskSpaceAvailable: prettysize(free),
51+
diskTotalSpace: size,
52+
});
53+
})
54+
.catch((error) => {
55+
logger.error(
56+
'[DISK-SPACE-DEBUG] Error getting diskCheckReport',
57+
error
58+
);
59+
resolve({ ...initialReport, isError: true });
60+
});
61+
}),
62+
// Timeout promise
63+
new Promise((resolve) => {
64+
setTimeout(() => {
65+
resolve({ ...initialReport, isError: true });
66+
}, timeout);
67+
}),
68+
]);
5169
};
5270

5371
export const handleDiskSpace = (
@@ -70,6 +88,7 @@ export const handleDiskSpace = (
7088
logger.info(
7189
'[DISK-SPACE-DEBUG] We could not check disk space, but we will try to start cardano-node anyway'
7290
);
91+
resetInterval(DISK_SPACE_CHECK_DONT_BOTHER_ME_INTERVAL);
7392
} else {
7493
const diskSpaceMissing = Math.max(
7594
diskSpaceRequired - response.diskSpaceAvailableRaw,
@@ -160,17 +179,21 @@ export const handleDiskSpace = (
160179
}
161180
} catch (error) {
162181
logger.error('[DISK-SPACE-DEBUG] Unknown error', error);
163-
// Remove diskSpaceCheckInterval if set
164-
if (diskSpaceCheckInterval) {
165-
clearInterval(diskSpaceCheckInterval);
166-
// Reset to default check interval
167-
diskSpaceCheckIntervalLength = DISK_SPACE_CHECK_LONG_INTERVAL;
168-
}
182+
resetInterval(DISK_SPACE_CHECK_MEDIUM_INTERVAL);
169183
}
170184
await getDiskSpaceStatusChannel.send(response, mainWindow.webContents);
171185
return response;
172186
};
173187

188+
const resetInterval = (interval: number) => {
189+
// Remove diskSpaceCheckInterval if set
190+
if (diskSpaceCheckInterval) {
191+
clearInterval(diskSpaceCheckInterval);
192+
// Reset to default check interval
193+
diskSpaceCheckIntervalLength = interval;
194+
}
195+
};
196+
174197
let hadNotEnoughSpaceLeft: boolean = false;
175198

176199
const setDiskSpaceIntervalChecking = (interval) => {

0 commit comments

Comments
 (0)