Skip to content

Commit 09f8e08

Browse files
committed
fix(Storage): expect arbitrary donors data
1 parent 6de345a commit 09f8e08

File tree

3 files changed

+47
-26
lines changed

3 files changed

+47
-26
lines changed

src/containers/Storage/StorageGroups/StorageGroups.tsx

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import cn from 'bem-cn-lite';
33
import DataTable, {Column, Settings, SortOrder} from '@yandex-cloud/react-data-table';
44
import {Popover, PopoverBehavior} from '@yandex-cloud/uikit';
55

6-
import Vdisk from '../Vdisk/Vdisk';
76
import {Stack} from '../../../components/Stack/Stack';
87
//@ts-ignore
98
import EntityStatus from '../../../components/EntityStatus/EntityStatus';
@@ -16,6 +15,9 @@ import {bytesToGB, bytesToSpeed} from '../../../utils/utils';
1615
//@ts-ignore
1716
import {stringifyVdiskId} from '../../../utils';
1817

18+
import Vdisk from '../Vdisk/Vdisk';
19+
import {isFullDonorData} from '../utils';
20+
1921
import './StorageGroups.scss';
2022

2123
enum TableColumnsIds {
@@ -197,34 +199,38 @@ function StorageGroups({data, tableSettings, visibleEntities, nodes}: StorageGro
197199
header: tableColumnsNames[TableColumnsIds.VDisks],
198200
render: ({value, row}) => (
199201
<div className={b('vdisks-wrapper')}>
200-
{_.map(value as TVDiskStateInfo[], (el) => (
201-
Array.isArray(el.Donors) && el.Donors.length > 0 ? (
202-
<Stack className={b('vdisks-item')} key={stringifyVdiskId(el.VDiskId)}>
203-
<Vdisk
204-
{...el}
205-
PoolName={row[TableColumnsIds.PoolName]}
206-
nodes={nodes}
207-
/>
208-
{el.Donors.map((donor) => (
202+
{_.map(value as TVDiskStateInfo[], (el) => {
203+
const donors = Array.isArray(el.Donors) ? el.Donors.filter(isFullDonorData) : [];
204+
205+
return (
206+
donors.length > 0 ? (
207+
<Stack className={b('vdisks-item')} key={stringifyVdiskId(el.VDiskId)}>
208+
<Vdisk
209+
{...el}
210+
PoolName={row[TableColumnsIds.PoolName]}
211+
nodes={nodes}
212+
/>
213+
{donors.map((donor) => (
214+
<Vdisk
215+
{...donor}
216+
// donor and acceptor are always in the same group
217+
PoolName={row[TableColumnsIds.PoolName]}
218+
nodes={nodes}
219+
key={stringifyVdiskId(donor.VDiskId)}
220+
/>
221+
))}
222+
</Stack>
223+
) : (
224+
<div className={b('vdisks-item')} key={stringifyVdiskId(el.VDiskId)}>
209225
<Vdisk
210-
{...donor}
211-
// donor and acceptor are always in the same group
226+
{...el}
212227
PoolName={row[TableColumnsIds.PoolName]}
213228
nodes={nodes}
214-
key={stringifyVdiskId(donor.VDiskId)}
215229
/>
216-
))}
217-
</Stack>
218-
) : (
219-
<div className={b('vdisks-item')} key={stringifyVdiskId(el.VDiskId)}>
220-
<Vdisk
221-
{...el}
222-
PoolName={row[TableColumnsIds.PoolName]}
223-
nodes={nodes}
224-
/>
225-
</div>
226-
)
227-
))}
230+
</div>
231+
)
232+
);
233+
})}
228234
</div>
229235
),
230236
align: DataTable.CENTER,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
1+
import type {TVDiskStateInfo, TVSlotId} from '../../../types/api/storage';
2+
13
export * from './constants';
4+
5+
export const isFullDonorData = (donor: TVDiskStateInfo | TVSlotId): donor is TVDiskStateInfo =>
6+
'VDiskId' in donor;

src/types/api/storage.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,15 @@ interface TVDiskID {
9696
VDisk?: string;
9797
}
9898

99+
export interface TVSlotId {
100+
/** uint32 */
101+
NodeId?: string;
102+
/** uint32 */
103+
PDiskId?: string;
104+
/** uint32 */
105+
VSlotId?: string;
106+
}
107+
99108
export interface TVDiskStateInfo {
100109
VDiskId?: TVDiskID;
101110
/** uint64 */
@@ -154,7 +163,8 @@ export interface TVDiskStateInfo {
154163
* VDisk actor instance guid
155164
*/
156165
InstanceGuid?: string;
157-
Donors?: TVDiskStateInfo[];
166+
// in reality it is `Donors: TVDiskStateInfo[] | TVSlotId[]`, but this way it is more error-proof
167+
Donors?: Array<TVDiskStateInfo | TVSlotId>;
158168

159169
/** VDisk (Skeleton) Front Queue Status */
160170
FrontQueues?: EFlag;

0 commit comments

Comments
 (0)