Skip to content

Commit 1b181ee

Browse files
Copilotadameat
andcommitted
Fix donors display: add back to main UI and improve TVSlotId processing
Co-authored-by: adameat <[email protected]>
1 parent a7d356c commit 1b181ee

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

src/components/VDiskInfo/VDiskInfo.tsx

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import {cn} from '../../utils/cn';
99
import {
1010
formatStorageValuesToGb,
1111
formatUptimeInSeconds,
12+
stringifyVdiskId,
1213
} from '../../utils/dataFormatters/dataFormatters';
1314
import {createVDiskDeveloperUILink} from '../../utils/developerUI/developerUI';
14-
import {getSeverityColor} from '../../utils/disks/helpers';
15+
import {getSeverityColor, isFullVDiskData} from '../../utils/disks/helpers';
1516
import type {PreparedVDisk} from '../../utils/disks/types';
1617
import {useIsUserAllowedToMakeChanges} from '../../utils/hooks/useIsUserAllowedToMakeChanges';
1718
import {bytesToSpeed} from '../../utils/utils';
@@ -52,6 +53,7 @@ export function VDiskInfo<T extends PreparedVDisk>({
5253
Replicated,
5354
ReplicationProgress,
5455
ReplicationSecondsRemaining,
56+
Donors,
5557
VDiskState,
5658
VDiskSlotId,
5759
Kind,
@@ -188,6 +190,32 @@ export function VDiskInfo<T extends PreparedVDisk>({
188190
});
189191
}
190192

193+
// Show donors list when replication is in progress
194+
if (Replicated === false && VDiskState === EVDiskState.OK && Donors && Donors.length > 0) {
195+
const donorsList = Donors.map((donor) => {
196+
if (isFullVDiskData(donor)) {
197+
// Full VDisk data - use VDiskId if available
198+
return stringifyVdiskId(donor.VDiskId);
199+
} else {
200+
// TVSlotId data - construct from NodeId-PDiskId-VSlotId
201+
const {NodeId: dNodeId, PDiskId: dPDiskId, VSlotId} = donor;
202+
if (valueIsDefined(dNodeId) && valueIsDefined(dPDiskId) && valueIsDefined(VSlotId)) {
203+
return `${dNodeId}-${dPDiskId}-${VSlotId}`;
204+
}
205+
return null;
206+
}
207+
})
208+
.filter(Boolean)
209+
.join(', ');
210+
211+
if (donorsList) {
212+
rightColumn.push({
213+
label: vDiskInfoKeyset('donors'),
214+
value: donorsList,
215+
});
216+
}
217+
}
218+
191219
const diskParamsDefined =
192220
valueIsDefined(PDiskId) && valueIsDefined(NodeId) && valueIsDefined(VDiskSlotId);
193221

src/utils/disks/prepareDisks.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,27 @@ export function prepareWhiteboardVDiskData(
6363
const StringifiedId = stringifyVdiskId(VDiskId);
6464

6565
const preparedDonors = Donors?.map((donor) => {
66-
return prepareWhiteboardVDiskData({...donor, DonorMode: true});
67-
});
66+
// Handle both TVDiskStateInfo and TVSlotId donor types
67+
if (isFullVDiskData(donor)) {
68+
// Full VDisk data
69+
return prepareWhiteboardVDiskData({...donor, DonorMode: true});
70+
} else {
71+
// TVSlotId data - create a minimal PreparedVDisk
72+
const {NodeId: dNodeId, PDiskId: dPDiskId, VSlotId} = donor;
73+
const StringifiedId =
74+
valueIsDefined(dNodeId) && valueIsDefined(dPDiskId) && valueIsDefined(VSlotId)
75+
? `${dNodeId}-${dPDiskId}-${VSlotId}`
76+
: '';
77+
78+
return {
79+
NodeId: dNodeId,
80+
PDiskId: dPDiskId,
81+
VDiskSlotId: VSlotId,
82+
StringifiedId,
83+
DonorMode: true,
84+
} as PreparedVDisk;
85+
}
86+
}).filter((donor) => donor.StringifiedId);
6887

6988
return {
7089
...restVDiskFields,

0 commit comments

Comments
 (0)