Skip to content

Commit a328b30

Browse files
authored
Revert "Support arbitrary chain set in huge blob keeper heap" (#11961)
1 parent ec75229 commit a328b30

13 files changed

+529
-390
lines changed

ydb/core/blobstorage/ut_vdisk/lib/test_huge.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ class THugeModuleRecoveryActor : public TActorBootstrapped<THugeModuleRecoveryAc
137137

138138
bool InitHugeBlobKeeper(const TActorContext &ctx, const TStartingPoints &startingPoints) {
139139
Y_UNUSED(ctx);
140+
const ui32 oldMinHugeBlobInBytes = 64 << 10;
140141
const ui32 milestoneHugeBlobInBytes = 64 << 10;
141142
const ui32 maxBlobInBytes = 128 << 10;
142143
auto logFunc = [] (const TString) { /* empty */ };
@@ -149,6 +150,7 @@ class THugeModuleRecoveryActor : public TActorBootstrapped<THugeModuleRecoveryAc
149150
HmCtx->PDiskCtx->Dsk->ChunkSize,
150151
HmCtx->PDiskCtx->Dsk->AppendBlockSize,
151152
HmCtx->PDiskCtx->Dsk->AppendBlockSize,
153+
oldMinHugeBlobInBytes,
152154
milestoneHugeBlobInBytes,
153155
maxBlobInBytes,
154156
HmCtx->Config->HugeBlobOverhead,
@@ -167,6 +169,7 @@ class THugeModuleRecoveryActor : public TActorBootstrapped<THugeModuleRecoveryAc
167169
HmCtx->PDiskCtx->Dsk->ChunkSize,
168170
HmCtx->PDiskCtx->Dsk->AppendBlockSize,
169171
HmCtx->PDiskCtx->Dsk->AppendBlockSize,
172+
oldMinHugeBlobInBytes,
170173
milestoneHugeBlobInBytes,
171174
maxBlobInBytes,
172175
HmCtx->Config->HugeBlobOverhead,

ydb/core/blobstorage/vdisk/common/vdisk_config.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,9 @@ namespace NKikimr {
136136
MinHugeBlobInBytes = 512u << 10u;
137137
break;
138138
}
139+
OldMinHugeBlobInBytes = MinHugeBlobInBytes; // preserved to migrate entry point state correctly
139140
MilestoneHugeBlobInBytes = 512u << 10u; // for compatibility reasons it must be 512KB
141+
140142
}
141143

142144
void TVDiskConfig::Merge(const NKikimrBlobStorage::TVDiskConfig &update) {

ydb/core/blobstorage/vdisk/common/vdisk_config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ namespace NKikimr {
120120
ui32 HullSstSizeInChunksLevel;
121121
ui32 HugeBlobsFreeChunkReservation;
122122
ui32 MinHugeBlobInBytes;
123+
ui32 OldMinHugeBlobInBytes;
123124
ui32 MilestoneHugeBlobInBytes;
124125
ui32 HugeBlobOverhead;
125126
ui32 HullCompLevel0MaxSstsAtOnce;

ydb/core/blobstorage/vdisk/common/vdisk_hugeblobctx.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@
33

44
namespace NKikimr {
55

6-
THugeSlotsMap::THugeSlotsMap(ui32 appendBlockSize, ui32 minHugeBlobInBlocks, TAllSlotsInfo &&slotsInfo,
7-
TSearchTable &&searchTable)
6+
THugeSlotsMap::THugeSlotsMap(ui32 appendBlockSize, TAllSlotsInfo &&slotsInfo, TSearchTable &&searchTable)
87
: AppendBlockSize(appendBlockSize)
9-
, MinHugeBlobInBlocks(minHugeBlobInBlocks)
108
, AllSlotsInfo(std::move(slotsInfo))
119
, SearchTable(std::move(searchTable))
1210
{}
1311

1412
const THugeSlotsMap::TSlotInfo *THugeSlotsMap::GetSlotInfo(ui32 size) const {
15-
const ui32 sizeInBlocks = (size + AppendBlockSize - 1) / AppendBlockSize;
16-
Y_ABORT_UNLESS(MinHugeBlobInBlocks <= sizeInBlocks);
17-
const ui64 idx = SearchTable.at(sizeInBlocks - MinHugeBlobInBlocks);
13+
ui32 sizeInBlocks = size / AppendBlockSize;
14+
sizeInBlocks += !(sizeInBlocks * AppendBlockSize == size);
15+
const ui64 idx = SearchTable.at(sizeInBlocks);
1816
return &AllSlotsInfo.at(idx);
1917
}
2018

2119
ui32 THugeSlotsMap::AlignByBlockSize(ui32 size) const {
22-
return Max(MinHugeBlobInBlocks * AppendBlockSize, size - size % AppendBlockSize);
20+
ui32 sizeInBlocks = size / AppendBlockSize;
21+
Y_ABORT_UNLESS(sizeInBlocks, "Blob size to align is smaller than a single block. BlobSize# %" PRIu32, size);
22+
return sizeInBlocks * AppendBlockSize;
2323
}
2424

2525
void THugeSlotsMap::Output(IOutputStream &str) const {
@@ -31,7 +31,11 @@ namespace NKikimr {
3131
str << "]}\n";
3232
str << "{SearchTable# [";
3333
for (const auto &idx : SearchTable) {
34-
AllSlotsInfo.at(idx).Output(str);
34+
if (idx != NoOpIdx) {
35+
AllSlotsInfo.at(idx).Output(str);
36+
} else {
37+
str << "null";
38+
}
3539
str << "\n";
3640
}
3741
str << "]}";

ydb/core/blobstorage/vdisk/common/vdisk_hugeblobctx.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,21 +38,23 @@ namespace NKikimr {
3838
};
3939

4040
// All slot types
41-
using TAllSlotsInfo = std::vector<TSlotInfo>;
41+
using TAllSlotsInfo = TVector<TSlotInfo>;
4242
// Type to address TAllSlotsInfo
4343
using TIndex = ui16;
4444
// Size in AppendBlockSize -> index in TAllSlotsInfo
45-
using TSearchTable = std::vector<TIndex>;
45+
using TSearchTable = TVector<TIndex>;
46+
// Idx that indicates there is no record for it in TAllSlotsInfo
47+
static constexpr TIndex NoOpIdx = Max<TIndex>();
4648

47-
THugeSlotsMap(ui32 appendBlockSize, ui32 minHugeBlobInBlocks, TAllSlotsInfo &&slotsInfo, TSearchTable &&searchTable);
49+
50+
THugeSlotsMap(ui32 appendBlockSize, TAllSlotsInfo &&slotsInfo, TSearchTable &&searchTable);
4851
const TSlotInfo *GetSlotInfo(ui32 size) const;
4952
ui32 AlignByBlockSize(ui32 size) const;
5053
void Output(IOutputStream &str) const;
5154
TString ToString() const;
5255

5356
private:
5457
const ui32 AppendBlockSize;
55-
const ui32 MinHugeBlobInBlocks;
5658
TAllSlotsInfo AllSlotsInfo;
5759
TSearchTable SearchTable;
5860
};

ydb/core/blobstorage/vdisk/huge/blobstorage_hullhuge_ut.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ namespace NKikimr {
1717
Y_UNIT_TEST(SerializeParse) {
1818
ui32 chunkSize = 134274560u;
1919
ui32 appendBlockSize = 56896u;
20+
ui32 minHugeBlobInBytes = 512u << 10u;
2021
ui32 milestoneHugeBlobInBytes = 512u << 10u;
2122
ui32 maxBlobInBytes = 10u << 20u;
2223
ui32 overhead = 8;
@@ -28,8 +29,8 @@ namespace NKikimr {
2829
auto vctx = MakeIntrusive<TVDiskContext>(TActorId(), info->PickTopology(), counters, TVDiskID(0, 1, 0, 0, 0),
2930
nullptr, NPDisk::DEVICE_TYPE_UNKNOWN);
3031
std::unique_ptr<THullHugeKeeperPersState> state(
31-
new THullHugeKeeperPersState(vctx, chunkSize, appendBlockSize,
32-
appendBlockSize, milestoneHugeBlobInBytes, maxBlobInBytes,
32+
new THullHugeKeeperPersState(vctx, chunkSize, appendBlockSize, appendBlockSize,
33+
minHugeBlobInBytes, milestoneHugeBlobInBytes, maxBlobInBytes,
3334
overhead, freeChunksReservation, logf));
3435

3536
state->LogPos = THullHugeRecoveryLogPos(0, 0, 100500, 50000, 70000, 56789, 39482);

0 commit comments

Comments
 (0)