From 106d976ba8f6812e49de448efd4244a3d2cee324 Mon Sep 17 00:00:00 2001 From: Anton Standrik Date: Thu, 27 Mar 2025 14:50:09 +0300 Subject: [PATCH 1/3] fix: whole tablet family for tabletPage --- src/containers/Tablet/Tablet.tsx | 14 +++++++-- .../components/TabletTable/TabletTable.tsx | 25 +++++++++++++--- src/services/api/viewer.ts | 4 +-- src/store/reducers/tablet.ts | 30 ++++++++----------- 4 files changed, 47 insertions(+), 26 deletions(-) diff --git a/src/containers/Tablet/Tablet.tsx b/src/containers/Tablet/Tablet.tsx index 4a45973ba6..df5a578abd 100644 --- a/src/containers/Tablet/Tablet.tsx +++ b/src/containers/Tablet/Tablet.tsx @@ -115,7 +115,9 @@ export function Tablet() { {error ? : null} - {currentData ? : null} + {currentData ? ( + + ) : null} ); @@ -125,10 +127,12 @@ function TabletContent({ id, tablet, history, + database, }: { id: string; tablet: TTabletStateInfo; history: ITabletPreparedHistoryItem[]; + database?: string; }) { const isEmpty = !Object.keys(tablet).length; const {Overall, HiveId, FollowerId} = tablet; @@ -150,7 +154,7 @@ function TabletContent({ - + ); } @@ -159,9 +163,11 @@ function TabletTabs({ id, hiveId, history, + database, }: { id: string; hiveId?: string; + database?: string; history: ITabletPreparedHistoryItem[]; }) { const [{activeTab, ...restParams}, setParams] = useQueryParams(tabletPageQueryParams); @@ -200,7 +206,9 @@ function TabletTabs({ }} /> - {tabletTab === 'history' ? : null} + {tabletTab === 'history' ? ( + + ) : null} {tabletTab === 'channels' && !noAdvancedInfo ? ( ) : null} diff --git a/src/containers/Tablet/components/TabletTable/TabletTable.tsx b/src/containers/Tablet/components/TabletTable/TabletTable.tsx index d63b51c7b5..749cc09d6d 100644 --- a/src/containers/Tablet/components/TabletTable/TabletTable.tsx +++ b/src/containers/Tablet/components/TabletTable/TabletTable.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type {Column} from '@gravity-ui/react-data-table'; import DataTable from '@gravity-ui/react-data-table'; @@ -6,12 +8,16 @@ import {InternalLink} from '../../../../components/InternalLink/InternalLink'; import {ResizeableDataTable} from '../../../../components/ResizeableDataTable/ResizeableDataTable'; import {TabletState} from '../../../../components/TabletState/TabletState'; import {TabletUptime} from '../../../../components/UptimeViewer/UptimeViewer'; +import {getTabletPagePath} from '../../../../routes'; import type {ITabletPreparedHistoryItem} from '../../../../types/store/tablet'; import {getDefaultNodePath} from '../../../Node/NodePages'; const TABLET_COLUMNS_WIDTH_LS_KEY = 'tabletTableColumnsWidth'; -const columns: Column[] = [ +const getColumns: (props: { + database?: string; + tabletId: string; +}) => Column[] = ({database, tabletId}) => [ { name: 'Generation', align: DataTable.RIGHT, @@ -32,10 +38,15 @@ const columns: Column[] = [ render: ({row}) => , }, { - name: 'Follower ID', + name: 'Tablet', sortable: false, render: ({row}) => { - return row.leader ? 'leader' : row.followerId; + const tabletPath = getTabletPagePath(tabletId, { + database, + followerId: row.leader ? undefined : row.followerId?.toString(), + }); + const tabletName = `${tabletId}${row.followerId ? `.${row.followerId}` : ''}`; + return {tabletName}; }, }, { @@ -65,9 +76,15 @@ const TABLE_SETTINGS = { interface TabletTableProps { history: ITabletPreparedHistoryItem[]; + database?: string; + tabletId: string; } -export const TabletTable = ({history}: TabletTableProps) => { +export const TabletTable = ({history, database, tabletId}: TabletTableProps) => { + const columns = React.useMemo(() => { + return getColumns({database, tabletId}); + }, [database, tabletId]); + return ( ( @@ -288,7 +288,7 @@ export class ViewerAPI extends BaseYdbAPI { { enums: true, database, - filter: `(TabletId=${id})`, + filter: `(TabletId=${id};FollowerId=${followerId || 0};State!=Dead)`, }, { concurrentId, diff --git a/src/store/reducers/tablet.ts b/src/store/reducers/tablet.ts index b0a332fee8..8e3d8a70f1 100644 --- a/src/store/reducers/tablet.ts +++ b/src/store/reducers/tablet.ts @@ -17,7 +17,7 @@ export const tabletApi = api.injectEndpoints({ ) => { try { const [tabletResponseData, historyResponseData, nodesList] = await Promise.all([ - window.api.viewer.getTablet({id, database}, {signal}), + window.api.viewer.getTablet({id, database, followerId}, {signal}), window.api.viewer.getTabletHistory({id, database}, {signal}), window.api.viewer.getNodesList({signal}), ]); @@ -27,29 +27,25 @@ export const tabletApi = api.injectEndpoints({ ITabletPreparedHistoryItem[] >((list, nodeId) => { const tabletInfo = historyResponseData[nodeId]?.TabletStateInfo; - if (tabletInfo && tabletInfo.length) { - const leaderTablet = tabletInfo.find((t) => t.Leader) || tabletInfo[0]; - const {ChangeTime, Generation, State, Leader, FollowerId} = - leaderTablet; + tabletInfo?.forEach((tablet) => { + const {ChangeTime, Generation, State, Leader, FollowerId} = tablet; const fqdn = nodeHostsMap && nodeId ? nodeHostsMap.get(Number(nodeId))?.Host : undefined; - if (State !== 'Dead') { - list.push({ - nodeId, - generation: Generation, - changeTime: ChangeTime, - state: State, - leader: Leader, - followerId: FollowerId, - fqdn, - }); - } - } + list.push({ + nodeId, + generation: Generation, + changeTime: ChangeTime, + state: State, + leader: Leader, + followerId: FollowerId, + fqdn, + }); + }); return list; }, []); From 2d5862c6444c4f6e2af8850ced3a3e1c16cec74a Mon Sep 17 00:00:00 2001 From: Anton Standrik Date: Thu, 27 Mar 2025 14:57:27 +0300 Subject: [PATCH 2/3] fix: dead --- src/services/api/viewer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/api/viewer.ts b/src/services/api/viewer.ts index 3f2368c475..a676175c98 100644 --- a/src/services/api/viewer.ts +++ b/src/services/api/viewer.ts @@ -288,7 +288,7 @@ export class ViewerAPI extends BaseYdbAPI { { enums: true, database, - filter: `(TabletId=${id};FollowerId=${followerId || 0};State!=Dead)`, + filter: `(TabletId=${id};FollowerId=${followerId || 0})`, }, { concurrentId, @@ -307,7 +307,7 @@ export class ViewerAPI extends BaseYdbAPI { enums: true, merge: false, database, - filter: `(TabletId=${id})`, + filter: `(TabletId=${id};State!=Dead)`, }, { concurrentId, From b93025bccff08bb6232d90efcb627329ab51c38e Mon Sep 17 00:00:00 2001 From: Anton Standrik Date: Thu, 27 Mar 2025 15:21:35 +0300 Subject: [PATCH 3/3] fix: highlightRows --- src/containers/Tablet/components/TabletTable/TabletTable.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/containers/Tablet/components/TabletTable/TabletTable.tsx b/src/containers/Tablet/components/TabletTable/TabletTable.tsx index 749cc09d6d..be82147344 100644 --- a/src/containers/Tablet/components/TabletTable/TabletTable.tsx +++ b/src/containers/Tablet/components/TabletTable/TabletTable.tsx @@ -72,6 +72,7 @@ const getColumns: (props: { const TABLE_SETTINGS = { displayIndices: false, + highlightRows: true, }; interface TabletTableProps {