aboutsummaryrefslogtreecommitdiffstats
path: root/yt
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2025-02-24 18:38:30 +0000
committerAlexander Smirnov <alex@ydb.tech>2025-02-24 18:38:30 +0000
commita674a8f6c0a31e5a5c3b28333d533ae31797ecaa (patch)
treed0743df9a014a294168c54e417a4565186a904ca /yt
parent4b706240f28681a5580e79e1b333a695a628f719 (diff)
parent528c4caecb8037bbb191b114717af75bc26dbbea (diff)
downloadydb-a674a8f6c0a31e5a5c3b28333d533ae31797ecaa.tar.gz
Merge pull request #14964 from ydb-platform/merge-libs-250224-1527
Diffstat (limited to 'yt')
-rw-r--r--yt/yql/providers/yt/codec/yt_codec_io.cpp3
-rw-r--r--yt/yt/client/api/distributed_table_session.cpp3
-rw-r--r--yt/yt/client/driver/distributed_table_commands.cpp2
-rw-r--r--yt/yt/client/signature/generator.cpp4
-rw-r--r--yt/yt/client/signature/generator.h2
-rw-r--r--yt/yt/client/signature/signature.cpp12
-rw-r--r--yt/yt/client/signature/signature.h4
-rw-r--r--yt/yt/client/signature/unittests/dummy_ut.cpp4
-rw-r--r--yt/yt/client/signature/unittests/signature_ut.cpp2
-rw-r--r--yt/yt/core/misc/ema_counter-inl.h5
-rw-r--r--yt/yt/core/misc/unittests/ema_counter_ut.cpp4
11 files changed, 27 insertions, 18 deletions
diff --git a/yt/yql/providers/yt/codec/yt_codec_io.cpp b/yt/yql/providers/yt/codec/yt_codec_io.cpp
index 459602d9cf..0bc03184aa 100644
--- a/yt/yql/providers/yt/codec/yt_codec_io.cpp
+++ b/yt/yql/providers/yt/codec/yt_codec_io.cpp
@@ -1752,6 +1752,9 @@ void TMkqlReaderImpl::Next() {
} catch (const TYqlPanic& e) {
ythrow TYqlPanic() << "Failed to read row, table index: " << Decoder_->TableIndex_ << ", row index: " <<
(Decoder_->RowIndex_.Defined() ? ToString(*Decoder_->RowIndex_) : "?") << "\n" << e.what();
+ } catch (const TMemoryLimitExceededException&) {
+ ythrow TYqlPanic() << "Failed to read row, table index: " << Decoder_->TableIndex_ << ", row index: " <<
+ (Decoder_->RowIndex_.Defined() ? ToString(*Decoder_->RowIndex_) : "?") << ". Memory limit exceeded in MKQL runtime";
} catch (const TTimeoutException&) {
throw;
} catch (const yexception& e) {
diff --git a/yt/yt/client/api/distributed_table_session.cpp b/yt/yt/client/api/distributed_table_session.cpp
index 555c5f6812..24e1a4a741 100644
--- a/yt/yt/client/api/distributed_table_session.cpp
+++ b/yt/yt/client/api/distributed_table_session.cpp
@@ -15,6 +15,7 @@ using namespace NTransactionClient;
using namespace NYTree;
using namespace NCypressClient;
using namespace NChunkClient;
+using namespace NYson;
////////////////////////////////////////////////////////////////////////////////
@@ -124,7 +125,7 @@ TFuture<void> PingDistributedWriteSession(
const TSignedDistributedWriteSessionPtr& session,
const IClientPtr& client)
{
- auto concreteSession = ConvertTo<TDistributedWriteSession>(session.Underlying()->Payload());
+ auto concreteSession = ConvertTo<TDistributedWriteSession>(TYsonStringBuf(session.Underlying()->Payload()));
// NB(arkady-e1ppa): AutoAbort = false by default.
auto mainTx = client->AttachTransaction(concreteSession.MainTransactionId);
diff --git a/yt/yt/client/driver/distributed_table_commands.cpp b/yt/yt/client/driver/distributed_table_commands.cpp
index 80812a03af..4942408318 100644
--- a/yt/yt/client/driver/distributed_table_commands.cpp
+++ b/yt/yt/client/driver/distributed_table_commands.cpp
@@ -117,7 +117,7 @@ NApi::ITableWriterPtr TWriteTableFragmentCommand::CreateTableWriter(
.ValueOrThrow();
if (!validationSuccessful) {
- auto concreteCookie = ConvertTo<TWriteFragmentCookie>(signedCookie.Underlying()->Payload());
+ auto concreteCookie = ConvertTo<TWriteFragmentCookie>(TYsonStringBuf(signedCookie.Underlying()->Payload()));
THROW_ERROR_EXCEPTION(
"Signature validation failed for write table fragment")
diff --git a/yt/yt/client/signature/generator.cpp b/yt/yt/client/signature/generator.cpp
index 5687cd2b05..71c12d6ae2 100644
--- a/yt/yt/client/signature/generator.cpp
+++ b/yt/yt/client/signature/generator.cpp
@@ -10,10 +10,10 @@ using namespace NYson;
////////////////////////////////////////////////////////////////////////////////
-TSignaturePtr ISignatureGenerator::Sign(TYsonString data)
+TSignaturePtr ISignatureGenerator::Sign(std::string payload)
{
auto signature = New<TSignature>();
- signature->Payload_ = std::move(data);
+ signature->Payload_ = std::move(payload);
Sign(signature);
return signature;
}
diff --git a/yt/yt/client/signature/generator.h b/yt/yt/client/signature/generator.h
index 6dc12eef9f..6574128736 100644
--- a/yt/yt/client/signature/generator.h
+++ b/yt/yt/client/signature/generator.h
@@ -15,7 +15,7 @@ struct ISignatureGenerator
//! based on its payload.
virtual void Sign(const TSignaturePtr& signature) = 0;
- [[nodiscard]] TSignaturePtr Sign(NYson::TYsonString data);
+ [[nodiscard]] TSignaturePtr Sign(std::string payload);
};
DEFINE_REFCOUNTED_TYPE(ISignatureGenerator)
diff --git a/yt/yt/client/signature/signature.cpp b/yt/yt/client/signature/signature.cpp
index 0a71e0a02c..b7b26d25ec 100644
--- a/yt/yt/client/signature/signature.cpp
+++ b/yt/yt/client/signature/signature.cpp
@@ -14,7 +14,7 @@ using namespace NYTree;
////////////////////////////////////////////////////////////////////////////////
-const TYsonString& TSignature::Payload() const
+const std::string& TSignature::Payload() const
{
return Payload_;
}
@@ -26,8 +26,8 @@ void Serialize(const TSignature& signature, IYsonConsumer* consumer)
consumer->OnBeginMap();
BuildYsonMapFragmentFluently(consumer)
.Item("header").Value(signature.Header_.ToString())
- .Item("payload").Value(signature.Payload_.ToString())
- .Item("signature").Value(TString(
+ .Item("payload").Value(signature.Payload_)
+ .Item("signature").Value(TStringBuf(
reinterpret_cast<const char*>(signature.Signature_.data()),
signature.Signature_.size()));
consumer->OnEndMap();
@@ -39,10 +39,10 @@ void Deserialize(TSignature& signature, INodePtr node)
{
auto mapNode = node->AsMap();
signature.Header_ = TYsonString(mapNode->GetChildValueOrThrow<TString>("header"));
- signature.Payload_ = TYsonString(mapNode->GetChildValueOrThrow<TString>("payload"));
+ signature.Payload_ = mapNode->GetChildValueOrThrow<std::string>("payload");
- auto signatureString = mapNode->GetChildValueOrThrow<TString>("signature");
- auto signatureBytes = std::as_bytes(std::span(TStringBuf(signatureString)));
+ auto signatureString = mapNode->GetChildValueOrThrow<std::string>("signature");
+ auto signatureBytes = std::as_bytes(std::span(signatureString));
signature.Signature_.resize(signatureBytes.size());
std::copy(signatureBytes.begin(), signatureBytes.end(), signature.Signature_.begin());
diff --git a/yt/yt/client/signature/signature.h b/yt/yt/client/signature/signature.h
index ea74bb8192..a9bbaf8660 100644
--- a/yt/yt/client/signature/signature.h
+++ b/yt/yt/client/signature/signature.h
@@ -20,11 +20,11 @@ public:
//! Constructs an empty TSignature.
TSignature() = default;
- [[nodiscard]] const NYson::TYsonString& Payload() const;
+ [[nodiscard]] const std::string& Payload() const;
private:
NYson::TYsonString Header_;
- NYson::TYsonString Payload_;
+ std::string Payload_;
std::vector<std::byte> Signature_;
friend struct ISignatureGenerator;
diff --git a/yt/yt/client/signature/unittests/dummy_ut.cpp b/yt/yt/client/signature/unittests/dummy_ut.cpp
index eba593ad3c..364717473e 100644
--- a/yt/yt/client/signature/unittests/dummy_ut.cpp
+++ b/yt/yt/client/signature/unittests/dummy_ut.cpp
@@ -24,7 +24,7 @@ const auto YsonSignature = TYsonString(
TEST(TDummySignatureGeneratorTest, Generate)
{
auto generator = CreateDummySignatureGenerator();
- auto signature = generator->Sign(TYsonString("payload"_sb));
+ auto signature = generator->Sign("payload");
EXPECT_EQ(ConvertToYsonString(signature, EYsonFormat::Text), YsonSignature);
generator->Sign(signature);
EXPECT_EQ(ConvertToYsonString(signature, EYsonFormat::Text), YsonSignature);
@@ -45,7 +45,7 @@ TEST(TDummySignatureValidatorTest, GenerateValidate)
{
auto generator = CreateDummySignatureGenerator();
auto validator = CreateDummySignatureValidator();
- auto signature = generator->Sign(TYsonString("payload"_sb));
+ auto signature = generator->Sign("payload");
EXPECT_TRUE(validator->Validate(signature).Get().Value());
}
diff --git a/yt/yt/client/signature/unittests/signature_ut.cpp b/yt/yt/client/signature/unittests/signature_ut.cpp
index 2639715746..a570042370 100644
--- a/yt/yt/client/signature/unittests/signature_ut.cpp
+++ b/yt/yt/client/signature/unittests/signature_ut.cpp
@@ -23,7 +23,7 @@ TEST(TSignatureTest, DeserializeSerialize)
TSignaturePtr signature;
EXPECT_NO_THROW(signature = ConvertTo<TSignaturePtr>(ysonOK));
- EXPECT_EQ(signature->Payload().ToString(), "payload");
+ EXPECT_EQ(signature->Payload(), "payload");
EXPECT_EQ(ConvertToYsonString(signature, EYsonFormat::Text).ToString(), ysonOK.ToString());
}
diff --git a/yt/yt/core/misc/ema_counter-inl.h b/yt/yt/core/misc/ema_counter-inl.h
index 05a0aec6ef..eced52e06d 100644
--- a/yt/yt/core/misc/ema_counter-inl.h
+++ b/yt/yt/core/misc/ema_counter-inl.h
@@ -59,7 +59,10 @@ std::optional<double> TEmaCounter<T, WindowCount>::GetRate(int windowIndex, TIns
return {};
}
- return WindowRates[windowIndex];
+ YT_ASSERT(LastTimestamp.has_value());
+ auto timeDelta = (currentTimestamp - *LastTimestamp).SecondsFloat();
+ auto exp = std::exp(-timeDelta / (WindowDurations[windowIndex].SecondsFloat() / 2.0));
+ return WindowRates[windowIndex] * exp;
}
template <typename T, int WindowCount>
diff --git a/yt/yt/core/misc/unittests/ema_counter_ut.cpp b/yt/yt/core/misc/unittests/ema_counter_ut.cpp
index e7fcbb5602..dc5d23931d 100644
--- a/yt/yt/core/misc/unittests/ema_counter_ut.cpp
+++ b/yt/yt/core/misc/unittests/ema_counter_ut.cpp
@@ -67,7 +67,9 @@ TEST(TEmaCounterTest, MockTime)
// Result should be almost 1 (recall that the initial rate value of 0
// is remembered by EMA for some time).
EXPECT_NEAR(1.0, counter.WindowRates[0], 1e-3);
- EXPECT_TRUE(counter.GetRate(0, currentTimestamp));
+ ASSERT_TRUE(counter.GetRate(0, currentTimestamp));
+ EXPECT_NEAR(1.0, *counter.GetRate(0, currentTimestamp - sec), 1e-3);
+ EXPECT_NEAR(1e-3, *counter.GetRate(0, currentTimestamp + 5 * min), 1e-3); // log2(1e-3) ~ -10. Window is doubled half-decay period.
for (int index = 300; index < 360; ++index, currentTimestamp += sec) {
currentCount += actualRate;