Skip to content

Commit d689629

Browse files
authored
Merge c4723a9 into f39e0b5
2 parents f39e0b5 + c4723a9 commit d689629

File tree

1 file changed

+28
-22
lines changed

1 file changed

+28
-22
lines changed

ydb/library/yql/providers/s3/actors/yql_s3_applicator_actor.cpp

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -488,32 +488,38 @@ class TS3ApplicatorActor : public NActors::TActorBootstrapped<TS3ApplicatorActor
488488

489489
void Process(TEvPrivate::TEvListParts::TPtr& ev) {
490490
auto& result = ev->Get()->Result;
491-
if (!result.Issues && result.Content.HttpResponseCode >= 200 && result.Content.HttpResponseCode < 300) {
492-
TS3Result s3Result(result.Content.Extract());
493-
if (s3Result.IsError) {
494-
Finish(true, s3Result.S3ErrorCode + ": " + s3Result.ErrorMessage);
495-
} else {
496-
LOG_D("ListParts SUCCESS " << ev->Get()->State->BuildUrl());
497-
const auto& root = s3Result.GetRootNode();
498-
if (root.Name() == "ListPartsResult") {
499-
const NXml::TNamespacesForXPath nss(1U, {"s3", "http://s3.amazonaws.com/doc/2006-03-01/"});
500-
auto state = ev->Get()->State->CompleteState;
501-
state->Tags.reserve(state->Tags.size() + root.Node("s3:MaxParts", false, nss).Value<ui32>());
502-
const auto& parts = root.XPath("s3:Part", true, nss);
503-
for (const auto& part : parts) {
504-
state->Tags.push_back(part.Node("s3:ETag", false, nss).Value<TString>());
505-
}
506-
if (root.Node("s3:IsTruncated", false, nss).Value<bool>()) {
507-
ev->Get()->State->PartNumberMarker = root.Node("s3:NextPartNumberMarker", false, nss).Value<TString>();
508-
PushListParts(ev->Get()->State);
491+
if (!result.Issues) {
492+
if (result.Content.HttpResponseCode == 404) {
493+
LOG_W("ListParts NOT FOUND " << ev->Get()->State->BuildUrl() << " (multipart upload may be completed already)");
494+
return;
495+
}
496+
if (result.Content.HttpResponseCode >= 200 && result.Content.HttpResponseCode < 300) {
497+
TS3Result s3Result(result.Content.Extract());
498+
if (s3Result.IsError) {
499+
Finish(true, s3Result.S3ErrorCode + ": " + s3Result.ErrorMessage);
500+
} else {
501+
LOG_D("ListParts SUCCESS " << ev->Get()->State->BuildUrl());
502+
const auto& root = s3Result.GetRootNode();
503+
if (root.Name() == "ListPartsResult") {
504+
const NXml::TNamespacesForXPath nss(1U, {"s3", "http://s3.amazonaws.com/doc/2006-03-01/"});
505+
auto state = ev->Get()->State->CompleteState;
506+
state->Tags.reserve(state->Tags.size() + root.Node("s3:MaxParts", false, nss).Value<ui32>());
507+
const auto& parts = root.XPath("s3:Part", true, nss);
508+
for (const auto& part : parts) {
509+
state->Tags.push_back(part.Node("s3:ETag", false, nss).Value<TString>());
510+
}
511+
if (root.Node("s3:IsTruncated", false, nss).Value<bool>()) {
512+
ev->Get()->State->PartNumberMarker = root.Node("s3:NextPartNumberMarker", false, nss).Value<TString>();
513+
PushListParts(ev->Get()->State);
514+
} else {
515+
PushCommitMultipartUpload(state);
516+
}
509517
} else {
510-
PushCommitMultipartUpload(state);
518+
Finish(true, "ListParts reply: " + root.Name());
511519
}
512-
} else {
513-
Finish(true, "ListParts reply: " + root.Name());
514520
}
521+
return;
515522
}
516-
return;
517523
}
518524
const TString& url = ev->Get()->State->BuildUrl();
519525
LOG_D("ListParts ERROR " << url);

0 commit comments

Comments
 (0)