diff options
author | a-romanov <Anton.Romanov@ydb.tech> | 2022-09-16 17:48:25 +0300 |
---|---|---|
committer | a-romanov <Anton.Romanov@ydb.tech> | 2022-09-16 17:48:25 +0300 |
commit | 5e727bfc30a793941d168ef1e511ae4ebd344511 (patch) | |
tree | 02cec220e4e5c561d9e32a801a21abddd57a897b | |
parent | 1874940c915d71c35c6efa3529135fd80af8ed69 (diff) | |
download | ydb-5e727bfc30a793941d168ef1e511ae4ebd344511.tar.gz |
Fix get Etag on HTTP/1.1
-rw-r--r-- | ydb/library/yql/providers/s3/actors/CMakeLists.txt | 1 | ||||
-rw-r--r-- | ydb/library/yql/providers/s3/actors/yql_s3_write_actor.cpp | 13 |
2 files changed, 6 insertions, 8 deletions
diff --git a/ydb/library/yql/providers/s3/actors/CMakeLists.txt b/ydb/library/yql/providers/s3/actors/CMakeLists.txt index 931067348e2..8463a5dd374 100644 --- a/ydb/library/yql/providers/s3/actors/CMakeLists.txt +++ b/ydb/library/yql/providers/s3/actors/CMakeLists.txt @@ -21,6 +21,7 @@ target_link_libraries(providers-s3-actors PUBLIC yutil contrib-libs-fmt libs-poco-Util + cpp-actors-http cpp-string_utils-base64 cpp-string_utils-quote cpp-xml-document 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 ef7658508a3..1974a528cc8 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 @@ -13,6 +13,7 @@ #include <library/cpp/actors/core/event_local.h> #include <library/cpp/actors/core/hfunc.h> #include <library/cpp/actors/core/log.h> +#include <library/cpp/actors/http/http.h> #include <library/cpp/string_utils/base64/base64.h> #include <library/cpp/string_utils/quote/quote.h> @@ -199,16 +200,12 @@ private: switch (response.index()) { case 0U: { const auto& str = std::get<IHTTPGateway::TContent>(response).Headers; - - if (const auto p = str.find("etag: \""); p != TString::npos) { - if (const auto p1 = p + 7, p2 = str.find("\"", p1); p2 != TString::npos) { - actorSystem->Send(new IEventHandle(selfId, selfId, new TEvPrivate::TEvUploadPartFinished(size, index, str.substr(p1, p2 - p1)))); - break; - } + if (const NHttp::THeaders headers(str.substr(str.rfind("HTTP/"))); headers.Has("Etag")) + actorSystem->Send(new IEventHandle(selfId, selfId, new TEvPrivate::TEvUploadPartFinished(size, index, TString(headers.Get("Etag"))))); + else + actorSystem->Send(new IEventHandle(parentId, selfId, new TEvPrivate::TEvUploadError({TIssue(TStringBuilder() << "Unexpected response:" << Endl << str)}))); } - actorSystem->Send(new IEventHandle(parentId, selfId, new TEvPrivate::TEvUploadError({TIssue(TStringBuilder() << "Unexpected response:" << Endl << str)}))); break; - } case 1U: actorSystem->Send(new IEventHandle(parentId, selfId, new TEvPrivate::TEvUploadError(std::get<TIssues>(std::move(response))))); break; |