aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgalaxycrab <UgnineSirdis@ydb.tech>2023-01-18 10:58:22 +0300
committergalaxycrab <UgnineSirdis@ydb.tech>2023-01-18 10:58:22 +0300
commitaa68184d84e44486e8a84092c48554f68ed1fc8a (patch)
tree233f9e3758aa324850f54945da389939418d595e
parentc8ec4475fce90f4e19f89424d4256ce641281f1c (diff)
downloadydb-aa68184d84e44486e8a84092c48554f68ed1fc8a.tar.gz
Fix double commit of S3 multipart upload
-rw-r--r--ydb/library/yql/providers/s3/actors/yql_s3_write_actor.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/ydb/library/yql/providers/s3/actors/yql_s3_write_actor.cpp b/ydb/library/yql/providers/s3/actors/yql_s3_write_actor.cpp
index ec59045d641..3bc4bf46b78 100644
--- a/ydb/library/yql/providers/s3/actors/yql_s3_write_actor.cpp
+++ b/ydb/library/yql/providers/s3/actors/yql_s3_write_actor.cpp
@@ -144,7 +144,7 @@ public:
void Bootstrap(const TActorId& parentId) {
ParentId = parentId;
- LOG_D("TS3FileWriteActor", __func__ << " by " << ParentId << " for Key: [" << Key << "], Url: [" << Url << "], request id: [" << RequestId << "]");
+ LOG_D("TS3FileWriteActor", "Bootstrap by " << ParentId << " for Key: [" << Key << "], Url: [" << Url << "], request id: [" << RequestId << "]");
if (Parts->IsSealed() && Parts->Size() <= 1) {
Become(&TS3FileWriteActor::SinglepartWorkingStateFunc);
const size_t size = Max<size_t>(Parts->Volume(), 1);
@@ -186,6 +186,9 @@ public:
}
void Finish() {
+ if (IsFinishing())
+ return;
+
Parts->Seal();
if (!UploadId.empty()) {
@@ -425,7 +428,7 @@ public:
}
void Bootstrap() {
- LOG_D("TS3WriteActor", __func__);
+ LOG_D("TS3WriteActor", "Bootstrap");
Become(&TS3WriteActor::StateFunc);
}
@@ -492,7 +495,12 @@ private:
}
if (finished) {
- std::for_each(FileWriteActors.cbegin(), FileWriteActors.cend(), [](const std::pair<const TString, std::vector<TS3FileWriteActor*>>& item){ item.second.back()->Finish(); });
+ std::for_each(
+ FileWriteActors.cbegin(),
+ FileWriteActors.cend(),
+ [](const std::pair<const TString, std::vector<TS3FileWriteActor*>>& item) {
+ item.second.back()->Finish();
+ });
Finished = true;
FinishIfNeeded();
}