aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/messagebus/config/session_config.cpp
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/messagebus/config/session_config.cpp
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/messagebus/config/session_config.cpp')
-rw-r--r--library/cpp/messagebus/config/session_config.cpp157
1 files changed, 157 insertions, 0 deletions
diff --git a/library/cpp/messagebus/config/session_config.cpp b/library/cpp/messagebus/config/session_config.cpp
new file mode 100644
index 0000000000..fbbbb106c9
--- /dev/null
+++ b/library/cpp/messagebus/config/session_config.cpp
@@ -0,0 +1,157 @@
+#include "session_config.h"
+
+#include <util/generic/strbuf.h>
+#include <util/string/hex.h>
+
+using namespace NBus;
+
+TBusSessionConfig::TSecret::TSecret()
+ : TimeoutPeriod(TDuration::Seconds(1))
+ , StatusFlushPeriod(TDuration::MilliSeconds(400))
+{
+}
+
+TBusSessionConfig::TBusSessionConfig()
+ : BUS_SESSION_CONFIG_MAP(STRUCT_FIELD_INIT, COMMA)
+{
+}
+
+TString TBusSessionConfig::PrintToString() const {
+ TStringStream ss;
+ BUS_SESSION_CONFIG_MAP(STRUCT_FIELD_PRINT, )
+ return ss.Str();
+}
+
+static int ParseDurationForMessageBus(const char* option) {
+ return TDuration::Parse(option).MilliSeconds();
+}
+
+static int ParseToSForMessageBus(const char* option) {
+ int tos;
+ TStringBuf str(option);
+ if (str.StartsWith("0x")) {
+ str = str.Tail(2);
+ Y_VERIFY(str.length() == 2, "ToS must be a number between 0x00 and 0xFF");
+ tos = String2Byte(str.data());
+ } else {
+ tos = FromString<int>(option);
+ }
+ Y_VERIFY(tos >= 0 && tos <= 255, "ToS must be between 0x00 and 0xFF");
+ return tos;
+}
+
+template <class T>
+static T ParseWithKmgSuffixT(const char* option) {
+ TStringBuf str(option);
+ T multiplier = 1;
+ if (str.EndsWith('k')) {
+ multiplier = 1024;
+ str = str.Head(str.size() - 1);
+ } else if (str.EndsWith('m')) {
+ multiplier = 1024 * 1024;
+ str = str.Head(str.size() - 1);
+ } else if (str.EndsWith('g')) {
+ multiplier = 1024 * 1024 * 1024;
+ str = str.Head(str.size() - 1);
+ }
+ return FromString<T>(str) * multiplier;
+}
+
+static ui64 ParseWithKmgSuffix(const char* option) {
+ return ParseWithKmgSuffixT<ui64>(option);
+}
+
+static i64 ParseWithKmgSuffixS(const char* option) {
+ return ParseWithKmgSuffixT<i64>(option);
+}
+
+void TBusSessionConfig::ConfigureLastGetopt(NLastGetopt::TOpts& opts,
+ const TString& prefix) {
+ opts.AddLongOption(prefix + "total-timeout")
+ .RequiredArgument("MILLISECONDS")
+ .DefaultValue(ToString(TotalTimeout))
+ .StoreMappedResultT<const char*>(&TotalTimeout,
+ &ParseDurationForMessageBus);
+ opts.AddLongOption(prefix + "connect-timeout")
+ .RequiredArgument("MILLISECONDS")
+ .DefaultValue(ToString(ConnectTimeout))
+ .StoreMappedResultT<const char*>(&ConnectTimeout,
+ &ParseDurationForMessageBus);
+ opts.AddLongOption(prefix + "send-timeout")
+ .RequiredArgument("MILLISECONDS")
+ .DefaultValue(ToString(SendTimeout))
+ .StoreMappedResultT<const char*>(&SendTimeout,
+ &ParseDurationForMessageBus);
+ opts.AddLongOption(prefix + "send-threshold")
+ .RequiredArgument("BYTES")
+ .DefaultValue(ToString(SendThreshold))
+ .StoreMappedResultT<const char*>(&SendThreshold, &ParseWithKmgSuffix);
+
+ opts.AddLongOption(prefix + "max-in-flight")
+ .RequiredArgument("COUNT")
+ .DefaultValue(ToString(MaxInFlight))
+ .StoreMappedResultT<const char*>(&MaxInFlight, &ParseWithKmgSuffix);
+ opts.AddLongOption(prefix + "max-in-flight-by-size")
+ .RequiredArgument("BYTES")
+ .DefaultValue(
+ ToString(MaxInFlightBySize))
+ .StoreMappedResultT<const char*>(&MaxInFlightBySize, &ParseWithKmgSuffixS);
+ opts.AddLongOption(prefix + "per-con-max-in-flight")
+ .RequiredArgument("COUNT")
+ .DefaultValue(ToString(PerConnectionMaxInFlight))
+ .StoreMappedResultT<const char*>(&PerConnectionMaxInFlight,
+ &ParseWithKmgSuffix);
+ opts.AddLongOption(prefix + "per-con-max-in-flight-by-size")
+ .RequiredArgument("BYTES")
+ .DefaultValue(
+ ToString(PerConnectionMaxInFlightBySize))
+ .StoreMappedResultT<const char*>(&PerConnectionMaxInFlightBySize,
+ &ParseWithKmgSuffix);
+
+ opts.AddLongOption(prefix + "default-buffer-size")
+ .RequiredArgument("BYTES")
+ .DefaultValue(ToString(DefaultBufferSize))
+ .StoreMappedResultT<const char*>(&DefaultBufferSize,
+ &ParseWithKmgSuffix);
+ opts.AddLongOption(prefix + "max-buffer-size")
+ .RequiredArgument("BYTES")
+ .DefaultValue(ToString(MaxBufferSize))
+ .StoreMappedResultT<const char*>(&MaxBufferSize, &ParseWithKmgSuffix);
+ opts.AddLongOption(prefix + "max-message-size")
+ .RequiredArgument("BYTES")
+ .DefaultValue(ToString(MaxMessageSize))
+ .StoreMappedResultT<const char*>(&MaxMessageSize, &ParseWithKmgSuffix);
+ opts.AddLongOption(prefix + "socket-recv-buffer-size")
+ .RequiredArgument("BYTES")
+ .DefaultValue(ToString(SocketRecvBufferSize))
+ .StoreMappedResultT<const char*>(&SocketRecvBufferSize,
+ &ParseWithKmgSuffix);
+ opts.AddLongOption(prefix + "socket-send-buffer-size")
+ .RequiredArgument("BYTES")
+ .DefaultValue(ToString(SocketSendBufferSize))
+ .StoreMappedResultT<const char*>(&SocketSendBufferSize,
+ &ParseWithKmgSuffix);
+
+ opts.AddLongOption(prefix + "socket-tos")
+ .RequiredArgument("[0x00, 0xFF]")
+ .StoreMappedResultT<const char*>(&SocketToS, &ParseToSForMessageBus);
+ ;
+ opts.AddLongOption(prefix + "tcp-cork")
+ .RequiredArgument("BOOL")
+ .DefaultValue(ToString(TcpCork))
+ .StoreResult(&TcpCork);
+ opts.AddLongOption(prefix + "cork")
+ .RequiredArgument("SECONDS")
+ .DefaultValue(
+ ToString(Cork.Seconds()))
+ .StoreMappedResultT<const char*>(&Cork, &TDuration::Parse);
+
+ opts.AddLongOption(prefix + "on-message-in-pool")
+ .RequiredArgument("BOOL")
+ .DefaultValue(ToString(ExecuteOnMessageInWorkerPool))
+ .StoreResult(&ExecuteOnMessageInWorkerPool);
+ opts.AddLongOption(prefix + "on-reply-in-pool")
+ .RequiredArgument("BOOL")
+ .DefaultValue(ToString(ExecuteOnReplyInWorkerPool))
+ .StoreResult(&ExecuteOnReplyInWorkerPool);
+}