Skip to content

Commit ebff61a

Browse files
authored
Merge 1b5f0d1 into 62f8e34
2 parents 62f8e34 + 1b5f0d1 commit ebff61a

18 files changed

+570
-539
lines changed

ydb/core/tx/columnshard/columnshard.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,6 @@ ui64 TColumnShard::MemoryUsage() const {
255255
ui64 memory =
256256
ProgressTxController->GetMemoryUsage() +
257257
ScanTxInFlight.size() * (sizeof(ui64) + sizeof(TInstant)) +
258-
AltersInFlight.size() * sizeof(TAlterMeta) +
259-
CommitsInFlight.size() * sizeof(TCommitMeta) +
260258
LongTxWrites.size() * (sizeof(TWriteId) + sizeof(TLongTxWriteInfo)) +
261259
LongTxWritesByUniqueId.size() * (sizeof(TULID) + sizeof(void*)) +
262260
(WaitingScans.size()) * (sizeof(NOlap::TSnapshot) + sizeof(void*)) +

ydb/core/tx/columnshard/columnshard__init.cpp

Lines changed: 1 addition & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ void TTxInit::SetDefaults() {
3838
Self->LastPlannedTxId = 0;
3939
Self->OwnerPathId = 0;
4040
Self->OwnerPath.clear();
41-
Self->AltersInFlight.clear();
42-
Self->CommitsInFlight.clear();
4341
Self->LongTxWrites.clear();
4442
Self->LongTxWritesByUniqueId.clear();
4543
}
@@ -180,18 +178,6 @@ bool TTxInit::ReadEverything(TTransactionContext& txc, const TActorContext& ctx)
180178
}
181179
}
182180

183-
{
184-
TMemoryProfileGuard g("TTxInit/CommitsInFlight");
185-
for (const auto& pr : Self->CommitsInFlight) {
186-
ui64 txId = pr.first;
187-
for (TWriteId writeId : pr.second.WriteIds) {
188-
Y_ABORT_UNLESS(Self->LongTxWrites.contains(writeId),
189-
"TTxInit at %" PRIu64 " : Commit %" PRIu64 " references local write %" PRIu64 " that doesn't exist",
190-
Self->TabletID(), txId, writeId);
191-
Self->AddLongTxWrite(writeId, txId);
192-
}
193-
}
194-
}
195181
Self->UpdateInsertTableCounters();
196182
Self->UpdateIndexCounters();
197183
Self->UpdateResourceMetrics(ctx, {});
@@ -219,6 +205,7 @@ bool TTxInit::Execute(TTransactionContext& txc, const TActorContext& ctx) {
219205
}
220206

221207
void TTxInit::Complete(const TActorContext& ctx) {
208+
Self->ProgressTxController->OnTabletInit();
222209
Self->SwitchToWork(ctx);
223210
}
224211

@@ -377,31 +364,4 @@ void TColumnShard::Handle(TEvPrivate::TEvNormalizerResult::TPtr& ev, const TActo
377364
Execute(new TTxApplyNormalizer(this, ev->Get()->GetChanges()), ctx);
378365
}
379366

380-
bool TColumnShard::LoadTx(const ui64 txId, const NKikimrTxColumnShard::ETransactionKind& txKind, const TString& txBody) {
381-
switch (txKind) {
382-
case NKikimrTxColumnShard::TX_KIND_SCHEMA: {
383-
TColumnShard::TAlterMeta meta;
384-
Y_ABORT_UNLESS(meta.Body.ParseFromString(txBody));
385-
AltersInFlight.emplace(txId, std::move(meta));
386-
break;
387-
}
388-
case NKikimrTxColumnShard::TX_KIND_COMMIT: {
389-
NKikimrTxColumnShard::TCommitTxBody body;
390-
Y_ABORT_UNLESS(body.ParseFromString(txBody));
391-
392-
TColumnShard::TCommitMeta meta;
393-
for (auto& id : body.GetWriteIds()) {
394-
meta.AddWriteId(TWriteId{id});
395-
}
396-
397-
CommitsInFlight.emplace(txId, std::move(meta));
398-
break;
399-
}
400-
default: {
401-
Y_ABORT("Unsupported TxKind stored in the TxInfo table");
402-
}
403-
}
404-
return true;
405-
}
406-
407367
}

