@@ -5,11 +5,13 @@ import prettysize from 'prettysize';
55import { getDiskSpaceStatusChannel } from '../ipc/get-disk-space-status' ;
66import { logger } from './logging' ;
77import {
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';
1820import type { CheckDiskSpaceResponse } from '../../common/types/no-disk-space.types' ;
1921
2022const 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
5371export 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