Skip to content

Commit 5bc24b4

Browse files
authored
DataShard: rename DataCleanup to Vacuum (#19997)
1 parent be66d8c commit 5bc24b4

11 files changed

+215
-215
lines changed

ydb/core/protos/tx_datashard.proto

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2368,20 +2368,20 @@ message TEvInMemoryStateResponse {
23682368
// Once the operation is done, any deleted data not used initially
23692369
// will be included in garbage collection requests for the blobstorage.
23702370
// Note: deleted data may still be used for a while, e.g. for history for MVCC.
2371-
message TEvForceDataCleanup {
2372-
optional uint64 DataCleanupGeneration = 1; // increasing sequence
2371+
message TEvVacuum {
2372+
optional uint64 VacuumGeneration = 1; // increasing sequence
23732373
}
23742374

2375-
// Returns DataCleanupGeneration of the last successfully completed TEvForceDataCleanup request.
2376-
// Intermediate requests and corresponding TEvForceDataCleanupResult's may be skipped.
2377-
message TEvForceDataCleanupResult {
2375+
// Returns VacuumCleanupGeneration of the last successfully completed TEvVacuum request.
2376+
// Intermediate requests and corresponding TEvVacuumResult's may be skipped.
2377+
message TEvVacuumResult {
23782378
enum EStatus {
23792379
UNKNOWN = 0;
23802380
OK = 1;
23812381
WRONG_SHARD_STATE = 2;
23822382
BORROWED = 3;
23832383
};
2384-
optional uint64 DataCleanupGeneration = 1; // from corresponding request (or greater)
2384+
optional uint64 VacuumGeneration = 1; // from corresponding request (or greater)
23852385
optional uint64 TabletId = 2;
23862386
optional EStatus Status = 3;
23872387
}

ydb/core/tx/datashard/datashard.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,8 @@ namespace TEvDataShard {
346346
EvInMemoryStateRequest,
347347
EvInMemoryStateResponse,
348348

349-
EvForceDataCleanup,
350-
EvForceDataCleanupResult,
349+
EvVacuum,
350+
EvVacuumResult,
351351

352352
EvPrefixKMeansRequest,
353353
EvPrefixKMeansResponse,
@@ -1604,21 +1604,21 @@ namespace TEvDataShard {
16041604
}
16051605
};
16061606

1607-
struct TEvForceDataCleanup : TEventPB<TEvForceDataCleanup, NKikimrTxDataShard::TEvForceDataCleanup,
1608-
TEvDataShard::EvForceDataCleanup> {
1609-
TEvForceDataCleanup() = default;
1607+
struct TEvVacuum : TEventPB<TEvVacuum, NKikimrTxDataShard::TEvVacuum,
1608+
TEvDataShard::EvVacuum> {
1609+
TEvVacuum() = default;
16101610

1611-
TEvForceDataCleanup(ui64 dataCleanupGeneration) {
1612-
Record.SetDataCleanupGeneration(dataCleanupGeneration);
1611+
TEvVacuum(ui64 vacuumGeneration) {
1612+
Record.SetVacuumGeneration(vacuumGeneration);
16131613
}
16141614
};
16151615

1616-
struct TEvForceDataCleanupResult : TEventPB<TEvForceDataCleanupResult, NKikimrTxDataShard::TEvForceDataCleanupResult,
1617-
TEvDataShard::EvForceDataCleanupResult> {
1618-
TEvForceDataCleanupResult() = default;
1616+
struct TEvVacuumResult : TEventPB<TEvVacuumResult, NKikimrTxDataShard::TEvVacuumResult,
1617+
TEvDataShard::EvVacuumResult> {
1618+
TEvVacuumResult() = default;
16191619

1620-
TEvForceDataCleanupResult(ui64 dataCleanupGeneration, ui64 tabletId, NKikimrTxDataShard::TEvForceDataCleanupResult::EStatus status) {
1621-
Record.SetDataCleanupGeneration(dataCleanupGeneration);
1620+
TEvVacuumResult(ui64 vacuumGeneration, ui64 tabletId, NKikimrTxDataShard::TEvVacuumResult::EStatus status) {
1621+
Record.SetVacuumGeneration(vacuumGeneration);
16221622
Record.SetTabletId(tabletId);
16231623
Record.SetStatus(status);
16241624
}

ydb/core/tx/datashard/datashard__data_cleanup.cpp

Lines changed: 0 additions & 127 deletions
This file was deleted.
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
#include "datashard_impl.h"
2+
3+
namespace NKikimr::NDataShard {
4+
5+
class TDataShard::TTxVacuum : public NTabletFlatExecutor::TTransactionBase<TDataShard> {
6+
private:
7+
TEvDataShard::TEvVacuum::TPtr Ev;
8+
std::unique_ptr<TEvDataShard::TEvVacuumResult> Response;
9+
10+
public:
11+
TTxVacuum(TDataShard* ds, TEvDataShard::TEvVacuum::TPtr ev)
12+
: TBase(ds)
13+
, Ev(ev)
14+
{}
15+
16+
TTxType GetTxType() const override { return TXTYPE_DATA_CLEANUP; }
17+
18+
bool Execute(TTransactionContext& txc, const TActorContext& ctx) override {
19+
auto& record = Ev->Get()->Record;
20+
21+
if (!Self->IsStateActive()) {
22+
LOG_WARN_S(ctx, NKikimrServices::TX_DATASHARD,
23+
"Vacuum tx at non-ready tablet " << Self->TabletID()
24+
<< " state " << Self->State
25+
<< ", requested from " << Ev->Sender);
26+
Response = std::make_unique<TEvDataShard::TEvVacuumResult>(
27+
record.GetVacuumGeneration(),
28+
Self->TabletID(),
29+
NKikimrTxDataShard::TEvVacuumResult::WRONG_SHARD_STATE);
30+
return true;
31+
}
32+
33+
if (Self->Executor()->HasLoanedParts()) {
34+
LOG_WARN_S(ctx, NKikimrServices::TX_DATASHARD,
35+
"Vacuum of tablet# " << Self->TabletID()
36+
<< ": has borrowed parts"
37+
<< ", requested from " << Ev->Sender);
38+
Response = std::make_unique<TEvDataShard::TEvVacuumResult>(
39+
record.GetVacuumGeneration(),
40+
Self->TabletID(),
41+
NKikimrTxDataShard::TEvVacuumResult::BORROWED);
42+
return true;
43+
}
44+
45+
NIceDb::TNiceDb db(txc.DB);
46+
ui64 lastGen = 0;
47+
if (!Self->SysGetUi64(db, Schema::Sys_VacuumCompletedGeneration, lastGen)) {
48+
return false;
49+
}
50+
51+
if (lastGen >= record.GetVacuumGeneration()) {
52+
LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD,
53+
"Vacuum of tablet# " << Self->TabletID()
54+
<< " for requested generation " << record.GetVacuumGeneration()
55+
<< ", requested from# " << Ev->Sender
56+
<< " already completed"
57+
<< ", last persisted Vacuum generation: " << lastGen);
58+
Response = std::make_unique<TEvDataShard::TEvVacuumResult>(
59+
lastGen,
60+
Self->TabletID(),
61+
NKikimrTxDataShard::TEvVacuumResult::OK);
62+
return true;
63+
}
64+
65+
if (Self->GetSnapshotManager().RemoveExpiredSnapshots(ctx.Now(), txc)) {
66+
LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD,
67+
"Vacuum of tablet# " << Self->TabletID()
68+
<< ": expired snapshots removed");
69+
}
70+
Self->OutReadSets.Cleanup(db, ctx);
71+
72+
Self->Executor()->StartVacuum(Ev->Get()->Record.GetVacuumGeneration());
73+
Self->VacuumWaiters.insert({Ev->Get()->Record.GetVacuumGeneration(), Ev->Sender});
74+
return true;
75+
}
76+
77+
void Complete(const TActorContext& ctx) override {
78+
if (Response) {
79+
ctx.Send(Ev->Sender, std::move(Response));
80+
}
81+
}
82+
};
83+
84+
class TDataShard::TTxCompleteVacuum : public NTabletFlatExecutor::TTransactionBase<TDataShard> {
85+
private:
86+
ui64 VacuumGeneration;
87+
88+
public:
89+
TTxCompleteVacuum(TDataShard* ds, ui64 vacuumGeneration)
90+
: TBase(ds)
91+
, VacuumGeneration(vacuumGeneration)
92+
{}
93+
94+
TTxType GetTxType() const override { return TXTYPE_COMPLETE_DATA_CLEANUP; }
95+
96+
bool Execute(TTransactionContext& txc, const TActorContext& ctx) override {
97+
Y_UNUSED(ctx);
98+
NIceDb::TNiceDb db(txc.DB);
99+
Self->PersistSys(db, Schema::Sys_VacuumCompletedGeneration, VacuumGeneration);
100+
return true;
101+
}
102+
103+
void Complete(const TActorContext& ctx) override {
104+
auto waiterIt = Self->VacuumWaiters.begin();
105+
while (waiterIt != Self->VacuumWaiters.end() && waiterIt->first <= VacuumGeneration) {
106+
auto response = MakeHolder<TEvDataShard::TEvVacuumResult>(
107+
VacuumGeneration,
108+
Self->TabletID(),
109+
NKikimrTxDataShard::TEvVacuumResult::OK);
110+
ctx.Send(waiterIt->second, std::move(response));
111+
waiterIt = Self->VacuumWaiters.erase(waiterIt);
112+
}
113+
LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD,
114+
"Updated last Vacuum of tablet# "<< Self->TabletID()
115+
<< ", last persisted Vacuum generation: " << VacuumGeneration);
116+
}
117+
};
118+
119+
void TDataShard::Handle(TEvDataShard::TEvVacuum::TPtr& ev, const TActorContext& ctx) {
120+
Executor()->Execute(new TTxVacuum(this, ev), ctx);
121+
}
122+
123+
void TDataShard::VacuumComplete(ui64 vacuumGeneration, const TActorContext& ctx) {
124+
Executor()->Execute(new TTxCompleteVacuum(this, vacuumGeneration), ctx);
125+
}
126+
127+
} // namespace NKikimr::NDataShard

ydb/core/tx/datashard/datashard_impl.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,8 @@ class TDataShard
220220
class TTxUpdateFollowerReadEdge;
221221
class TTxRemoveSchemaSnapshots;
222222
class TTxCleanupUncommitted;
223-
class TTxDataCleanup;
224-
class TTxCompleteDataCleanup;
223+
class TTxVacuum;
224+
class TTxCompleteVacuum;
225225

226226
template <typename T> friend class TTxDirectBase;
227227
class TTxUploadRows;
@@ -1159,7 +1159,7 @@ class TDataShard
11591159
Sys_InMemoryStateActorId = 45,
11601160
Sys_InMemoryStateGeneration = 46,
11611161

1162-
Sys_DataCleanupCompletedGeneration = 47,
1162+
Sys_VacuumCompletedGeneration = 47,
11631163

11641164
// reserved
11651165
SysPipeline_Flags = 1000,
@@ -1399,7 +1399,7 @@ class TDataShard
13991399

14001400
void Handle(TEvIncrementalRestoreScan::TEvFinished::TPtr& ev, const TActorContext& ctx);
14011401

1402-
void Handle(TEvDataShard::TEvForceDataCleanup::TPtr& ev, const TActorContext& ctx);
1402+
void Handle(TEvDataShard::TEvVacuum::TPtr& ev, const TActorContext& ctx);
14031403

14041404
void HandleByReplicationSourceOffsetsServer(STATEFN_SIG);
14051405

@@ -2989,7 +2989,7 @@ class TDataShard
29892989
// from the front
29902990
THashMap<ui32, TCompactionWaiterList> CompactionWaiters;
29912991

2992-
TMap<ui64, TActorId> DataCleanupWaiters;
2992+
TMap<ui64, TActorId> VacuumWaiters;
29932993

29942994
struct TCompactBorrowedWaiter : public TThrRefBase {
29952995
TCompactBorrowedWaiter(TActorId actorId, TLocalPathId requestedTable)
@@ -3041,7 +3041,7 @@ class TDataShard
30413041
ui32 StatisticsScanTableId = 0;
30423042
ui64 StatisticsScanId = 0;
30433043

3044-
ui64 CurrentDataCleanupGeneration = 0;
3044+
ui64 CurrentVacuumGeneration = 0;
30453045

30463046
public:
30473047
auto& GetLockChangeRecords() {
@@ -3244,7 +3244,7 @@ class TDataShard
32443244
HFunc(TEvPrivate::TEvStatisticsScanFinished, Handle);
32453245
HFuncTraced(TEvPrivate::TEvRemoveSchemaSnapshots, Handle);
32463246
HFunc(TEvIncrementalRestoreScan::TEvFinished, Handle);
3247-
HFunc(TEvDataShard::TEvForceDataCleanup, Handle);
3247+
HFunc(TEvDataShard::TEvVacuum, Handle);
32483248
default:
32493249
if (!HandleDefaultEvents(ev, SelfId())) {
32503250
ALOG_WARN(NKikimrServices::TX_DATASHARD, "TDataShard::StateWork unhandled event type: " << ev->GetTypeRewrite() << " event: " << ev->ToString());

0 commit comments

Comments
 (0)