Skip to content

Commit 4cc1d18

Browse files
authored
KIKIMR-20530 Datashard tracing enhancements (#746)
1 parent 7d6178d commit 4cc1d18

19 files changed

+560
-100
lines changed

ydb/core/kqp/proxy_service/kqp_proxy_service.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ class TKqpProxyService : public TActorBootstrapped<TKqpProxyService> {
662662
<< ". " << "Send request to target, requestId: " << requestId << ", targetId: " << targetId);
663663
auto status = timerDuration == cancelAfter ? NYql::NDqProto::StatusIds::CANCELLED : NYql::NDqProto::StatusIds::TIMEOUT;
664664
StartQueryTimeout(requestId, timerDuration, status);
665-
Send(targetId, ev->Release().Release(), IEventHandle::FlagTrackDelivery, requestId);
665+
Send(targetId, ev->Release().Release(), IEventHandle::FlagTrackDelivery, requestId, std::move(ev->TraceId));
666666
}
667667

668668
void Handle(TEvKqp::TEvScriptRequest::TPtr& ev) {

ydb/core/kqp/session_actor/kqp_session_actor.cpp

+1-6
Original file line numberDiff line numberDiff line change
@@ -208,17 +208,12 @@ class TKqpSessionActor : public TActorBootstrapped<TKqpSessionActor> {
208208
void MakeNewQueryState(TEvKqp::TEvQueryRequest::TPtr& ev) {
209209
++QueryId;
210210
YQL_ENSURE(!QueryState);
211-
NWilson::TTraceId id;
212-
if (false) { // change to enable Wilson tracing
213-
id = NWilson::TTraceId::NewTraceId(15, 4095);
214-
LOG_I("wilson tracing started, id: " + id.GetHexTraceId());
215-
}
216211
auto selfId = SelfId();
217212
auto as = TActivationContext::ActorSystem();
218213
ev->Get()->SetClientLostAction(selfId, as);
219214
QueryState = std::make_shared<TKqpQueryState>(
220215
ev, QueryId, Settings.Database, Settings.Cluster, Settings.DbCounters, Settings.LongSession,
221-
Settings.TableService, Settings.QueryService, std::move(id), SessionId,
216+
Settings.TableService, Settings.QueryService, std::move(ev->TraceId), SessionId,
222217
AppData()->MonotonicTimeProvider->Now());
223218
if (QueryState->UserRequestContext->TraceId.empty()) {
224219
QueryState->UserRequestContext->TraceId = UlidGen.Next().ToString();

ydb/core/tablet_flat/flat_exec_seat.h

-4
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,6 @@ namespace NTabletFlatExecutor {
3434

3535
void Terminate(ETerminationReason reason, const TActorContext& ctx) noexcept;
3636

37-
NWilson::TSpan CreateExecutionSpan() noexcept {
38-
return NWilson::TSpan(TWilsonTablet::Tablet, Self->TxSpan.GetTraceId(), "Tablet.Transaction.Execute");
39-
}
40-
4137
void StartEnqueuedSpan() noexcept {
4238
WaitingSpan = NWilson::TSpan(TWilsonTablet::Tablet, Self->TxSpan.GetTraceId(), "Tablet.Transaction.Enqueued");
4339
}

ydb/core/tablet_flat/flat_executor.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -1580,6 +1580,7 @@ void TExecutor::DoExecute(TAutoPtr<ITransaction> self, bool allowImmediate, cons
15801580
Y_ABORT_UNLESS(ActivationQueue, "attempt to execute transaction before activation");
15811581

15821582
TAutoPtr<TSeat> seat = new TSeat(++TransactionUniqCounter, self);
1583+
seat->Self->SetupTxSpanName();
15831584

15841585
LWTRACK(TransactionBegin, seat->Self->Orbit, seat->UniqID, Owner->TabletID(), TypeName(*seat->Self));
15851586

@@ -1653,16 +1654,16 @@ void TExecutor::ExecuteTransaction(TAutoPtr<TSeat> seat, const TActorContext &ct
16531654
PrivatePageCache->ResetTouchesAndToLoad(true);
16541655
TPageCollectionTxEnv env(*Database, *PrivatePageCache);
16551656

1656-
TTransactionContext txc(*seat, Owner->TabletID(), Generation(), Step(), *Database, env, seat->CurrentTxDataLimit, seat->TaskId);
1657+
TTransactionContext txc(Owner->TabletID(), Generation(), Step(), *Database, env, seat->CurrentTxDataLimit, seat->TaskId, seat->Self->TxSpan);
16571658
txc.NotEnoughMemory(seat->NotEnoughMemoryCount);
16581659

16591660
Database->Begin(Stamp(), env);
16601661

16611662
LWTRACK(TransactionExecuteBegin, seat->Self->Orbit, seat->UniqID);
16621663

1663-
NWilson::TSpan txExecuteSpan = seat->CreateExecutionSpan();
1664+
txc.StartExecutionSpan();
16641665
const bool done = seat->Self->Execute(txc, ctx.MakeFor(OwnerActorId));
1665-
txExecuteSpan.EndOk();
1666+
txc.FinishExecutionSpan();
16661667

16671668
LWTRACK(TransactionExecuteEnd, seat->Self->Orbit, seat->UniqID, done);
16681669

ydb/core/tablet_flat/tablet_flat_executor.h

+18-7
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,15 @@ class TTransactionContext : public TTxMemoryProviderBase {
202202
friend class TExecutor;
203203

204204
public:
205-
TTransactionContext(TSeat &seat, ui64 tablet, ui32 gen, ui32 step, NTable::TDatabase &db, IExecuting &env,
206-
ui64 memoryLimit, ui64 taskId)
205+
TTransactionContext(ui64 tablet, ui32 gen, ui32 step, NTable::TDatabase &db, IExecuting &env,
206+
ui64 memoryLimit, ui64 taskId, NWilson::TSpan &transactionSpan)
207207
: TTxMemoryProviderBase(memoryLimit, taskId)
208-
, Seat(seat)
209208
, Tablet(tablet)
210209
, Generation(gen)
211210
, Step(step)
212211
, Env(env)
213212
, DB(db)
213+
, TransactionSpan(transactionSpan)
214214
{}
215215

216216
~TTransactionContext() {}
@@ -228,13 +228,22 @@ class TTransactionContext : public TTxMemoryProviderBase {
228228
return Rescheduled_;
229229
}
230230

231+
void StartExecutionSpan() noexcept {
232+
TransactionExecutionSpan = NWilson::TSpan(TWilsonTablet::Tablet, TransactionSpan.GetTraceId(), "Tablet.Transaction.Execute");
233+
}
234+
235+
void FinishExecutionSpan() noexcept {
236+
TransactionExecutionSpan.EndOk();
237+
}
238+
231239
public:
232-
TSeat& Seat;
233240
const ui64 Tablet = Max<ui32>();
234241
const ui32 Generation = Max<ui32>();
235242
const ui32 Step = Max<ui32>();
236243
IExecuting &Env;
237244
NTable::TDatabase &DB;
245+
NWilson::TSpan &TransactionSpan;
246+
NWilson::TSpan TransactionExecutionSpan;
238247

239248
private:
240249
bool Rescheduled_ = false;
@@ -281,9 +290,7 @@ class ITransaction : TNonCopyable {
281290

282291
ITransaction(NWilson::TTraceId &&traceId)
283292
: TxSpan(NWilson::TSpan(TWilsonTablet::Tablet, std::move(traceId), "Tablet.Transaction"))
284-
{
285-
TxSpan.Attribute("Type", TypeName(*this));
286-
}
293+
{ }
287294

288295
virtual ~ITransaction() = default;
289296
/// @return true if execution complete and transaction is ready for commit
@@ -300,6 +307,10 @@ class ITransaction : TNonCopyable {
300307
out << TypeName(*this);
301308
}
302309

310+
virtual void SetupTxSpanName() noexcept {
311+
TxSpan.Attribute("Type", TypeName(*this));
312+
}
313+
303314
void SetupTxSpan(NWilson::TTraceId traceId) noexcept {
304315
TxSpan = NWilson::TSpan(TWilsonTablet::Tablet, std::move(traceId), "Tablet.Transaction");
305316
TxSpan.Attribute("Type", TypeName(*this));

ydb/core/testlib/actors/test_runtime.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -239,22 +239,22 @@ namespace NActors {
239239
GrabEdgeEventRethrow<TEvents::TEvWakeup>(SleepEdgeActor);
240240
}
241241

242-
void TTestActorRuntime::SendToPipe(ui64 tabletId, const TActorId& sender, IEventBase* payload, ui32 nodeIndex, const NKikimr::NTabletPipe::TClientConfig& pipeConfig, TActorId clientId, ui64 cookie) {
242+
void TTestActorRuntime::SendToPipe(ui64 tabletId, const TActorId& sender, IEventBase* payload, ui32 nodeIndex, const NKikimr::NTabletPipe::TClientConfig& pipeConfig, TActorId clientId, ui64 cookie, NWilson::TTraceId traceId) {
243243
bool newPipe = (clientId == TActorId());
244244
if (newPipe) {
245245
clientId = ConnectToPipe(tabletId, sender, nodeIndex, pipeConfig);
246246
}
247247

248-
SendToPipe(clientId, sender, payload, nodeIndex, cookie);
248+
SendToPipe(clientId, sender, payload, nodeIndex, cookie, std::move(traceId));
249249

250250
if (newPipe) {
251251
ClosePipe(clientId, sender, nodeIndex);
252252
}
253253
}
254254

255255
void TTestActorRuntime::SendToPipe(TActorId clientId, const TActorId& sender, IEventBase* payload,
256-
ui32 nodeIndex, ui64 cookie) {
257-
auto pipeEv = new IEventHandle(clientId, sender, payload, 0, cookie);
256+
ui32 nodeIndex, ui64 cookie, NWilson::TTraceId traceId) {
257+
auto pipeEv = new IEventHandle(clientId, sender, payload, 0, cookie, nullptr, std::move(traceId));
258258
pipeEv->Rewrite(NKikimr::TEvTabletPipe::EvSend, clientId);
259259
Send(pipeEv, nodeIndex, true);
260260
}

ydb/core/testlib/actors/test_runtime.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ namespace NActors {
8888
}
8989

9090
void SendToPipe(ui64 tabletId, const TActorId& sender, IEventBase* payload, ui32 nodeIndex = 0,
91-
const NKikimr::NTabletPipe::TClientConfig& pipeConfig = NKikimr::NTabletPipe::TClientConfig(), TActorId clientId = TActorId(), ui64 cookie = 0);
91+
const NKikimr::NTabletPipe::TClientConfig& pipeConfig = NKikimr::NTabletPipe::TClientConfig(), TActorId clientId = TActorId(), ui64 cookie = 0, NWilson::TTraceId traceId = {});
9292
void SendToPipe(TActorId clientId, const TActorId& sender, IEventBase* payload,
93-
ui32 nodeIndex = 0, ui64 cookie = 0);
93+
ui32 nodeIndex = 0, ui64 cookie = 0, NWilson::TTraceId traceId = {});
9494
TActorId ConnectToPipe(ui64 tabletId, const TActorId& sender, ui32 nodeIndex, const NKikimr::NTabletPipe::TClientConfig& pipeConfig);
9595
void ClosePipe(TActorId clientId, const TActorId& sender, ui32 nodeIndex);
9696
void DisconnectNodes(ui32 fromNodeIndex, ui32 toNodeIndex, bool async = true);

ydb/core/tx/datashard/datashard.cpp

+16-4
Original file line numberDiff line numberDiff line change
@@ -2818,7 +2818,10 @@ void TDataShard::ProposeTransaction(TEvDataShard::TEvProposeTransaction::TPtr &&
28182818
UpdateProposeQueueSize();
28192819
} else {
28202820
// Prepare planned transactions as soon as possible
2821-
Execute(new TTxProposeTransactionBase(this, std::move(ev), TAppData::TimeProvider->Now(), NextTieBreakerIndex++, /* delayed */ false), ctx);
2821+
NWilson::TSpan datashardTransactionSpan(TWilsonTablet::Tablet, std::move(ev->TraceId), "Datashard.Transaction", NWilson::EFlags::AUTO_END);
2822+
datashardTransactionSpan.Attribute("Shard", std::to_string(TabletID()));
2823+
2824+
Execute(new TTxProposeTransactionBase(this, std::move(ev), TAppData::TimeProvider->Now(), NextTieBreakerIndex++, /* delayed */ false, std::move(datashardTransactionSpan)), ctx);
28222825
}
28232826
}
28242827

@@ -2836,7 +2839,10 @@ void TDataShard::ProposeTransaction(NEvents::TDataEvents::TEvWrite::TPtr&& ev, c
28362839
UpdateProposeQueueSize();
28372840
} else {
28382841
// Prepare planned transactions as soon as possible
2839-
Execute(new TTxWrite(this, std::move(ev), TAppData::TimeProvider->Now(), NextTieBreakerIndex++, /* delayed */ false), ctx);
2842+
NWilson::TSpan datashardTransactionSpan(TWilsonTablet::Tablet, std::move(ev->TraceId), "Datashard.WriteTransaction", NWilson::EFlags::AUTO_END);
2843+
datashardTransactionSpan.Attribute("Shard", std::to_string(TabletID()));
2844+
2845+
Execute(new TTxWrite(this, std::move(ev), TAppData::TimeProvider->Now(), NextTieBreakerIndex++, /* delayed */ false, std::move(datashardTransactionSpan)), ctx);
28402846
}
28412847
}
28422848

@@ -2901,12 +2907,18 @@ void TDataShard::Handle(TEvPrivate::TEvDelayedProposeTransaction::TPtr &ev, cons
29012907
switch (item.Event->GetTypeRewrite()) {
29022908
case TEvDataShard::TEvProposeTransaction::EventType: {
29032909
auto event = IEventHandle::Downcast<TEvDataShard::TEvProposeTransaction>(std::move(item.Event));
2904-
Execute(new TTxProposeTransactionBase(this, std::move(event), item.ReceivedAt, item.TieBreakerIndex, /* delayed */ true), ctx);
2910+
NWilson::TSpan datashardTransactionSpan(TWilsonTablet::Tablet, std::move(event->TraceId), "Datashard.Transaction", NWilson::EFlags::AUTO_END);
2911+
datashardTransactionSpan.Attribute("Shard", std::to_string(TabletID()));
2912+
2913+
Execute(new TTxProposeTransactionBase(this, std::move(event), item.ReceivedAt, item.TieBreakerIndex, /* delayed */ true, std::move(datashardTransactionSpan)), ctx);
29052914
return;
29062915
}
29072916
case NEvents::TDataEvents::TEvWrite::EventType: {
29082917
auto event = IEventHandle::Downcast<NEvents::TDataEvents::TEvWrite>(std::move(item.Event));
2909-
Execute(new TTxWrite(this, std::move(event), item.ReceivedAt, item.TieBreakerIndex, /* delayed */ true), ctx);
2918+
NWilson::TSpan datashardTransactionSpan(TWilsonTablet::Tablet, std::move(event->TraceId), "Datashard.WriteTransaction", NWilson::EFlags::AUTO_END);
2919+
datashardTransactionSpan.Attribute("Shard", std::to_string(TabletID()));
2920+
2921+
Execute(new TTxWrite(this, std::move(event), item.ReceivedAt, item.TieBreakerIndex, /* delayed */ true, std::move(datashardTransactionSpan)), ctx);
29102922
return;
29112923
}
29122924
default:

ydb/core/tx/datashard/datashard__progress_tx.cpp

+1-5
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ bool TDataShard::TTxProgressTransaction::Execute(TTransactionContext &txc, const
2525
return true;
2626
}
2727

28-
NWilson::TSpan auxExecuteSpan;
29-
3028
if (!ActiveOp) {
3129
const bool expireSnapshotsAllowed = (
3230
Self->State == TShardState::Ready ||
@@ -66,7 +64,7 @@ bool TDataShard::TTxProgressTransaction::Execute(TTransactionContext &txc, const
6664
// it won't have a span, because we choose what operation to run in the transaction itself.
6765
// We create transaction span and transaction execution spans here instead.
6866
SetupTxSpan(ActiveOp->GetTraceId());
69-
auxExecuteSpan = txc.Seat.CreateExecutionSpan();
67+
txc.StartExecutionSpan();
7068
}
7169
}
7270
}
@@ -81,7 +79,6 @@ bool TDataShard::TTxProgressTransaction::Execute(TTransactionContext &txc, const
8179
case EExecutionStatus::Restart:
8280
// Restart even if current CompleteList is not empty
8381
// It will be extended in subsequent iterations
84-
auxExecuteSpan.EndOk();
8582
return false;
8683

8784
case EExecutionStatus::Reschedule:
@@ -117,7 +114,6 @@ bool TDataShard::TTxProgressTransaction::Execute(TTransactionContext &txc, const
117114
}
118115

119116
// Commit all side effects
120-
auxExecuteSpan.EndOk();
121117
return true;
122118
} catch (...) {
123119
Y_ABORT("there must be no leaked exceptions");

ydb/core/tx/datashard/datashard__propose_tx_base.cpp

+9-19
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,17 @@ namespace NDataShard {
1414
TDataShard::TTxProposeTransactionBase::TTxProposeTransactionBase(TDataShard *self,
1515
TEvDataShard::TEvProposeTransaction::TPtr &&ev,
1616
TInstant receivedAt, ui64 tieBreakerIndex,
17-
bool delayed)
18-
: TBase(self, std::move(ev->TraceId))
17+
bool delayed,
18+
NWilson::TSpan &&datashardTransactionSpan)
19+
: TBase(self, datashardTransactionSpan.GetTraceId())
1920
, Ev(std::move(ev))
2021
, ReceivedAt(receivedAt)
2122
, TieBreakerIndex(tieBreakerIndex)
2223
, Kind(static_cast<EOperationKind>(Ev->Get()->GetTxKind()))
2324
, TxId(Ev->Get()->GetTxId())
2425
, Acked(!delayed)
25-
, ProposeTransactionSpan(TWilsonKqp::ProposeTransaction, TxSpan.GetTraceId(), "ProposeTransaction", NWilson::EFlags::AUTO_END)
26-
{
27-
ProposeTransactionSpan.Attribute("Shard", std::to_string(self->TabletID()));
28-
}
26+
, DatashardTransactionSpan(std::move(datashardTransactionSpan))
27+
{ }
2928

3029
bool TDataShard::TTxProposeTransactionBase::Execute(NTabletFlatExecutor::TTransactionContext &txc,
3130
const TActorContext &ctx)
@@ -60,9 +59,7 @@ bool TDataShard::TTxProposeTransactionBase::Execute(NTabletFlatExecutor::TTransa
6059
TActorId target = Op ? Op->GetTarget() : Ev->Sender;
6160
ui64 cookie = Op ? Op->GetCookie() : Ev->Cookie;
6261

63-
if (ProposeTransactionSpan) {
64-
ProposeTransactionSpan.EndOk();
65-
}
62+
DatashardTransactionSpan.EndOk();
6663
ctx.Send(target, result.Release(), 0, cookie);
6764

6865
return true;
@@ -76,17 +73,14 @@ bool TDataShard::TTxProposeTransactionBase::Execute(NTabletFlatExecutor::TTransa
7673
Ev = nullptr;
7774
return true;
7875
}
79-
80-
TOperation::TPtr op = Self->Pipeline.BuildOperation(Ev, ReceivedAt, TieBreakerIndex, txc, ctx, ProposeTransactionSpan.GetTraceId());
76+
77+
TOperation::TPtr op = Self->Pipeline.BuildOperation(Ev, ReceivedAt, TieBreakerIndex, txc, ctx, std::move(DatashardTransactionSpan));
8178

8279
// Unsuccessful operation parse.
8380
if (op->IsAborted()) {
8481
LWTRACK(ProposeTransactionParsed, op->Orbit, false);
8582
Y_ABORT_UNLESS(op->Result());
86-
87-
if (ProposeTransactionSpan) {
88-
ProposeTransactionSpan.EndError("Unsuccessful operation parse");
89-
}
83+
op->OperationSpan.EndError("Unsuccessful operation parse");
9084
ctx.Send(op->GetTarget(), op->Result().Release());
9185
return true;
9286
}
@@ -166,10 +160,6 @@ void TDataShard::TTxProposeTransactionBase::Complete(const TActorContext &ctx) {
166160
LOG_DEBUG_S(ctx, NKikimrServices::TX_DATASHARD,
167161
"TTxProposeTransactionBase::Complete at " << Self->TabletID());
168162

169-
if (ProposeTransactionSpan) {
170-
ProposeTransactionSpan.End();
171-
}
172-
173163
if (Op) {
174164
Y_ABORT_UNLESS(!Op->GetExecutionPlan().empty());
175165
if (!CompleteList.empty()) {

ydb/core/tx/datashard/datashard__write.cpp

+12-18
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,20 @@ LWTRACE_USING(DATASHARD_PROVIDER)
99

1010
namespace NKikimr::NDataShard {
1111

12-
TDataShard::TTxWrite::TTxWrite(TDataShard* self, NEvents::TDataEvents::TEvWrite::TPtr ev, TInstant receivedAt, ui64 tieBreakerIndex, bool delayed)
13-
: TBase(self, std::move(ev->TraceId))
12+
TDataShard::TTxWrite::TTxWrite(TDataShard* self,
13+
NEvents::TDataEvents::TEvWrite::TPtr ev,
14+
TInstant receivedAt,
15+
ui64 tieBreakerIndex,
16+
bool delayed,
17+
NWilson::TSpan &&datashardTransactionSpan)
18+
: TBase(self, datashardTransactionSpan.GetTraceId())
1419
, Ev(std::move(ev))
1520
, ReceivedAt(receivedAt)
1621
, TieBreakerIndex(tieBreakerIndex)
1722
, TxId(Ev->Get()->GetTxId())
1823
, Acked(!delayed)
19-
, ProposeTransactionSpan(TWilsonKqp::ProposeTransaction, TxSpan.GetTraceId(), "ProposeTransaction", NWilson::EFlags::AUTO_END)
20-
{
21-
ProposeTransactionSpan.Attribute("Shard", std::to_string(self->TabletID()));
22-
}
24+
, DatashardTransactionSpan(std::move(datashardTransactionSpan))
25+
{ }
2326

2427
bool TDataShard::TTxWrite::Execute(TTransactionContext& txc, const TActorContext& ctx) {
2528
LOG_TRACE_S(ctx, NKikimrServices::TX_DATASHARD, "TTxWrite:: execute at tablet# " << Self->TabletID());
@@ -54,9 +57,7 @@ bool TDataShard::TTxWrite::Execute(TTransactionContext& txc, const TActorContext
5457
TActorId target = Op ? Op->GetTarget() : Ev->Sender;
5558
ui64 cookie = Op ? Op->GetCookie() : Ev->Cookie;
5659

57-
if (ProposeTransactionSpan) {
58-
ProposeTransactionSpan.EndOk();
59-
}
60+
DatashardTransactionSpan.EndOk();
6061
ctx.Send(target, result.release(), 0, cookie);
6162

6263
return true;
@@ -71,17 +72,14 @@ bool TDataShard::TTxWrite::Execute(TTransactionContext& txc, const TActorContext
7172
return true;
7273
}
7374

74-
TOperation::TPtr op = Self->Pipeline.BuildOperation(Ev, ReceivedAt, TieBreakerIndex, txc, ctx, ProposeTransactionSpan.GetTraceId());
75+
TOperation::TPtr op = Self->Pipeline.BuildOperation(Ev, ReceivedAt, TieBreakerIndex, txc, ctx, std::move(DatashardTransactionSpan));
7576
TWriteOperation* writeOp = TWriteOperation::CastWriteOperation(op);
7677

7778
// Unsuccessful operation parse.
7879
if (op->IsAborted()) {
7980
LWTRACK(ProposeTransactionParsed, op->Orbit, false);
8081
Y_ABORT_UNLESS(writeOp->GetWriteResult());
81-
82-
if (ProposeTransactionSpan) {
83-
ProposeTransactionSpan.EndError("TTxWrite:: unsuccessful operation parse");
84-
}
82+
op->OperationSpan.EndError("Unsuccessful operation parse");
8583
ctx.Send(op->GetTarget(), writeOp->ReleaseWriteResult().release());
8684
return true;
8785
}
@@ -159,10 +157,6 @@ bool TDataShard::TTxWrite::Execute(TTransactionContext& txc, const TActorContext
159157
void TDataShard::TTxWrite::Complete(const TActorContext& ctx) {
160158
LOG_TRACE_S(ctx, NKikimrServices::TX_DATASHARD, "TTxWrite complete: at tablet# " << Self->TabletID());
161159

162-
if (ProposeTransactionSpan) {
163-
ProposeTransactionSpan.End();
164-
}
165-
166160
if (Op) {
167161
Y_ABORT_UNLESS(!Op->GetExecutionPlan().empty());
168162
if (!CompleteList.empty()) {

0 commit comments

Comments
 (0)