@@ -31,24 +31,32 @@ bool TBackupTransactionOperator::DoParse(TColumnShard& owner, const TString& dat
3131 NArrow::NSerialization::TSerializerContainer serializer (std::make_shared<NArrow::NSerialization::TNativeSerializer>());
3232 ExportTask = std::make_shared<NOlap::NExport::TExportTask>(id.DetachResult (), selector.DetachResult (), storeInitializer.DetachResult (), serializer, GetTxId ());
3333 NOlap::NBackground::TTask task (::ToString (ExportTask->GetIdentifier ().GetPathId ()), std::make_shared<NOlap::NBackground::TFakeStatusChannel>(), ExportTask);
34- TxAddTask = owner.GetBackgroundSessionsManager ()->TxAddTask (task);
35- if (!TxAddTask) {
36- AFL_ERROR (NKikimrServices::TX_COLUMNSHARD)(" event" , " cannot_add_task" );
37- return false ;
34+ if (!owner.GetBackgroundSessionsManager ()->HasTask (task)) {
35+ TxAddTask = owner.GetBackgroundSessionsManager ()->TxAddTask (task);
36+ if (!TxAddTask) {
37+ AFL_ERROR (NKikimrServices::TX_COLUMNSHARD)(" event" , " cannot_add_task" );
38+ return false ;
39+ }
40+ } else {
41+ TaskExists = true ;
3842 }
3943 return true ;
4044}
4145
4246TBackupTransactionOperator::TProposeResult TBackupTransactionOperator::DoStartProposeOnExecute (TColumnShard& /* owner*/ , NTabletFlatExecutor::TTransactionContext& txc) {
43- AFL_VERIFY (!!TxAddTask);
44- AFL_VERIFY (TxAddTask->Execute (txc, NActors::TActivationContext::AsActorContext ()));
47+ if (!TaskExists) {
48+ AFL_VERIFY (!!TxAddTask);
49+ AFL_VERIFY (TxAddTask->Execute (txc, NActors::TActivationContext::AsActorContext ()));
50+ }
4551 return TProposeResult ();
4652}
4753
4854void TBackupTransactionOperator::DoStartProposeOnComplete (TColumnShard& /* owner*/ , const TActorContext& ctx) {
49- AFL_VERIFY (!!TxAddTask);
50- TxAddTask->Complete (ctx);
51- TxAddTask.reset ();
55+ if (!TaskExists) {
56+ AFL_VERIFY (!!TxAddTask);
57+ TxAddTask->Complete (ctx);
58+ TxAddTask.reset ();
59+ }
5260}
5361
5462bool TBackupTransactionOperator::ExecuteOnProgress (TColumnShard& /* owner*/ , const NOlap::TSnapshot& /* version*/ , NTabletFlatExecutor::TTransactionContext& /* txc*/ ) {
0 commit comments