ydb/core/tx/columnshard/columnshard__notify_tx_completion.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@ class TTxNotifyTxCompletion : public TTransactionBase<TColumnShard> {
1414
LOG_S_DEBUG("TTxNotifyTxCompletion.Execute at tablet " << Self->TabletID());
1515

1616
const ui64 txId = Ev->Get()->Record.GetTxId();
17-
18-
if (Self->AltersInFlight.contains(txId)) {
19-
Self->AltersInFlight[txId].NotifySubscribers.insert(Ev->Sender);
17+
auto txOperator = Self->ProgressTxController->GetTxOperator(txId);
18+
if (txOperator) {
19+
txOperator->RegisterSubscriber(Ev->Sender);
2020
return true;
2121
}
22-
2322
Result.reset(new TEvColumnShard::TEvNotifyTxCompletionResult(Self->TabletID(), txId));
2423
return true;
2524
}

ydb/core/tx/columnshard/columnshard__progress_tx.cpp

Lines changed: 5 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -7,55 +7,6 @@
77
namespace NKikimr::NColumnShard {
88

99
class TColumnShard::TTxProgressTx : public TTransactionBase<TColumnShard> {
10-
private:
11-
struct TEvent {
12-
TActorId Target;
13-
ui64 Cookie;
14-
THolder<IEventBase> Event;
15-
16-
TEvent(TActorId target, ui64 cookie, THolder<IEventBase> event)
17-
: Target(target)
18-
, Cookie(cookie)
19-
, Event(std::move(event))
20-
{ }
21-
};
22-
23-
struct TResultEvent {
24-
TTxController::TBasicTxInfo TxInfo;
25-
NKikimrTxColumnShard::EResultStatus Status;
26-
27-
TResultEvent(TTxController::TBasicTxInfo&& txInfo, NKikimrTxColumnShard::EResultStatus status)
28-
: TxInfo(std::move(txInfo))
29-
, Status(status)
30-
{}
31-
32-
std::unique_ptr<IEventBase> MakeEvent(ui64 tabletId) const {
33-
if (TxInfo.TxKind == NKikimrTxColumnShard::TX_KIND_COMMIT_WRITE) {
34-
auto result = NEvents::TDataEvents::TEvWriteResult::BuildCommited(tabletId, TxInfo.TxId);
35-
return result;
36-
} else {
37-
auto result = std::make_unique<TEvColumnShard::TEvProposeTransactionResult>(
38-
tabletId, TxInfo.TxKind, TxInfo.TxId, Status);
39-
result->Record.SetStep(TxInfo.PlanStep);
40-
return result;
41-
}
42-
}
43-
};
44-
45-
enum class ETriggerActivities {
46-
NONE,
47-
POST_INSERT,
48-
POST_SCHEMA
49-
};
50-
51-
TStringBuilder TxPrefix() const {
52-
return TStringBuilder() << "TxProgressTx[" << ToString(TabletTxNo) << "] ";
53-
}
54-
55-
TString TxSuffix() const {
56-
return TStringBuilder() << " at tablet " << Self->TabletID();
57-
}
58-
5910
public:
6011
TTxProgressTx(TColumnShard* self)
6112
: TTransactionBase(self)
@@ -81,60 +32,8 @@ class TColumnShard::TTxProgressTx : public TTransactionBase<TColumnShard> {
8132
ui64 step = plannedItem->PlanStep;
8233
ui64 txId = plannedItem->TxId;
8334

84-
TTxController::TBasicTxInfo txInfo = *plannedItem;
85-
switch (txInfo.TxKind) {
86-
case NKikimrTxColumnShard::TX_KIND_SCHEMA:
87-
{
88-
auto& meta = Self->AltersInFlight.at(txId);
89-
Self->RunSchemaTx(meta.Body, NOlap::TSnapshot(step, txId), txc);
90-
Self->ProtectSchemaSeqNo(meta.Body.GetSeqNo(), txc);
91-
for (TActorId subscriber : meta.NotifySubscribers) {
92-
TxEvents.emplace_back(subscriber, 0,
93-
MakeHolder<TEvColumnShard::TEvNotifyTxCompletionResult>(Self->TabletID(), txId));
94-
}
95-
Self->AltersInFlight.erase(txId);
96-
Trigger = ETriggerActivities::POST_SCHEMA;
97-
break;
98-
}
99-
case NKikimrTxColumnShard::TX_KIND_COMMIT: {
100-
const auto& meta = Self->CommitsInFlight.at(txId);
101-
102-
TBlobGroupSelector dsGroupSelector(Self->Info());
103-
NOlap::TDbWrapper dbTable(txc.DB, &dsGroupSelector);
104-
105-
auto pathExists = [&](ui64 pathId) {
106-
return Self->TablesManager.HasTable(pathId);
107-
};
108-
109-
auto counters = Self->InsertTable->Commit(dbTable, step, txId, meta.WriteIds,
110-
pathExists);
111-
Self->IncCounter(COUNTER_BLOBS_COMMITTED, counters.Rows);
112-
Self->IncCounter(COUNTER_BYTES_COMMITTED, counters.Bytes);
113-
Self->IncCounter(COUNTER_RAW_BYTES_COMMITTED, counters.RawBytes);
114-
115-
NIceDb::TNiceDb db(txc.DB);
116-
for (TWriteId writeId : meta.WriteIds) {
117-
Self->RemoveLongTxWrite(db, writeId, txId);
118-
}
119-
Self->CommitsInFlight.erase(txId);
120-
Self->UpdateInsertTableCounters();
121-
Trigger = ETriggerActivities::POST_INSERT;
122-
break;
123-
}
124-
case NKikimrTxColumnShard::TX_KIND_COMMIT_WRITE: {
125-
NOlap::TSnapshot snapshot(step, txId);
126-
Y_ABORT_UNLESS(Self->OperationsManager->CommitTransaction(*Self, txId, txc, snapshot));
127-
Trigger = ETriggerActivities::POST_INSERT;
128-
break;
129-
}
130-
default: {
131-
Y_ABORT("Unexpected TxKind");
132-
}
133-
}
134-
135-
// Currently transactions never fail and there are no dependencies between them
136-
TxResults.emplace_back(TResultEvent(std::move(txInfo), NKikimrTxColumnShard::SUCCESS));
137-
35+
TxOperator = Self->ProgressTxController->GetVerifiedTxOperator(txId);
36+
AFL_VERIFY(TxOperator->Progress(*Self, NOlap::TSnapshot(step, txId), txc));
13837
Self->ProgressTxController->FinishPlannedTx(txId, txc);
13938
Self->RescheduleWaitingReads();
14039
}
@@ -148,24 +47,14 @@ class TColumnShard::TTxProgressTx : public TTransactionBase<TColumnShard> {
14847

14948
void Complete(const TActorContext& ctx) override {
15049
NActors::TLogContextGuard logGuard = NActors::TLogContextBuilder::Build(NKikimrServices::TX_COLUMNSHARD)("tablet_id", Self->TabletID())("tx_state", "complete");
151-
152-
for (auto& rec : TxEvents) {
153-
ctx.Send(rec.Target, rec.Event.Release(), 0, rec.Cookie);
154-
}
155-
156-
for (auto& res : TxResults) {
157-
Self->ProgressTxController->CompleteRunningTx(TTxController::TPlanQueueItem(res.TxInfo.PlanStep, res.TxInfo.TxId));
158-
159-
auto event = res.MakeEvent(Self->TabletID());
160-
ctx.Send(res.TxInfo.Source, event.release(), 0, res.TxInfo.Cookie);
50+
if (TxOperator) {
51+
TxOperator->Complete(*Self, ctx);
16152
}
16253
Self->SetupIndexation();
16354
}
16455

16556
private:
166-
std::vector<TResultEvent> TxResults;
167-
std::vector<TEvent> TxEvents;
168-
ETriggerActivities Trigger{ETriggerActivities::NONE};
57+
TTxController::ITransactionOperatior::TPtr TxOperator;
16958
const ui32 TabletTxNo;
17059
};
17160

0 commit comments

Comments
 (0)