Skip to content

Commit

Permalink
[DDW-780] Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Daniel Main committed Oct 26, 2021
1 parent 7f0bf03 commit 60d0670
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 44 deletions.
1 change: 1 addition & 0 deletions source/common/types/no-disk-space.types.js
Expand Up @@ -5,4 +5,5 @@ export type CheckDiskSpaceResponse = {
diskSpaceMissing: string,
diskSpaceRecommended: string,
diskSpaceAvailable: string,
hadNotEnoughSpaceLeft: boolean,
};
8 changes: 6 additions & 2 deletions source/main/cardano/CardanoNode.js
Expand Up @@ -529,8 +529,10 @@ export class CardanoNode {
}
} catch (error) {
_log.error('CardanoNode#restart: Could not restart cardano-node', error);
const { code, signal } = error || {};
await this._handleCardanoNodeError(code, signal);
if (this._state !== CardanoNodeStates.UNRECOVERABLE) {
const { code, signal } = error || {};
this._changeToState(CardanoNodeStates.ERRORED, code, signal);
}
return Promise.reject(error);
}
}
Expand Down Expand Up @@ -761,6 +763,8 @@ export class CardanoNode {
return _transitionListeners.onUpdated();
case CardanoNodeStates.CRASHED:
return _transitionListeners.onCrashed(...args);
case CardanoNodeStates.ERRORED:
return _transitionListeners.onError(...args);
case CardanoNodeStates.UNRECOVERABLE:
return _transitionListeners.onUnrecoverable();
default:
Expand Down
90 changes: 48 additions & 42 deletions source/main/utils/handleDiskSpace.js
Expand Up @@ -15,52 +15,20 @@ import {
} from '../config';
import { CardanoNodeStates } from '../../common/types/cardano-node.types';
import { CardanoNode } from '../cardano/CardanoNode';

const startStopCardanoNode = async (
cardanoNode: CardanoNode,
isNotEnoughDiskSpace: boolean
) => {
if (isNotEnoughDiskSpace) {
if (
cardanoNode.state !== CardanoNodeStates.STOPPING &&
cardanoNode.state !== CardanoNodeStates.STOPPED
) {
try {
logger.info('[DISK-SPACE-DEBUG] Stopping cardano node');
await cardanoNode.stop();
} catch (error) {
logger.error('[DISK-SPACE-DEBUG] Cannot stop cardano node', error);
}
}
} else if (
// Happens after the user made more disk space
cardanoNode.state !== CardanoNodeStates.STARTING &&
cardanoNode.state !== CardanoNodeStates.RUNNING
) {
try {
logger.info(
'[DISK-SPACE-DEBUG] restart cardano node after freeing up disk space'
);
if (cardanoNode._startupTries > 0) await cardanoNode.restart();
else await cardanoNode.start();
} catch (error) {
logger.error(
'[DISK-SPACE-DEBUG] Daedalus tried to restart, but failed',
error
);
}
}
};
import type { CheckDiskSpaceResponse } from '../../common/types/no-disk-space.types';

export const handleDiskSpace = (
mainWindow: BrowserWindow,
cardanoNode: CardanoNode
) => {
): Function => {
let diskSpaceCheckInterval;
let diskSpaceCheckIntervalLength = DISK_SPACE_CHECK_LONG_INTERVAL; // Default check interval
let isNotEnoughDiskSpace = false; // Default check state

const handleCheckDiskSpace = async (forceDiskSpaceRequired?: number) => {
const handleCheckDiskSpace = async (
hadNotEnoughSpaceLeft: boolean,
forceDiskSpaceRequired?: number
): Promise<CheckDiskSpaceResponse> => {
const diskSpaceRequired = forceDiskSpaceRequired || DISK_SPACE_REQUIRED;
try {
const {
Expand Down Expand Up @@ -109,10 +77,44 @@ export const handleDiskSpace = (
diskSpaceMissing: prettysize(diskSpaceMissing),
diskSpaceRecommended: prettysize(diskSpaceRecommended),
diskSpaceAvailable: prettysize(diskSpaceAvailable),
hadNotEnoughSpaceLeft,
};
if (isNotEnoughDiskSpace)
if (isNotEnoughDiskSpace) {
response.hadNotEnoughSpaceLeft = true;
logger.info('Not enough disk space', { response });
await startStopCardanoNode(cardanoNode, isNotEnoughDiskSpace);
if (
cardanoNode.state !== CardanoNodeStates.STOPPING &&
cardanoNode.state !== CardanoNodeStates.STOPPED
) {
try {
logger.info('[DISK-SPACE-DEBUG] Stopping cardano node');
await cardanoNode.stop();
} catch (error) {
logger.error('[DISK-SPACE-DEBUG] Cannot stop cardano node', error);
}
}
} else {
if (
// Happens after the user made more disk space
cardanoNode.state === CardanoNodeStates.STOPPED &&
cardanoNode.state !== CardanoNodeStates.STOPPING &&
response.hadNotEnoughSpaceLeft
) {
try {
logger.info(
'[DISK-SPACE-DEBUG] restart cardano node after freeing up disk space'
);
if (cardanoNode._startupTries > 0) await cardanoNode.restart();
else await cardanoNode.start();
} catch (error) {
logger.error(
'[DISK-SPACE-DEBUG] Daedalus tried to restart, but failed',
error
);
}
}
response.hadNotEnoughSpaceLeft = false;
}
await getDiskSpaceStatusChannel.send(response, mainWindow.webContents);
return response;
} catch (error) {
Expand All @@ -128,16 +130,20 @@ export const handleDiskSpace = (
diskSpaceMissing: '',
diskSpaceRecommended: '',
diskSpaceAvailable: '',
hadNotEnoughSpaceLeft: false,
};
await getDiskSpaceStatusChannel.send(response, mainWindow.webContents);
return response;
}
};

let hadNotEnoughSpaceLeft: boolean = false;

const setDiskSpaceIntervalChecking = (interval) => {
clearInterval(diskSpaceCheckInterval);
diskSpaceCheckInterval = setInterval(async () => {
await handleCheckDiskSpace();
const response = await handleCheckDiskSpace(hadNotEnoughSpaceLeft);
hadNotEnoughSpaceLeft = response.hadNotEnoughSpaceLeft;
}, interval);
diskSpaceCheckIntervalLength = interval;
};
Expand All @@ -146,7 +152,7 @@ export const handleDiskSpace = (
setDiskSpaceIntervalChecking(diskSpaceCheckIntervalLength);

getDiskSpaceStatusChannel.onReceive((diskSpaceRequired) =>
handleCheckDiskSpace(diskSpaceRequired)
handleCheckDiskSpace(hadNotEnoughSpaceLeft, diskSpaceRequired)
);

return handleCheckDiskSpace;
Expand Down

0 comments on commit 60d0670

Please sign in to comment.