Browse Source

YT-20309: yql agent default settings

apollo1321 1 year ago
parent
commit
bac0c121a8

+ 12 - 22
yt/yql/plugin/bridge/interface.h

@@ -18,35 +18,25 @@ struct TBridgeYqlPluginOptions
 {
     ssize_t RequiredABIVersion;
 
-    const char* SingletonsConfig;
-    ssize_t SingletonsConfigLength;
+    const char* SingletonsConfig = nullptr;
+    ssize_t SingletonsConfigLength = 0;
 
-    const char* MRJobBinary;
-    const char* UdfDirectory;
+    const char* GatewayConfig = nullptr;
+    size_t GatewayConfigLength = 0;
 
-    struct TBridgeCluster
-    {
-        const char* Cluster;
-        const char* Proxy;
-    };
-    ssize_t ClusterCount;
-    TBridgeCluster* Clusters;
-    const char* DefaultCluster;
+    const char* FileStorageConfig = nullptr;
+    size_t FileStorageConfigLength = 0;
 
-    const char* OperationAttributes;
-    ssize_t OperationAttributesLength = 0;
+    const char* OperationAttributes = nullptr;
+    size_t OperationAttributesLength = 0;
 
-    ssize_t MaxFilesSizeMb;
-    ssize_t MaxFileCount;
-    ssize_t DownloadFileRetryCount;
-
-    const char* YTTokenPath;
+    const char* YTTokenPath = nullptr;
 
     // TODO(max42): passing C++ objects across shared libraries is incredibly
     // fragile. This is a temporary mean until we come up with something more
     // convenient; get rid of this ASAP.
     using TLogBackendHolder = void;
-    TLogBackendHolder* LogBackend;
+    TLogBackendHolder* LogBackend = nullptr;
 };
 
 // Opaque type representing a YQL plugin.
@@ -85,10 +75,10 @@ enum EQueryFileContentType
 
 struct TBridgeQueryFile
 {
-    const char* Name;
+    const char* Name = nullptr;
     size_t NameLength = 0;
 
-    const char* Content;
+    const char* Content = nullptr;
     size_t ContentLength = 0;
 
     EQueryFileContentType Type;

+ 11 - 29
yt/yql/plugin/bridge/plugin.cpp

@@ -32,7 +32,7 @@ class TDynamicYqlPlugin
 public:
     TDynamicYqlPlugin(std::optional<TString> yqlPluginSharedLibrary)
     {
-        const TString DefaultYqlPluginLibraryName = "./libyqlplugin.so";
+        static const TString DefaultYqlPluginLibraryName = "./libyqlplugin.so";
         auto sharedLibraryPath = yqlPluginSharedLibrary.value_or(DefaultYqlPluginLibraryName);
         Library_.Open(sharedLibraryPath.data());
         #define XX(function) function = reinterpret_cast<TFunc ## function*>(Library_.Sym(#function));
@@ -55,39 +55,21 @@ class TYqlPlugin
     , public IYqlPlugin
 {
 public:
-    explicit TYqlPlugin(TYqlPluginOptions& options)
+    explicit TYqlPlugin(TYqlPluginOptions options)
         : TDynamicYqlPlugin(options.YqlPluginSharedLibrary)
     {
-        std::vector<TBridgeYqlPluginOptions::TBridgeCluster> bridgeClusters;
-        for (const auto& [cluster, proxy]: options.Clusters) {
-            bridgeClusters.push_back({
-               .Cluster = cluster.data(),
-               .Proxy = proxy.data(),
-           });
-        }
-
-        auto operationAttributesString = options.OperationAttributes ? options.OperationAttributes.ToString() : "{}";
-
-        const char* defaultCluster = options.DefaultCluster
-            ? options.DefaultCluster->data()
-            : nullptr;
-
         TString singletonsConfig = options.SingletonsConfig ? options.SingletonsConfig.ToString() : "{}";
 
         TBridgeYqlPluginOptions bridgeOptions {
             .RequiredABIVersion = options.RequiredABIVersion,
             .SingletonsConfig = singletonsConfig.data(),
             .SingletonsConfigLength = static_cast<int>(singletonsConfig.size()),
-            .MRJobBinary = options.MRJobBinary.data(),
-            .UdfDirectory = options.UdfDirectory.data(),
-            .ClusterCount = ssize(bridgeClusters),
-            .Clusters = bridgeClusters.data(),
-            .DefaultCluster = defaultCluster,
-            .OperationAttributes = operationAttributesString.data(),
-            .OperationAttributesLength = static_cast<int>(operationAttributesString.size()),
-            .MaxFilesSizeMb = options.MaxFilesSizeMb,
-            .MaxFileCount = options.MaxFileCount,
-            .DownloadFileRetryCount = options.DownloadFileRetryCount,
+            .GatewayConfig = options.GatewayConfig.AsStringBuf().Data(),
+            .GatewayConfigLength = options.GatewayConfig.AsStringBuf().Size(),
+            .FileStorageConfig = options.FileStorageConfig.AsStringBuf().Data(),
+            .FileStorageConfigLength = options.FileStorageConfig.AsStringBuf().Size(),
+            .OperationAttributes = options.OperationAttributes.AsStringBuf().Data(),
+            .OperationAttributesLength = options.OperationAttributes.AsStringBuf().Size(),
             .YTTokenPath = options.YTTokenPath.data(),
             .LogBackend = &options.LogBackend,
         };
@@ -152,11 +134,11 @@ private:
 
 ////////////////////////////////////////////////////////////////////////////////
 
-std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions& options) noexcept
+std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions options) noexcept
 {
-    return std::make_unique<NBridge::TYqlPlugin>(options);
+    return std::make_unique<NBridge::TYqlPlugin>(std::move(options));
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 
-} // namespace NYT::NYqlPlugin::NBridge
+} // namespace NYT::NYqlPlugin

+ 1 - 1
yt/yql/plugin/bridge/plugin.h

@@ -6,7 +6,7 @@ namespace NYT::NYqlPlugin {
 
 ////////////////////////////////////////////////////////////////////////////////
 
-std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions& options) noexcept;
+std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions options) noexcept;
 
 ////////////////////////////////////////////////////////////////////////////////
 

