Skip to content

Commit dc0df8a

Browse files
fix: update tenant storage (#726)
* use table storage for metric card if possible * do not format storage to same size * add explanations, rename storage types
1 parent 77aa474 commit dc0df8a

File tree

6 files changed

+48
-68
lines changed

6 files changed

+48
-68
lines changed

src/containers/Tenant/Diagnostics/TenantOverview/TenantOverview.tsx

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,28 +79,36 @@ export function TenantOverview({
7979
const {
8080
cpu,
8181
blobStorage,
82-
tableStorage,
82+
tabletStorage,
8383
memory,
8484
cpuUsage,
8585
blobStorageLimit,
86-
tableStorageLimit,
86+
tabletStorageLimit,
8787
memoryLimit,
8888
} = calculateTenantMetrics(tenant);
8989

90+
// If there is table storage limit (data_size_hard_quota),
91+
// use it for metric card instead of blob storage limit
92+
// When datasize exceeds or equals to quota
93+
// all write operations to the database are finished with error
94+
const isTabletStorageLimitSet = tabletStorageLimit && tabletStorageLimit > 0;
95+
const storageUsed = isTabletStorageLimitSet ? tabletStorage : blobStorage;
96+
const storageLimit = isTabletStorageLimitSet ? tabletStorageLimit : blobStorageLimit;
97+
9098
const calculatedMetrics: TenantMetrics = {
9199
memoryUsed: memory,
92100
memoryLimit,
93101
cpuUsed: cpu,
94102
cpuUsage,
95-
storageUsed: blobStorage,
96-
storageLimit: blobStorageLimit,
103+
storageUsed,
104+
storageLimit,
97105
};
98106

99107
const storageMetrics = {
100108
blobStorageUsed: blobStorage,
101109
blobStorageLimit,
102-
tableStorageUsed: tableStorage,
103-
tableStorageLimit,
110+
tabletStorageUsed: tabletStorage,
111+
tabletStorageLimit,
104112
};
105113

106114
const renderName = () => {

src/containers/Tenant/Diagnostics/TenantOverview/TenantStorage/TenantStorage.tsx

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import InfoViewer from '../../../../../components/InfoViewer/InfoViewer';
22
import {ProgressViewer} from '../../../../../components/ProgressViewer/ProgressViewer';
3+
import {LabelWithPopover} from '../../../../../components/LabelWithPopover';
34
import {formatStorageValues} from '../../../../../utils/dataFormatters/dataFormatters';
4-
import {getSizeWithSignificantDigits} from '../../../../../utils/bytesParsers';
55

66
import {TenantDashboard} from '../TenantDashboard/TenantDashboard';
77

@@ -11,12 +11,13 @@ import {storageDashboardConfig} from './storageDashboardConfig';
1111
import {TopTables} from './TopTables';
1212
import {TopGroups} from './TopGroups';
1313
import {b} from '../utils';
14+
import i18n from '../i18n';
1415

1516
export interface TenantStorageMetrics {
1617
blobStorageUsed?: number;
1718
blobStorageLimit?: number;
18-
tableStorageUsed?: number;
19-
tableStorageLimit?: number;
19+
tabletStorageUsed?: number;
20+
tabletStorageLimit?: number;
2021
}
2122

2223
interface TenantStorageProps {
@@ -25,34 +26,39 @@ interface TenantStorageProps {
2526
}
2627

2728
export function TenantStorage({tenantName, metrics}: TenantStorageProps) {
28-
const {blobStorageUsed, tableStorageUsed, blobStorageLimit, tableStorageLimit} = metrics;
29-
const formatValues = (value?: number, total?: number) => {
30-
const size = getSizeWithSignificantDigits(Number(blobStorageLimit || blobStorageUsed), 0);
31-
32-
return formatStorageValues(value, total, size);
33-
};
29+
const {blobStorageUsed, tabletStorageUsed, blobStorageLimit, tabletStorageLimit} = metrics;
3430

3531
const info = [
3632
{
37-
label: 'Database storage',
33+
label: (
34+
<LabelWithPopover
35+
text={i18n('storage.tablet-storage-title')}
36+
popoverContent={i18n('storage.tablet-storage-description')}
37+
/>
38+
),
3839
value: (
3940
<ProgressViewer
40-
value={blobStorageUsed}
41-
capacity={blobStorageLimit}
42-
formatValues={formatValues}
41+
value={tabletStorageUsed}
42+
capacity={tabletStorageLimit}
43+
formatValues={formatStorageValues}
4344
colorizeProgress={true}
4445
warningThreshold={75}
4546
dangerThreshold={85}
4647
/>
4748
),
4849
},
4950
{
50-
label: 'Table storage',
51+
label: (
52+
<LabelWithPopover
53+
text={i18n('storage.db-storage-title')}
54+
popoverContent={i18n('storage.db-storage-description')}
55+
/>
56+
),
5157
value: (
5258
<ProgressViewer
53-
value={tableStorageUsed}
54-
capacity={tableStorageLimit}
55-
formatValues={formatValues}
59+
value={blobStorageUsed}
60+
capacity={blobStorageLimit}
61+
formatValues={formatStorageValues}
5662
colorizeProgress={true}
5763
warningThreshold={75}
5864
dangerThreshold={85}

src/containers/Tenant/Diagnostics/TenantOverview/i18n/en.json

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@
33
"no-pools-data": "No pools data",
44

55
"top-nodes.empty-data": "No such nodes",
6-
7-
"title.pools": "Pools",
8-
"title.metrics": "Metrics",
9-
106
"top-groups.empty-data": "No such groups",
117

128
"top": "Top",
@@ -28,6 +24,11 @@
2824
"charts.queries-per-second": "Queries per second",
2925
"charts.transaction-latency": "Transactions latencies {{percentile}}",
3026
"charts.cpu-usage": "CPU usage",
31-
"charts.storage-usage": "Storage usage",
32-
"charts.memory-usage": "Memory usage"
27+
"charts.storage-usage": "Tablet storage usage",
28+
"charts.memory-usage": "Memory usage",
29+
30+
"storage.tablet-storage-title": "Tablet storage",
31+
"storage.tablet-storage-description": "Size of user data and indexes stored in schema objects (tables, topics, etc.)",
32+
"storage.db-storage-title": "Database storage",
33+
"storage.db-storage-description": "Size of data stored in distributed storage with all overheads for redundancy"
3334
}
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import {i18n, Lang} from '../../../../../utils/i18n';
22

33
import en from './en.json';
4-
import ru from './ru.json';
54

65
const COMPONENT = 'ydb-diagnostics-tenant-overview';
76

87
i18n.registerKeyset(Lang.En, COMPONENT, en);
9-
i18n.registerKeyset(Lang.Ru, COMPONENT, ru);
108

119
export default i18n.keyset(COMPONENT);

src/containers/Tenant/Diagnostics/TenantOverview/i18n/ru.json

Lines changed: 0 additions & 33 deletions
This file was deleted.

src/store/reducers/tenants/utils.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const calculateTenantMetrics = (tenant?: TTenant) => {
3939
const cpu = isNumeric(CoresUsed) ? Number(CoresUsed) * 1_000_000 : undefined;
4040
const memory = isNumeric(MemoryUsed) ? Number(MemoryUsed) : undefined;
4141
const blobStorage = isNumeric(StorageAllocatedSize) ? Number(StorageAllocatedSize) : undefined;
42-
const tableStorage = isNumeric(Metrics.Storage) ? Number(Metrics.Storage) : undefined;
42+
const tabletStorage = isNumeric(Metrics.Storage) ? Number(Metrics.Storage) : undefined;
4343

4444
// We use system pool usage and user pool usage to calculate cpu usage because
4545
// only these pools directly indicate resources available to perform user queries
@@ -51,19 +51,19 @@ export const calculateTenantMetrics = (tenant?: TTenant) => {
5151
const blobStorageLimit = isNumeric(StorageAllocatedLimit)
5252
? Number(StorageAllocatedLimit)
5353
: undefined;
54-
const tableStorageLimit = isNumeric(DatabaseQuotas.data_size_hard_quota)
54+
const tabletStorageLimit = isNumeric(DatabaseQuotas.data_size_hard_quota)
5555
? Number(DatabaseQuotas.data_size_hard_quota)
5656
: undefined;
5757

5858
return {
5959
cpu,
6060
memory,
6161
blobStorage,
62-
tableStorage,
62+
tabletStorage,
6363
cpuUsage,
6464
memoryLimit,
6565
blobStorageLimit,
66-
tableStorageLimit,
66+
tabletStorageLimit,
6767
};
6868
};
6969

0 commit comments

Comments
 (0)