Skip to content

Commit e96bfac

Browse files
committed
[DDW-826] Fixed flow Issues
1 parent 83a9b63 commit e96bfac

File tree

4 files changed

+98
-94
lines changed

4 files changed

+98
-94
lines changed
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
// @flow
2+
23
export type CheckDiskSpaceResponse = {
34
isNotEnoughDiskSpace: boolean,
45
diskSpaceRequired: string,
56
diskSpaceMissing: string,
67
diskSpaceRecommended: string,
78
diskSpaceAvailable: string,
9+
hadNotEnoughSpaceLeft: boolean,
810
diskSpaceAvailableRaw: number,
911
diskTotalSpaceRaw: number,
10-
hadNotEnoughSpaceLeft: boolean,
12+
isError: boolean,
1113
};

source/main/utils/handleDiskSpace.js

Lines changed: 76 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +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_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';
1717
import { 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;

source/renderer/app/stores/NetworkStatusStore.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
// @flow
2-
import { observable, action, computed, runInAction } from 'mobx';
2+
import { action, computed, observable, runInAction } from 'mobx';
33
import moment from 'moment';
4-
import { isEqual, includes, get } from 'lodash';
4+
import { get, includes, isEqual } from 'lodash';
55
import Store from './lib/Store';
66
import Request from './lib/LocalizedRequest';
77
import {
88
ALLOWED_TIME_DIFFERENCE,
9-
NETWORK_STATUS_POLL_INTERVAL,
10-
NETWORK_CLOCK_POLL_INTERVAL,
11-
MAX_ALLOWED_STALL_DURATION,
129
DECENTRALIZATION_LEVEL_POLLING_INTERVAL,
10+
MAX_ALLOWED_STALL_DURATION,
11+
NETWORK_CLOCK_POLL_INTERVAL,
12+
NETWORK_STATUS_POLL_INTERVAL,
1313
} from '../config/timingConfig';
1414
import { INITIAL_DESIRED_POOLS_NUMBER } from '../config/stakingConfig';
1515
import { logger } from '../utils/logging';
1616
import {
1717
cardanoStateChangeChannel,
1818
cardanoTlsConfigChannel,
19-
restartCardanoNodeChannel,
2019
getCachedCardanoStatusChannel,
20+
restartCardanoNodeChannel,
2121
setCachedCardanoStatusChannel,
2222
} from '../ipc/cardano.ipc';
23+
import type {
24+
CardanoNodeState,
25+
CardanoStatus,
26+
TlsConfig,
27+
} from '../../../common/types/cardano-node.types';
2328
import { CardanoNodeStates } from '../../../common/types/cardano-node.types';
2429
import { getDiskSpaceStatusChannel } from '../ipc/getDiskSpaceChannel';
2530
import { getBlockReplayProgressChannel } from '../ipc/getBlockReplayChannel';
2631
import { getStateDirectoryPathChannel } from '../ipc/getStateDirectoryPathChannel';
2732
import type {
28-
GetNetworkInfoResponse,
33+
FutureEpoch,
2934
GetNetworkClockResponse,
35+
GetNetworkInfoResponse,
3036
GetNetworkParametersResponse,
3137
NextEpoch,
32-
FutureEpoch,
3338
TipInfo,
3439
} from '../api/network/types';
35-
import type {
36-
CardanoNodeState,
37-
CardanoStatus,
38-
TlsConfig,
39-
} from '../../../common/types/cardano-node.types';
4040
import type { CheckDiskSpaceResponse } from '../../../common/types/no-disk-space.types';
4141
import { TlsCertificateNotValidError } from '../api/nodes/errors';
4242
import { openLocalDirectoryChannel } from '../ipc/open-local-directory';
@@ -238,8 +238,8 @@ export default class NetworkStatusStore extends Store {
238238
return Date.now() - this._startTime;
239239
}
240240

241-
_checkDiskSpace(diskSpaceRequired?: number) {
242-
getDiskSpaceStatusChannel.send(diskSpaceRequired);
241+
_checkDiskSpace() {
242+
getDiskSpaceStatusChannel.send();
243243
}
244244

245245
_getStateDirectoryPath = async () => {

tests/app/e2e/steps/no-disk-space.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// @flow
2-
import { Given, When, Then } from 'cucumber';
3-
import type { Daedalus } from '../../../types';
2+
import {Given, Then, When} from 'cucumber';
3+
import type {Daedalus} from '../../../types';
44

55
declare var daedalus: Daedalus;
66
let diskSpaceRequired;
@@ -19,8 +19,8 @@ Given(/^I set the required space to 1 KB$/, () => {
1919
});
2020

2121
When(/^I check the disk space$/, function() {
22-
this.client.execute(diskSpace => {
23-
daedalus.stores.networkStatus._checkDiskSpace(diskSpace);
22+
this.client.execute(() => {
23+
daedalus.stores.networkStatus._checkDiskSpace();
2424
}, diskSpaceRequired);
2525
});
2626

0 commit comments

Comments
 (0)