Skip to content

Commit 3356880

Browse files
committed
fix: use groups handler for vdisk info
1 parent 766968b commit 3356880

File tree

9 files changed

+107
-131
lines changed

9 files changed

+107
-131
lines changed

src/components/VDisk/utils.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ import type {PreparedVDisk} from '../../utils/disks/types';
44
export function getVDiskLink(data: PreparedVDisk, query: {database: string | undefined}) {
55
return getVDiskPagePath(
66
{
7-
vDiskSlotId: data.VDiskSlotId,
87
pDiskId: data.PDiskId,
98
nodeId: data.NodeId,
10-
groupId: data.VDiskId?.GroupID,
119
vDiskId: data.StringifiedId,
1210
},
1311
query,

src/components/VDiskInfo/VDiskInfo.tsx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ export function VDiskInfo<T extends PreparedVDisk>({
6969
WriteThroughput,
7070
PDiskId,
7171
StringifiedId,
72-
VDiskId,
7372
NodeId,
7473
} = data || {};
7574

@@ -198,7 +197,6 @@ export function VDiskInfo<T extends PreparedVDisk>({
198197
NodeId: dNodeId,
199198
PDiskId: dPDiskId,
200199
VDiskSlotId: dVSlotId,
201-
VDiskId: dVdiskId,
202200
} = donor;
203201

204202
if (!id || !dVSlotId || !dNodeId || !dPDiskId) {
@@ -209,9 +207,7 @@ export function VDiskInfo<T extends PreparedVDisk>({
209207
{
210208
nodeId: dNodeId,
211209
pDiskId: dPDiskId,
212-
vDiskSlotId: dVSlotId,
213210
vDiskId: id,
214-
groupId: dVdiskId?.GroupID,
215211
},
216212
{database},
217213
);
@@ -244,11 +240,9 @@ export function VDiskInfo<T extends PreparedVDisk>({
244240
if (withVDiskPageLink) {
245241
const vDiskPagePath = getVDiskPagePath(
246242
{
247-
vDiskSlotId: VDiskSlotId,
248243
pDiskId: PDiskId,
249244
nodeId: NodeId,
250245
vDiskId: StringifiedId,
251-
groupId: VDiskId?.GroupID,
252246
},
253247
{database},
254248
);

src/containers/PDiskPage/PDiskSpaceDistribution/PDiskSpaceDistribution.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,9 @@ function Slot<T extends SlotItemType>({item, pDiskId, nodeId}: SlotProps<T>) {
8282
valueIsDefined(pDiskId) &&
8383
valueIsDefined(nodeId)
8484
? getVDiskPagePath({
85-
vDiskSlotId: item.SlotData.VDiskSlotId,
8685
pDiskId,
8786
nodeId,
8887
vDiskId: item.SlotData.StringifiedId,
89-
groupId: item.SlotData.VDiskId?.GroupID,
9088
})
9189
: undefined;
9290

src/containers/Tenant/Healthcheck/components/HealthcheckIssueDetails/StorageLocation.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,6 @@ function VDiskInfo({location}: StorageSectionProps) {
124124
vDiskId: id,
125125
nodeId: node?.id,
126126
pDiskId: undefined,
127-
groupId: undefined,
128-
vDiskSlotId: undefined,
129127
},
130128
{database},
131129
)}

src/containers/VDiskPage/VDiskPage.tsx

Lines changed: 38 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {vDiskApi} from '../../store/reducers/vdisk/vdisk';
2323
import type {ModifyDiskResponse} from '../../types/api/modifyDisk';
2424
import type {TVDiskID} from '../../types/api/vdisk';
2525
import {cn} from '../../utils/cn';
26-
import {getSeverityColor, getVDiskSlotBasedId} from '../../utils/disks/helpers';
26+
import {getSeverityColor} from '../../utils/disks/helpers';
2727
import {useAutoRefreshInterval, useTypedDispatch} from '../../utils/hooks';
2828
import {
2929
useIsUserAllowedToMakeChanges,
@@ -69,54 +69,27 @@ export function VDiskPage() {
6969
const newDiskApiAvailable = useDiskPagesAvailable();
7070
const isViewerUser = useIsViewerUser();
7171

72-
const [
73-
{
74-
nodeId,
75-
pDiskId,
76-
vDiskSlotId,
77-
vDiskId: vDiskIdParam,
78-
activeTab,
79-
database: databaseParam,
80-
groupId,
81-
},
82-
] = useQueryParams({
83-
nodeId: StringParam,
84-
pDiskId: StringParam,
85-
vDiskSlotId: StringParam,
86-
vDiskId: StringParam,
87-
activeTab: StringParam,
88-
database: StringParam,
89-
groupId: StringParam,
90-
});
72+
const [{nodeId, pDiskId, vDiskId: vDiskIdParam, activeTab, database: databaseParam}] =
73+
useQueryParams({
74+
nodeId: StringParam,
75+
pDiskId: StringParam,
76+
vDiskId: StringParam,
77+
activeTab: StringParam,
78+
database: StringParam,
79+
});
9180
const database = databaseParam ?? undefined;
9281

9382
const vDiskTab = vDiskTabSchema.parse(activeTab);
94-
React.useEffect(() => {
95-
if (isViewerUser) {
96-
dispatch(setHeaderBreadcrumbs('vDisk', {nodeId, pDiskId, vDiskSlotId}));
97-
} else {
98-
dispatch(
99-
setHeaderBreadcrumbs('vDisk', {
100-
groupId: groupId,
101-
tenantName: database,
102-
vDiskSlotId,
103-
}),
104-
);
105-
}
106-
}, [dispatch, nodeId, pDiskId, vDiskSlotId, isViewerUser, groupId, database]);
10783

10884
const [autoRefreshInterval] = useAutoRefreshInterval();
10985

11086
const params = React.useMemo(() => {
111-
if (!isNil(nodeId) && !isNil(pDiskId) && !isNil(vDiskSlotId) && isViewerUser) {
112-
return {nodeId, pDiskId, vDiskSlotId, database};
113-
}
11487
if (!isNil(vDiskIdParam)) {
115-
return {vDiskId: vDiskIdParam, database};
88+
return {vDiskId: vDiskIdParam, nodeId: nodeId?.toString(), database};
11689
}
11790

11891
return skipToken;
119-
}, [nodeId, pDiskId, vDiskSlotId, vDiskIdParam, database, isViewerUser]);
92+
}, [nodeId, vDiskIdParam, database]);
12093
const {
12194
currentData: vDiskData,
12295
isFetching,
@@ -125,6 +98,30 @@ export function VDiskPage() {
12598
pollingInterval: autoRefreshInterval,
12699
});
127100

101+
const vDiskSlotId = vDiskData?.VDiskSlotId;
102+
103+
React.useEffect(() => {
104+
if (isViewerUser) {
105+
dispatch(setHeaderBreadcrumbs('vDisk', {nodeId, pDiskId, vDiskSlotId}));
106+
} else {
107+
dispatch(
108+
setHeaderBreadcrumbs('vDisk', {
109+
groupId: vDiskData?.VDiskId?.GroupID,
110+
tenantName: database,
111+
vDiskSlotId,
112+
}),
113+
);
114+
}
115+
}, [
116+
dispatch,
117+
nodeId,
118+
pDiskId,
119+
isViewerUser,
120+
database,
121+
vDiskData?.VDiskId?.GroupID,
122+
vDiskSlotId,
123+
]);
124+
128125
const loading = isFetching && vDiskData === undefined;
129126
const {NodeHost, NodeId, NodeType, NodeDC, PDiskId, PDiskType, Severity, VDiskId} =
130127
vDiskData || {};
@@ -167,12 +164,14 @@ export function VDiskPage() {
167164
}
168165
};
169166

167+
const vDiskId = vDiskData?.StringifiedId || (loading ? undefined : vDiskIdParam);
168+
170169
const handleAfterEvictVDisk = () => {
171170
dispatch(
172171
api.util.invalidateTags([
173172
{
174173
type: 'VDiskData',
175-
id: getVDiskSlotBasedId(nodeId || 0, pDiskId || 0, vDiskSlotId || 0),
174+
id: vDiskId?.toString(),
176175
},
177176
'StorageData',
178177
]),
@@ -214,8 +213,6 @@ export function VDiskPage() {
214213
);
215214
};
216215

217-
const vDiskId = vDiskData?.StringifiedId || (loading ? undefined : vDiskIdParam);
218-
219216
const renderPageTitle = () => {
220217
return (
221218
<EntityPageTitle
@@ -269,9 +266,7 @@ export function VDiskPage() {
269266
{
270267
nodeId: nodeId?.toString(),
271268
pDiskId: pDiskId?.toString(),
272-
vDiskSlotId: vDiskSlotId?.toString(),
273269
vDiskId: vDiskId?.toString(),
274-
groupId: groupId?.toString(),
275270
},
276271
{activeTab: id, database},
277272
);

src/routes.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,8 @@ export function getPDiskPagePath(
123123
export function getVDiskPagePath(
124124
// provide all of the params to functions to ensure nothing was forgotten
125125
params: {
126-
vDiskSlotId: string | number | undefined;
127126
pDiskId: string | number | undefined;
128127
nodeId: string | number | undefined;
129-
groupId: string | number | undefined;
130128
vDiskId: string | undefined;
131129
},
132130
query: {database: string | undefined; activeTab?: string} = {database: undefined},

src/services/api/viewer.ts

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -527,34 +527,30 @@ export class ViewerAPI extends BaseYdbAPI {
527527
}
528528

529529
getVDiskInfo(
530-
params:
531-
| {
532-
vDiskSlotId: string | number;
533-
pDiskId: string | number;
534-
nodeId: string | number;
535-
database?: string;
536-
}
537-
| {
538-
vDiskId: string | number;
539-
database?: string;
540-
},
530+
{
531+
pDiskId,
532+
nodeId,
533+
database,
534+
vDiskId,
535+
}: {
536+
pDiskId?: string | number;
537+
nodeId?: string | number;
538+
database?: string;
539+
vDiskId: string | number;
540+
},
541541
{concurrentId, signal}: AxiosOptions = {},
542542
) {
543-
let filter = '';
544-
let nodeId;
545-
if ('vDiskId' in params) {
546-
filter = `(VDiskId=${params.vDiskId})`;
547-
} else {
548-
const {pDiskId, vDiskSlotId} = params;
549-
filter = `(PDiskId=${pDiskId};VDiskSlotId=${vDiskSlotId})`;
550-
nodeId = params.nodeId;
551-
}
543+
const filterParams = {VDiskId: vDiskId, PDiskId: pDiskId};
544+
const normalizedFilterParams = Object.entries(filterParams).filter(([_key, value]) =>
545+
Boolean(value),
546+
) as [string, string][];
547+
const filter = `(${normalizedFilterParams.map(([key, value]) => `${key}=${value}`).join(';')})`;
552548
return this.get<TEvVDiskStateResponse>(
553549
this.getPath('/viewer/json/vdiskinfo?enums=true'),
554550
{
555551
node_id: nodeId,
556552
filter: filter,
557-
database: params.database,
553+
database,
558554
},
559555
{concurrentId, requestConfig: {signal}},
560556
);

src/store/reducers/vdisk/utils.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import type {TEvPDiskStateResponse} from '../../../types/api/pdisk';
1+
import type {StorageGroupsResponse} from '../../../types/api/storage';
22
import type {TEvSystemStateResponse} from '../../../types/api/systemState';
3-
import type {TEvVDiskStateResponse} from '../../../types/api/vdisk';
43
import {
54
prepareWhiteboardPDiskData,
65
prepareWhiteboardVDiskData,
@@ -9,15 +8,19 @@ import {prepareNodeSystemState} from '../../../utils/nodes';
98

109
import type {VDiskData} from './types';
1110

12-
export function prepareVDiskDataResponse([vDiskResponse, pDiskResponse, nodeResponse]: [
13-
TEvVDiskStateResponse,
14-
TEvPDiskStateResponse | undefined,
15-
TEvSystemStateResponse | undefined,
16-
]): VDiskData {
17-
const rawVDisk = vDiskResponse.VDiskStateInfo?.[0];
18-
const preparedVDisk = prepareWhiteboardVDiskData(rawVDisk);
19-
20-
const rawPDisk = pDiskResponse?.PDiskStateInfo?.[0];
11+
export function prepareVDiskDataResponse(
12+
[storageGroupResponse, nodeResponse]: [
13+
StorageGroupsResponse,
14+
TEvSystemStateResponse | undefined,
15+
],
16+
vDiskId: string,
17+
): VDiskData {
18+
const rawVDisk = storageGroupResponse?.StorageGroups?.[0].VDisks?.find(
19+
({VDiskId}) => VDiskId === vDiskId,
20+
);
21+
const preparedVDisk = prepareWhiteboardVDiskData(rawVDisk?.Whiteboard);
22+
23+
const rawPDisk = rawVDisk?.PDisk?.Whiteboard;
2124
const preparedPDisk = prepareWhiteboardPDiskData(rawPDisk);
2225

2326
const rawNode = nodeResponse?.SystemStateInfo?.[0];

0 commit comments

Comments
 (0)