@@ -5,13 +5,13 @@ import prettysize from 'prettysize';
55import { getDiskSpaceStatusChannel } from '../ipc/get-disk-space-status' ;
66import { logger } from './logging' ;
77import {
8- DISK_SPACE_REQUIRED ,
9- DISK_SPACE_REQUIRED_MARGIN_PERCENTAGE ,
108 DISK_SPACE_CHECK_LONG_INTERVAL ,
119 DISK_SPACE_CHECK_MEDIUM_INTERVAL ,
1210 DISK_SPACE_CHECK_SHORT_INTERVAL ,
13- DISK_SPACE_RECOMMENDED_PERCENTAGE ,
1411 DISK_SPACE_CHECK_TIMEOUT ,
12+ DISK_SPACE_RECOMMENDED_PERCENTAGE ,
13+ DISK_SPACE_REQUIRED ,
14+ DISK_SPACE_REQUIRED_MARGIN_PERCENTAGE ,
1515 stateDirectoryPath ,
1616} from '../config' ;
1717import { CardanoNodeStates } from '../../common/types/cardano-node.types' ;
@@ -22,13 +22,16 @@ const getDiskCheckReport = async (
2222 path : string ,
2323 timeout : number = DISK_SPACE_CHECK_TIMEOUT
2424) : Promise < CheckDiskSpaceResponse > => {
25- const initialReport = {
25+ const initialReport : CheckDiskSpaceResponse = {
2626 isNotEnoughDiskSpace : false ,
2727 diskSpaceRequired : '' ,
2828 diskSpaceMissing : '' ,
2929 diskSpaceRecommended : '' ,
3030 diskSpaceAvailable : '' ,
3131 hadNotEnoughSpaceLeft : false ,
32+ diskSpaceAvailableRaw : 0 ,
33+ diskTotalSpaceRaw : 0 ,
34+ isError : false ,
3235 } ;
3336
3437 return Promise . race ( [
@@ -43,7 +46,6 @@ const getDiskCheckReport = async (
4346 ...initialReport ,
4447 diskSpaceAvailableRaw : free ,
4548 diskTotalSpace : size ,
46- diskSpaceAvailable : prettysize ( free ) ,
4749 } ) ;
4850 } )
4951 . catch ( ( error ) => {
@@ -57,7 +59,7 @@ const getDiskCheckReport = async (
5759 // Timeout promise
5860 new Promise ( ( resolve ) => {
5961 setTimeout ( ( ) => {
60- resolve ( ) ;
62+ resolve ( { ... initialReport , isError : true } ) ;
6163 } , timeout ) ;
6264 } ) ,
6365 ] ) ;
@@ -77,73 +79,72 @@ export const handleDiskSpace = (
7779 ) : Promise < CheckDiskSpaceResponse > => {
7880 const diskSpaceRequired = forceDiskSpaceRequired || DISK_SPACE_REQUIRED ;
7981
80- try {
81- const response = await getDiskCheckReport ( stateDirectoryPath ) ;
82-
83- if ( response . diskSpaceAvailableRaw ) {
84- const diskSpaceMissing = Math . max (
85- diskSpaceRequired - response . diskSpaceAvailableRaw ,
86- 0
87- ) ;
88- const diskSpaceRecommended =
89- ( response . diskTotalSpaceRaw * DISK_SPACE_RECOMMENDED_PERCENTAGE ) /
90- 100 ;
91- const diskSpaceRequiredMargin =
92- diskSpaceRequired -
93- ( diskSpaceRequired * DISK_SPACE_REQUIRED_MARGIN_PERCENTAGE ) / 100 ;
94-
95- if ( response . diskSpaceAvailableRaw <= diskSpaceRequiredMargin ) {
96- if ( ! isNotEnoughDiskSpace ) {
97- // State change: transitioning from enough to not-enough disk space
98- setDiskSpaceIntervalChecking ( DISK_SPACE_CHECK_SHORT_INTERVAL ) ;
99- isNotEnoughDiskSpace = true ;
100- }
101- } else if ( response . diskSpaceAvailableRaw >= diskSpaceRequired ) {
102- const newDiskSpaceCheckIntervalLength =
103- response . diskSpaceAvailableRaw >= diskSpaceRequired * 2
104- ? DISK_SPACE_CHECK_LONG_INTERVAL
105- : DISK_SPACE_CHECK_MEDIUM_INTERVAL ;
106- if ( isNotEnoughDiskSpace ) {
107- // State change: transitioning from not-enough to enough disk space
108- setDiskSpaceIntervalChecking ( newDiskSpaceCheckIntervalLength ) ;
109- isNotEnoughDiskSpace = false ;
110- } else if (
111- newDiskSpaceCheckIntervalLength !== diskSpaceCheckIntervalLength
112- ) {
113- // Interval change: transitioning from medium to long interval (or vice versa)
114- // This is a special case in which we adjust the disk space check polling interval:
115- // - more than 2x of available space than required: LONG interval
116- // - less than 2x of available space than required: MEDIUM interval
117- setDiskSpaceIntervalChecking ( newDiskSpaceCheckIntervalLength ) ;
118- }
82+ const response = await getDiskCheckReport ( stateDirectoryPath ) ;
83+
84+ if ( ! response || response . isError ) {
85+ logger . info (
86+ '[DISK-SPACE-DEBUG] We could not check disk space, but we will try to start cardano-node anyway'
87+ ) ;
88+ } else {
89+ const diskSpaceMissing = Math . max (
90+ diskSpaceRequired - response . diskSpaceAvailableRaw ,
91+ 0
92+ ) ;
93+ const diskSpaceRecommended =
94+ ( response . diskTotalSpaceRaw * DISK_SPACE_RECOMMENDED_PERCENTAGE ) / 100 ;
95+ const diskSpaceRequiredMargin =
96+ diskSpaceRequired -
97+ ( diskSpaceRequired * DISK_SPACE_REQUIRED_MARGIN_PERCENTAGE ) / 100 ;
98+
99+ if ( response . diskSpaceAvailableRaw <= diskSpaceRequiredMargin ) {
100+ if ( ! isNotEnoughDiskSpace ) {
101+ // State change: transitioning from enough to not-enough disk space
102+ setDiskSpaceIntervalChecking ( DISK_SPACE_CHECK_SHORT_INTERVAL ) ;
103+ isNotEnoughDiskSpace = true ;
104+ }
105+ } else if ( response . diskSpaceAvailableRaw >= diskSpaceRequired ) {
106+ const newDiskSpaceCheckIntervalLength =
107+ response . diskSpaceAvailableRaw >= diskSpaceRequired * 2
108+ ? DISK_SPACE_CHECK_LONG_INTERVAL
109+ : DISK_SPACE_CHECK_MEDIUM_INTERVAL ;
110+ if ( isNotEnoughDiskSpace ) {
111+ // State change: transitioning from not-enough to enough disk space
112+ setDiskSpaceIntervalChecking ( newDiskSpaceCheckIntervalLength ) ;
113+ isNotEnoughDiskSpace = false ;
114+ } else if (
115+ newDiskSpaceCheckIntervalLength !== diskSpaceCheckIntervalLength
116+ ) {
117+ // Interval change: transitioning from medium to long interval (or vice versa)
118+ // This is a special case in which we adjust the disk space check polling interval:
119+ // - more than 2x of available space than required: LONG interval
120+ // - less than 2x of available space than required: MEDIUM interval
121+ setDiskSpaceIntervalChecking ( newDiskSpaceCheckIntervalLength ) ;
119122 }
120- response . isNotEnoughDiskSpace = isNotEnoughDiskSpace ;
121- response . diskSpaceRequired = prettysize ( diskSpaceRequired ) ;
122- response . diskSpaceMissing = prettysize ( diskSpaceMissing ) ;
123- response . diskSpaceRecommended = prettysize ( diskSpaceRecommended ) ;
124- response . hadNotEnoughSpaceLeft = hadNotEnoughSpaceLeft ;
125- } else {
126- logger . info (
127- '[ DISK - SPACE - DEBUG ] We could not check disk space , but we will try to start cardano - node anyway '
128- ) ;
129123 }
124+ response . isNotEnoughDiskSpace = isNotEnoughDiskSpace ;
125+ response . diskSpaceRequired = prettysize ( diskSpaceRequired ) ;
126+ response . diskSpaceMissing = prettysize ( diskSpaceMissing ) ;
127+ response . diskSpaceRecommended = prettysize ( diskSpaceRecommended ) ;
128+ response . diskSpaceAvailable = prettysize ( response ?. diskSpaceAvailableRaw ) ;
129+ response . hadNotEnoughSpaceLeft = hadNotEnoughSpaceLeft ;
130+ }
130131
131- const NO_SPACE_AND_CARDANO_NODE_CAN_BE_STOPPED =
132- isNotEnoughDiskSpace &&
133- cardanoNode . state !== CardanoNodeStates . STOPPING &&
134- cardanoNode . state !== CardanoNodeStates . STOPPED ;
135-
136- const CARDANO_NODE_CAN_BE_STARTED_FOR_THE_FIRST_TIME =
137- ! isNotEnoughDiskSpace &&
138- cardanoNode . state === CardanoNodeStates . STOPPED &&
139- cardanoNode . _startupTries === 0 ;
140-
141- const CARDANO_NODE_CAN_BE_STARTED_AFTER_FREEING_SPACE =
142- ! isNotEnoughDiskSpace &&
143- cardanoNode . state !== CardanoNodeStates . STOPPED &&
144- cardanoNode . state !== CardanoNodeStates . STOPPING &&
145- hadNotEnoughSpaceLeft ;
146-
132+ const NO_SPACE_AND_CARDANO_NODE_CAN_BE_STOPPED =
133+ isNotEnoughDiskSpace &&
134+ cardanoNode . state !== CardanoNodeStates . STOPPING &&
135+ cardanoNode . state !== CardanoNodeStates . STOPPED ;
136+
137+ const CARDANO_NODE_CAN_BE_STARTED_FOR_THE_FIRST_TIME =
138+ ! isNotEnoughDiskSpace &&
139+ cardanoNode . state === CardanoNodeStates . STOPPED &&
140+ cardanoNode . _startupTries === 0 ;
141+
142+ const CARDANO_NODE_CAN_BE_STARTED_AFTER_FREEING_SPACE =
143+ ! isNotEnoughDiskSpace &&
144+ cardanoNode . state !== CardanoNodeStates . STOPPED &&
145+ cardanoNode . state !== CardanoNodeStates . STOPPING &&
146+ hadNotEnoughSpaceLeft ;
147+ try {
147148 switch ( true ) {
148149 case NO_SPACE_AND_CARDANO_NODE_CAN_BE_STOPPED :
149150 try {
@@ -173,8 +174,6 @@ export const handleDiskSpace = (
173174 break ;
174175 default :
175176 }
176- await getDiskSpaceStatusChannel . send ( response , mainWindow . webContents ) ;
177- return response ;
178177 } catch ( error ) {
179178 logger . error ( '[DISK-SPACE-DEBUG] Unknown error' , error ) ;
180179 // Remove diskSpaceCheckInterval if set
@@ -185,6 +184,8 @@ export const handleDiskSpace = (
185184 }
186185 // TODO: What do we do here ? Errors checking disk space is already handled
187186 }
187+ await getDiskSpaceStatusChannel . send ( response , mainWindow . webContents ) ;
188+ return response ;
188189 } ;
189190
190191 let hadNotEnoughSpaceLeft : boolean = false ;
@@ -202,8 +203,9 @@ export const handleDiskSpace = (
202203 setDiskSpaceIntervalChecking ( diskSpaceCheckIntervalLength ) ;
203204
204205 getDiskSpaceStatusChannel . onReceive ( async ( ) => {
205- const report = await getDiskCheckReport ( stateDirectoryPath ) ;
206- await getDiskSpaceStatusChannel . send ( report , mainWindow . webContents ) ;
206+ const diskReport = await getDiskCheckReport ( stateDirectoryPath ) ;
207+ getDiskSpaceStatusChannel . send ( diskReport , mainWindow . webContents ) ;
208+ return diskReport ;
207209 } ) ;
208210
209211 return handleCheckDiskSpace ;
0 commit comments