+ 4 - 15
yt/yql/plugin/dynamic/impl.cpp

@@ -21,12 +21,6 @@ TBridgeYqlPlugin* BridgeCreateYqlPlugin(const TBridgeYqlPluginOptions* bridgeOpt
 
     static const TYsonString EmptyMap = TYsonString(TString("{}"));
 
-    THashMap<TString, TString> clusters;
-    for (auto clusterIndex = 0; clusterIndex < bridgeOptions->ClusterCount; ++clusterIndex) {
-        const auto& Cluster = bridgeOptions->Clusters[clusterIndex];
-        clusters[Cluster.Cluster] = Cluster.Proxy;
-    }
-
     auto operationAttributes = bridgeOptions->OperationAttributes
         ? TYsonString(TString(bridgeOptions->OperationAttributes, bridgeOptions->OperationAttributesLength))
         : EmptyMap;
@@ -37,18 +31,13 @@ TBridgeYqlPlugin* BridgeCreateYqlPlugin(const TBridgeYqlPluginOptions* bridgeOpt
 
     TYqlPluginOptions options{
         .SingletonsConfig = singletonsConfig,
-        .MRJobBinary = TString(bridgeOptions->MRJobBinary),
-        .UdfDirectory = TString(bridgeOptions->UdfDirectory),
-        .Clusters = std::move(clusters),
-        .DefaultCluster = std::optional<TString>(bridgeOptions->DefaultCluster),
-        .OperationAttributes = operationAttributes,
-        .MaxFilesSizeMb = static_cast<int>(bridgeOptions->MaxFilesSizeMb),
-        .MaxFileCount = static_cast<int>(bridgeOptions->MaxFileCount),
-        .DownloadFileRetryCount = static_cast<int>(bridgeOptions->DownloadFileRetryCount),
+        .GatewayConfig = TYsonString(TStringBuf(bridgeOptions->GatewayConfig, bridgeOptions->GatewayConfigLength)),
+        .FileStorageConfig = TYsonString(TStringBuf(bridgeOptions->FileStorageConfig, bridgeOptions->FileStorageConfigLength)),
+        .OperationAttributes = TYsonString(TStringBuf(bridgeOptions->OperationAttributes, bridgeOptions->OperationAttributesLength)),
         .YTTokenPath = TString(bridgeOptions->YTTokenPath),
         .LogBackend = std::move(*reinterpret_cast<THolder<TLogBackend>*>(bridgeOptions->LogBackend)),
     };
-    auto nativePlugin = CreateYqlPlugin(options);
+    auto nativePlugin = CreateYqlPlugin(std::move(options));
     return nativePlugin.release();
 }
 

+ 41 - 52
yt/yql/plugin/native/plugin.cpp

@@ -3,26 +3,26 @@
 #include "error_helpers.h"
 #include "progress_merger.h"
 
+#include <ydb/library/yql/providers/yt/gateway/native/yql_yt_native.h>
 #include <ydb/library/yql/providers/yt/lib/log/yt_logger.h>
 #include <ydb/library/yql/providers/yt/lib/yt_download/yt_download.h>
-#include <ydb/library/yql/providers/yt/gateway/native/yql_yt_native.h>
 #include <ydb/library/yql/providers/yt/provider/yql_yt_provider.h>
 
-#include <ydb/library/yql/providers/common/udf_resolve/yql_simple_udf_resolver.h>
 #include "ydb/library/yql/providers/common/proto/gateways_config.pb.h"
 #include <ydb/library/yql/providers/common/provider/yql_provider_names.h>
+#include <ydb/library/yql/providers/common/udf_resolve/yql_simple_udf_resolver.h>
 
 #include <ydb/library/yql/ast/yql_expr.h>
-#include <ydb/library/yql/minikql/mkql_function_registry.h>
-#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins.h>
 #include <ydb/library/yql/core/facade/yql_facade.h>
 #include <ydb/library/yql/core/file_storage/file_storage.h>
-#include "ydb/library/yql/core/file_storage/proto/file_storage.pb.h"
+#include <ydb/library/yql/core/file_storage/proto/file_storage.pb.h>
 #include <ydb/library/yql/core/services/mounts/yql_mounts.h>
 #include <ydb/library/yql/core/services/yql_transform_pipeline.h>
 #include <ydb/library/yql/core/url_preprocessing/url_preprocessing.h>
-#include <ydb/library/yql/utils/log/log.h>
+#include <ydb/library/yql/minikql/invoke_builtins/mkql_builtins.h>
+#include <ydb/library/yql/minikql/mkql_function_registry.h>
 #include <ydb/library/yql/utils/backtrace/backtrace.h>
+#include <ydb/library/yql/utils/log/log.h>
 
 #include <yt/yt/core/ytree/convert.h>
 
@@ -31,14 +31,16 @@
 
 #include <yt/cpp/mapreduce/interface/logging/logger.h>
 
+#include <yt/yt/core/yson/protobuf_interop.h>
+
 #include <library/cpp/yt/threading/rw_spin_lock.h>
 
 #include <library/cpp/yson/node/node_io.h>
 #include <library/cpp/yson/parser.h>
 #include <library/cpp/yson/writer.h>
 
-#include <library/cpp/resource/resource.h>
 #include <library/cpp/digest/md5/md5.h>
+#include <library/cpp/resource/resource.h>
 
 #include <util/folder/path.h>
 #include <util/stream/file.h>
@@ -81,7 +83,7 @@ class TQueryPipelineConfigurator
 {
 public:
     TQueryPipelineConfigurator(NYql::TProgramPtr program, TQueryPlan& plan)
-        : Program_(program)
+        : Program_(std::move(program))
         , Plan_(plan)
     { }
 
@@ -116,7 +118,7 @@ class TYqlPlugin
     : public IYqlPlugin
 {
 public:
-    TYqlPlugin(TYqlPluginOptions& options)
+    TYqlPlugin(TYqlPluginOptions options)
     {
         try {
             auto singletonsConfig = NYTree::ConvertTo<TSingletonsConfigPtr>(options.SingletonsConfig);
@@ -128,7 +130,7 @@ public:
 
             logger.SetDefaultPriority(ELogPriority::TLOG_DEBUG);
             for (int i = 0; i < NYql::NLog::EComponentHelpers::ToInt(NYql::NLog::EComponent::MaxValue); ++i) {
-                logger.SetComponentLevel((NYql::NLog::EComponent) i, NYql::NLog::ELevel::DEBUG);
+                logger.SetComponentLevel((NYql::NLog::EComponent)i, NYql::NLog::ELevel::DEBUG);
             }
 
             NYql::SetYtLoggerGlobalBackend(NYT::ILogger::ELevel::DEBUG);
@@ -136,45 +138,30 @@ public:
                 NYT::TConfig::Get()->Prefix = "//";
             }
 
-            auto yqlCoreFlags = GatewaysConfig_.GetYqlCore()
-                .GetFlags();
-
-            auto ytConfig = GatewaysConfig_.MutableYt();
-            if (!ytConfig->HasExecuteUdfLocallyIfPossible()) {
-                ytConfig->SetExecuteUdfLocallyIfPossible(true);
-            }
-
-            auto pattern = ytConfig->AddRemoteFilePatterns();
-            pattern->SetPattern("yt://([a-zA-Z0-9\\-_]+)/([^&@?]+)$");
-            pattern->SetCluster("$1");
-            pattern->SetPath("$2");
+            NYson::TProtobufWriterOptions protobufWriterOptions;
+            protobufWriterOptions.ConvertSnakeToCamelCase = true;
 
-            ytConfig->SetYtLogLevel(NYql::EYtLogLevel::YL_DEBUG);
-            ytConfig->SetMrJobBin(options.MRJobBinary);
-            ytConfig->SetMrJobBinMd5(MD5::File(options.MRJobBinary));
+            auto* gatewayYtConfig = GatewaysConfig_.MutableYt();
+            gatewayYtConfig->ParseFromStringOrThrow(NYson::YsonStringToProto(
+                options.GatewayConfig,
+                NYson::ReflectProtobufMessageType<NYql::TYtGatewayConfig>(),
+                protobufWriterOptions));
 
-            ytConfig->ClearMrJobUdfsDir();
+            NYql::TFileStorageConfig fileStorageConfig;
+            fileStorageConfig.ParseFromStringOrThrow(NYson::YsonStringToProto(
+                options.FileStorageConfig,
+                NYson::ReflectProtobufMessageType<NYql::TFileStorageConfig>(),
+                protobufWriterOptions));
 
-            auto setting = ytConfig->AddDefaultSettings();
-            setting->SetName("NativeYtTypeCompatibility");
-            setting->SetValue("all");
+            gatewayYtConfig->SetMrJobBinMd5(MD5::File(gatewayYtConfig->GetMrJobBin()));
 
-            for (const auto& [cluster, address]: options.Clusters) {
-                auto item = ytConfig->AddClusterMapping();
-                item->SetName(cluster);
-                item->SetCluster(address);
-                if (cluster == options.DefaultCluster) {
-                    item->SetDefault(true);
+            for (const auto& mapping : gatewayYtConfig->GetClusterMapping()) {
+                Clusters_.insert({mapping.name(), TString(NYql::YtProviderName)});
+                if (mapping.GetDefault()) {
+                    DefaultCluster_ = mapping.name();
                 }
-
-                Clusters_.insert({item->GetName(), TString(NYql::YtProviderName)});
             }
-            DefaultCluster_ = options.DefaultCluster;
 
-            NYql::TFileStorageConfig fileStorageConfig;
-            fileStorageConfig.SetMaxSizeMb(options.MaxFilesSizeMb);
-            fileStorageConfig.SetMaxFiles(options.MaxFileCount);
-            fileStorageConfig.SetRetryCount(options.DownloadFileRetryCount);
             FileStorage_ = WithAsync(CreateFileStorage(fileStorageConfig, {MakeYtDownloader(fileStorageConfig)}));
 
             FuncRegistry_ = NKikimr::NMiniKQL::CreateFunctionRegistry(
@@ -187,8 +174,8 @@ public:
             NKikimr::NMiniKQL::TUdfModulePathsMap systemModules;
 
             TVector<TString> udfPaths;
-            NKikimr::NMiniKQL::FindUdfsInDir(options.UdfDirectory, &udfPaths);
-            for (const auto& path: udfPaths) {
+            NKikimr::NMiniKQL::FindUdfsInDir(gatewayYtConfig->GetMrJobUdfsDir(), &udfPaths);
+            for (const auto& path : udfPaths) {
                 // Skip YQL plugin shared library itself, it is not a UDF.
                 if (path.EndsWith("libyqlplugin.so")) {
                     continue;
@@ -196,7 +183,9 @@ public:
                 FuncRegistry_->LoadUdfs(path, emptyRemappings, 0);
             }
 
-            for (auto& m: FuncRegistry_->GetAllModuleNames()) {
+            gatewayYtConfig->ClearMrJobUdfsDir();
+
+            for (const auto& m : FuncRegistry_->GetAllModuleNames()) {
                 TMaybe<TString> path = FuncRegistry_->FindUdfPath(m);
                 if (!path) {
                     YQL_LOG(FATAL) << "Unable to detect UDF path for module " << m;
@@ -226,7 +215,7 @@ public:
             NYql::TYtNativeServices ytServices;
             ytServices.FunctionRegistry = FuncRegistry_.Get();
             ytServices.FileStorage = FileStorage_;
-            ytServices.Config = std::make_shared<NYql::TYtGatewayConfig>(*ytConfig);
+            ytServices.Config = std::make_shared<NYql::TYtGatewayConfig>(*gatewayYtConfig);
             auto ytNativeGateway = CreateYtNativeGateway(ytServices);
             dataProvidersInit.push_back(GetYtNativeDataProviderInitializer(ytNativeGateway));
 
@@ -312,7 +301,7 @@ public:
         if (program->HasResults()) {
             ::NYson::TYsonWriter yson(&result, EYsonFormat::Binary);
             yson.OnBeginList();
-            for (const auto& result: program->Results()) {
+            for (const auto& result : program->Results()) {
                 yson.OnListItem();
                 yson.OnRaw(result);
             }
@@ -383,19 +372,19 @@ private:
     THashMap<TQueryId, TActiveQuery> ActiveQueriesProgress_;
     TVector<NYql::TDataProviderInitializer> DataProvidersInit_;
 
-    TString PatchQueryAttributes(TYsonString configAttributes, TYsonString querySettings)
+    static TString PatchQueryAttributes(TYsonString configAttributes, TYsonString querySettings)
     {
         auto querySettingsMap = NodeFromYsonString(querySettings.ToString());
         auto resultAttributesMap = NodeFromYsonString(configAttributes.ToString());
 
-        for (const auto& item: querySettingsMap.AsMap()) {
+        for (const auto& item : querySettingsMap.AsMap()) {
             resultAttributesMap[item.first] = item.second;
         }
 
         return NodeToYsonString(resultAttributesMap);
     }
 
-    NYql::TUserDataTable FilesToUserTable(const std::vector<TQueryFile>& files)
+    static NYql::TUserDataTable FilesToUserTable(const std::vector<TQueryFile>& files)
     {
         NYql::TUserDataTable table;
 
@@ -428,9 +417,9 @@ private:
 
 ////////////////////////////////////////////////////////////////////////////////
 
-std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions& options) noexcept
+std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions options) noexcept
 {
-    return std::make_unique<NNative::TYqlPlugin>(options);
+    return std::make_unique<NNative::TYqlPlugin>(std::move(options));
 }
 
 ////////////////////////////////////////////////////////////////////////////////

+ 1 - 1
yt/yql/plugin/native/plugin.h

@@ -7,7 +7,7 @@ namespace NYT::NYqlPlugin {
 
 ////////////////////////////////////////////////////////////////////////////////
 
-std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions& options) noexcept;
+std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions options) noexcept;
 
 ////////////////////////////////////////////////////////////////////////////////
 

+ 1 - 1
yt/yql/plugin/plugin.cpp

@@ -6,7 +6,7 @@ namespace NYT::NYqlPlugin {
 
 ////////////////////////////////////////////////////////////////////////////////
 
-Y_WEAK std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions& /*options*/) noexcept
+Y_WEAK std::unique_ptr<IYqlPlugin> CreateYqlPlugin(TYqlPluginOptions /*options*/) noexcept
 {
     std::cerr << "No YQL plugin implementation is available; link against either "
               << "yt/yql/plugin/native or yt/yql/plugin/dynamic" << std::endl;

+ 2 - 12
yt/yql/plugin/plugin.h

@@ -29,20 +29,10 @@ public:
     int RequiredABIVersion;
 
     TYsonString SingletonsConfig;
-
-    TString MRJobBinary = "./mrjob";
-    TString UdfDirectory;
-
-    //! Mapping cluster name -> proxy address.
-    THashMap<TString, TString> Clusters;
-    std::optional<TString> DefaultCluster;
-
+    TYsonString GatewayConfig;
+    TYsonString FileStorageConfig;
     TYsonString OperationAttributes;
 
-    int MaxFilesSizeMb;
-    int MaxFileCount;
-    int DownloadFileRetryCount;
-
     TString YTTokenPath;
 
     THolder<TLogBackend> LogBackend;

+ 21 - 6
yt/yt/core/yson/protobuf_interop.cpp

@@ -28,6 +28,8 @@
 
 #include <library/cpp/yt/misc/cast.h>
 
+#include <library/cpp/yt/string/string.h>
+
 #include <library/cpp/yt/threading/fork_aware_spin_lock.h>
 
 #include <library/cpp/yt/coding/varint.h>
@@ -892,10 +894,10 @@ public:
     TProtobufWriter(
         ZeroCopyOutputStream* outputStream,
         const TProtobufMessageType* rootType,
-        const TProtobufWriterOptions& options)
+        TProtobufWriterOptions options)
         : OutputStream_(outputStream)
         , RootType_(rootType)
-        , Options_(options)
+        , Options_(std::move(options))
         , BodyOutputStream_(&BodyString_)
         , BodyCodedStream_(&BodyOutputStream_)
         , AttributeValueStream_(AttributeValue_)
@@ -1143,6 +1145,11 @@ private:
 
     void OnMyKeyedItem(TStringBuf key) override
     {
+        TString keyData;
+        if (Options_.ConvertSnakeToCamelCase) {
+            keyData = UnderscoreCaseToCamelCase(key);
+            key = keyData;
+        }
         const auto* field = FieldStack_.back().Field;
         if (field && field->IsYsonMap() && !FieldStack_.back().ParsingYsonMapFromList) {
             OnMyKeyedItemYsonMap(field, key);
@@ -1764,7 +1771,7 @@ private:
 std::unique_ptr<IYsonConsumer> CreateProtobufWriter(
     ZeroCopyOutputStream* outputStream,
     const TProtobufMessageType* rootType,
-    const TProtobufWriterOptions& options)
+    TProtobufWriterOptions options)
 {
     return std::make_unique<TProtobufWriter>(outputStream, rootType, options);
 }
@@ -2976,13 +2983,21 @@ TString YsonStringToProto(
     const TProtobufMessageType* payloadType,
     EUnknownYsonFieldsMode unknownFieldsMode)
 {
-    TString serializedProto;
-    google::protobuf::io::StringOutputStream protobufStream(&serializedProto);
     TProtobufWriterOptions protobufWriterOptions;
     protobufWriterOptions.UnknownYsonFieldModeResolver =
         TProtobufWriterOptions::CreateConstantUnknownYsonFieldModeResolver(
             unknownFieldsMode);
-    auto protobufWriter = CreateProtobufWriter(&protobufStream, payloadType, protobufWriterOptions);
+    return YsonStringToProto(ysonString, payloadType, std::move(protobufWriterOptions));
+}
+
+TString YsonStringToProto(
+    const TYsonString& ysonString,
+    const TProtobufMessageType* payloadType,
+    TProtobufWriterOptions options)
+{
+    TString serializedProto;
+    google::protobuf::io::StringOutputStream protobufStream(&serializedProto);
+    auto protobufWriter = CreateProtobufWriter(&protobufStream, payloadType, std::move(options));
     ParseYsonStringBuffer(ysonString.AsStringBuf(), EYsonType::Node, protobufWriter.get());
     return serializedProto;
 }

+ 7 - 2
yt/yt/core/yson/protobuf_interop.h

@@ -130,7 +130,7 @@ constexpr int UnknownYsonFieldNumber = 3005;
 std::unique_ptr<IYsonConsumer> CreateProtobufWriter(
     ::google::protobuf::io::ZeroCopyOutputStream* outputStream,
     const TProtobufMessageType* rootType,
-    const TProtobufWriterOptions& options = TProtobufWriterOptions());
+    TProtobufWriterOptions options = TProtobufWriterOptions());
 
 ////////////////////////////////////////////////////////////////////////////////
 
@@ -236,7 +236,7 @@ struct TProtobufMessageBytesFieldConverter
 //! This method is called during static initialization and not assumed to be called during runtime.
 void RegisterCustomProtobufBytesFieldConverter(
     const google::protobuf::Descriptor* descriptor,
-    int fieldIndex,
+    int fieldNumber,
     const TProtobufMessageBytesFieldConverter& converter);
 
 #define REGISTER_INTERMEDIATE_PROTO_INTEROP_BYTES_FIELD_REPRESENTATION(ProtoType, FieldNumber, Type)             \
@@ -266,6 +266,11 @@ TString YsonStringToProto(
     const TProtobufMessageType* payloadType,
     EUnknownYsonFieldsMode unknownFieldsMode);
 
+TString YsonStringToProto(
+    const TYsonString& ysonString,
+    const TProtobufMessageType* payloadType,
+    TProtobufWriterOptions options);
+
 ////////////////////////////////////////////////////////////////////////////////
 
 } // namespace NYT::NYson

Some files were not shown because too many files changed in this diff