Skip to content

Commit 4f08ff4

Browse files
fix: use both BSC and Whiteboard for disks
1 parent 3287f99 commit 4f08ff4

20 files changed

+976
-163
lines changed

src/components/PDiskPopup/PDiskPopup.tsx

+19-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {EFlag} from '../../types/api/enums';
66
import {valueIsDefined} from '../../utils';
77
import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
88
import {createPDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
9-
import {getPDiskId} from '../../utils/disks/helpers';
109
import type {PreparedPDisk} from '../../utils/disks/types';
1110
import {useTypedSelector} from '../../utils/hooks';
1211
import {bytesToGB} from '../../utils/utils';
@@ -21,12 +20,23 @@ export const preparePDiskData = (
2120
nodeHost?: string,
2221
withDeveloperUILink?: boolean,
2322
) => {
24-
const {AvailableSize, TotalSize, State, PDiskId, NodeId, Path, Realtime, Type, Device} = data;
23+
const {
24+
AvailableSize,
25+
TotalSize,
26+
State,
27+
PDiskId,
28+
NodeId,
29+
StringifiedId,
30+
Path,
31+
Realtime,
32+
Type,
33+
Device,
34+
} = data;
2535

2636
const pdiskData: InfoViewerItem[] = [
2737
{
2838
label: 'PDisk',
29-
value: getPDiskId(NodeId, PDiskId) ?? EMPTY_DATA_PLACEHOLDER,
39+
value: StringifiedId ?? EMPTY_DATA_PLACEHOLDER,
3040
},
3141
{label: 'State', value: State || 'not available'},
3242
{label: 'Type', value: Type || 'unknown'},
@@ -44,10 +54,12 @@ export const preparePDiskData = (
4454
pdiskData.push({label: 'Path', value: Path});
4555
}
4656

47-
pdiskData.push({
48-
label: 'Available',
49-
value: `${bytesToGB(AvailableSize)} of ${bytesToGB(TotalSize)}`,
50-
});
57+
if (!isNaN(Number(TotalSize))) {
58+
pdiskData.push({
59+
label: 'Available',
60+
value: `${bytesToGB(AvailableSize)} of ${bytesToGB(TotalSize)}`,
61+
});
62+
}
5163

5264
if (Realtime && errorColors.includes(Realtime)) {
5365
pdiskData.push({label: 'Realtime', value: Realtime});

src/components/VDiskPopup/VDiskPopup.tsx

+1-15
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {EFlag} from '../../types/api/enums';
88
import {valueIsDefined} from '../../utils';
99
import {cn} from '../../utils/cn';
1010
import {EMPTY_DATA_PLACEHOLDER} from '../../utils/constants';
11-
import {stringifyVdiskId} from '../../utils/dataFormatters/dataFormatters';
1211
import {createVDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
1312
import {isFullVDiskData} from '../../utils/disks/helpers';
1413
import type {PreparedVDisk, UnavailableDonor} from '../../utils/disks/types';
@@ -203,22 +202,9 @@ export const VDiskPopup = ({data}: VDiskPopupProps) => {
203202
if ('Donors' in data && data.Donors) {
204203
const donors = data.Donors;
205204
for (const donor of donors) {
206-
const isFullDonorData = isFullVDiskData(donor);
207205
donorsInfo.push({
208206
label: 'VDisk',
209-
value: (
210-
<InternalLink to={getVDiskLink(donor)}>
211-
{stringifyVdiskId(
212-
isFullDonorData
213-
? donor.VDiskId
214-
: {
215-
NodeId: donor.NodeId,
216-
PDiskId: donor.PDiskId,
217-
VSlotId: donor.VSlotId,
218-
},
219-
)}
220-
</InternalLink>
221-
),
207+
value: <InternalLink to={getVDiskLink(donor)}>{donor.StringifiedId}</InternalLink>,
222208
});
223209
}
224210
}

src/containers/Storage/Disks/Disks.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {Flex, useLayoutContext} from '@gravity-ui/uikit';
55
import {VDisk} from '../../../components/VDisk/VDisk';
66
import {valueIsDefined} from '../../../utils';
77
import {cn} from '../../../utils/cn';
8-
import {getPDiskId} from '../../../utils/disks/helpers';
98
import type {PreparedVDisk} from '../../../utils/disks/types';
109
import {PDisk} from '../PDisk';
1110
import type {StorageViewContext} from '../types';
@@ -54,7 +53,7 @@ export function Disks({vDisks = [], viewContext}: DisksProps) {
5453
<div className={b('pdisks-wrapper')}>
5554
{vDisks?.map((vDisk) => (
5655
<PDiskItem
57-
key={getPDiskId(vDisk.NodeId, vDisk?.PDisk?.PDiskId)}
56+
key={vDisk?.PDisk?.StringifiedId}
5857
vDisk={vDisk}
5958
highlightedVDisk={highlightedVDisk}
6059
setHighlightedVDisk={setHighlightedVDisk}

src/store/reducers/node/selectors.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {createSelector} from '@reduxjs/toolkit';
22

33
import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters';
4-
import {preparePDiskData, prepareVDiskData} from '../../../utils/disks/prepareDisks';
4+
import {prepareWhiteboardVDiskData} from '../../../utils/disks/prepareDisks';
55
import type {RootState} from '../../defaultStore';
66

77
import {nodeApi} from './node';
@@ -29,14 +29,13 @@ export const selectNodeStructure = createSelector(
2929
const groups = pool.Groups;
3030
groups?.forEach((group) => {
3131
const vDisks = group.VDisks?.filter((el) => el.NodeId === nodeId).map(
32-
prepareVDiskData,
32+
prepareWhiteboardVDiskData,
3333
);
3434
vDisks?.forEach((vd) => {
3535
const vDiskId = stringifyVdiskId(vd.VDiskId);
36-
const preparedPDisk = preparePDiskData(vd.PDisk);
37-
const pDiskId = preparedPDisk.PDiskId;
36+
const pDiskId = vd.PDisk?.PDiskId;
3837
if (!structure[String(pDiskId)]) {
39-
structure[String(pDiskId)] = {vDisks: {}, ...preparedPDisk};
38+
structure[String(pDiskId)] = {vDisks: {}, ...vd.PDisk};
4039
}
4140
structure[String(pDiskId)].vDisks[vDiskId] = {
4241
...vd,

src/store/reducers/node/types.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
import type {TVDiskStateInfo} from '../../../types/api/vdisk';
2-
import type {PreparedPDisk} from '../../../utils/disks/types';
1+
import type {PreparedPDisk, PreparedVDisk} from '../../../utils/disks/types';
32
import type {PreparedNodeSystemState} from '../../../utils/nodes';
43

54
interface RawStructurePDisk extends PreparedPDisk {
6-
vDisks: Record<string, TVDiskStateInfo>;
5+
vDisks: Record<string, PreparedVDisk>;
76
}
87

98
export type RawNodeStructure = Record<string, RawStructurePDisk>;
109

11-
export interface PreparedStructureVDisk extends TVDiskStateInfo {
10+
export interface PreparedStructureVDisk extends PreparedVDisk {
1211
id: string;
1312
order: number;
1413
}

src/store/reducers/pdisk/utils.ts

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import type {TPDiskInfoResponse} from '../../../types/api/pdisk';
22
import type {TEvSystemStateResponse} from '../../../types/api/systemState';
33
import {getArray, valueIsDefined} from '../../../utils';
4-
import {preparePDiskData, prepareVDiskData} from '../../../utils/disks/prepareDisks';
4+
import {
5+
prepareWhiteboardPDiskData,
6+
prepareWhiteboardVDiskData,
7+
} from '../../../utils/disks/prepareDisks';
58
import {prepareNodeSystemState} from '../../../utils/nodes';
69

710
import type {PDiskData, SlotItem} from './types';
@@ -18,7 +21,10 @@ export function preparePDiskDataResponse([pdiskResponse = {}, nodeResponse]: [
1821
const {PDisk: WhiteboardPDiskData = {}, VDisks: WhiteboardVDisksData = []} = Whiteboard;
1922
const {PDisk: BSCPDiskData = {}} = BSC;
2023

21-
const preparedPDisk = preparePDiskData(WhiteboardPDiskData, BSCPDiskData);
24+
const preparedPDisk = prepareWhiteboardPDiskData({
25+
...BSCPDiskData,
26+
...WhiteboardPDiskData,
27+
});
2228

2329
const NodeId = preparedPDisk.NodeId ?? preparedNode.NodeId;
2430

@@ -48,7 +54,9 @@ export function preparePDiskDataResponse([pdiskResponse = {}, nodeResponse]: [
4854
};
4955
}
5056

51-
const preparedVDisks = WhiteboardVDisksData.map((disk) => prepareVDiskData({...disk, NodeId}));
57+
const preparedVDisks = WhiteboardVDisksData.map((disk) =>
58+
prepareWhiteboardVDiskData({...disk, NodeId}),
59+
);
5260
preparedVDisks.sort((disk1, disk2) => Number(disk2.VDiskSlotId) - Number(disk1.VDiskSlotId));
5361

5462
const vdisksSlots: SlotItem<'vDisk'>[] = preparedVDisks.map((preparedVDisk) => {

0 commit comments

Comments
 (0)