summaryrefslogtreecommitdiffstats
path: root/yt/cpp/mapreduce/http_client/raw_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'yt/cpp/mapreduce/http_client/raw_client.cpp')
-rw-r--r--yt/cpp/mapreduce/http_client/raw_client.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/yt/cpp/mapreduce/http_client/raw_client.cpp b/yt/cpp/mapreduce/http_client/raw_client.cpp
index f50b239c2aa..d2c64257222 100644
--- a/yt/cpp/mapreduce/http_client/raw_client.cpp
+++ b/yt/cpp/mapreduce/http_client/raw_client.cpp
@@ -767,6 +767,48 @@ std::unique_ptr<IInputStream> THttpRawClient::ReadTable(
return std::make_unique<NHttpClient::THttpResponseStream>(std::move(responseInfo));
}
+struct THttpRequestStream
+ : public IOutputStream
+{
+public:
+ THttpRequestStream(NHttpClient::IHttpRequestPtr request)
+ : Request_(std::move(request))
+ , Underlying_(Request_->GetStream())
+ { }
+
+private:
+ void DoWrite(const void* buf, size_t len) override
+ {
+ Underlying_->Write(buf, len);
+ }
+
+ void DoFinish() override
+ {
+ Underlying_->Finish();
+ Request_->Finish()->GetResponse();
+ }
+
+private:
+ NHttpClient::IHttpRequestPtr Request_;
+ IOutputStream* Underlying_;
+};
+
+std::unique_ptr<IOutputStream> THttpRawClient::WriteFile(
+ const TTransactionId& transactionId,
+ const TRichYPath& path,
+ const TFileWriterOptions& options)
+{
+ THttpHeader header("PUT", GetWriteFileCommand(Context_.Config->ApiVersion));
+ header.AddTransactionId(transactionId);
+ header.SetRequestCompression(ToString(Context_.Config->ContentEncoding));
+ header.MergeParameters(FormIORequestParameters(path, options));
+
+ TRequestConfig config;
+ config.IsHeavy = true;
+ auto request = StartRequestWithoutRetry(Context_, header, config);
+ return std::make_unique<THttpRequestStream>(std::move(request));
+}
+
std::unique_ptr<IInputStream> THttpRawClient::ReadTablePartition(
const TString& cookie,
const TMaybe<TFormat>& format,