Browse Source

YT-22307: Empty template for dist write api
e9554dea04d2a2fb0c9d8cbee012afa88382e715

arkady-e1ppa 6 months ago
parent
commit
c872ef1cd2

+ 3 - 0
yt/yt/client/api/client.h

@@ -4,6 +4,7 @@
 #include "accounting_client.h"
 #include "admin_client.h"
 #include "cypress_client.h"
+#include "distributed_table_client.h"
 #include "etc_client.h"
 #include "file_client.h"
 #include "journal_client.h"
@@ -37,6 +38,7 @@ struct IClientBase
     , public IJournalClientBase
     , public IQueueClientBase
     , public IEtcClientBase
+    , public IDistributedTableClientBase
 {
     virtual IConnectionPtr GetConnection() = 0;
 };
@@ -70,6 +72,7 @@ struct IClient
     , public IEtcClient
     , public NBundleControllerClient::IBundleControllerClient
     , public IFlowClient
+    , public IDistributedTableClient
 {
     //! Terminates all channels.
     //! Aborts all pending uncommitted transactions.

+ 16 - 0
yt/yt/client/api/delegating_client.h

@@ -840,6 +840,22 @@ public:
         const TGetFlowViewOptions& options),
         (pipelinePath, viewPath, options))
 
+    // Distributed client
+    DELEGATE_METHOD(TFuture<TDistributedWriteSessionPtr>, StartDistributedWriteSession, (
+        const NYPath::TRichYPath& path,
+        const TDistributedWriteSessionStartOptions& options),
+        (path, options))
+
+    DELEGATE_METHOD(TFuture<void>, FinishDistributedWriteSession, (
+        TDistributedWriteSessionPtr session,
+        const TDistributedWriteSessionFinishOptions& options),
+        (std::move(session), options))
+
+    DELEGATE_METHOD(TFuture<ITableWriterPtr>, CreateParticipantTableWriter, (
+        const TDistributedWriteCookiePtr& cookie,
+        const TParticipantTableWriterOptions& options),
+        (cookie, options))
+
     #undef DELEGATE_METHOD
 
 protected:

+ 10 - 0
yt/yt/client/api/delegating_transaction.cpp

@@ -312,6 +312,16 @@ DELEGATE_METHOD(TFuture<TPushQueueProducerResult>, PushQueueProducer, (
     const TPushQueueProducerOptions& options),
     (producerPath, queuePath, sessionId, epoch, nameTable, serializedRows, options))
 
+DELEGATE_METHOD(TFuture<TDistributedWriteSessionPtr>, StartDistributedWriteSession, (
+    const NYPath::TRichYPath& path,
+    const TDistributedWriteSessionStartOptions& options),
+    (path, options))
+
+DELEGATE_METHOD(TFuture<void>, FinishDistributedWriteSession, (
+    TDistributedWriteSessionPtr session,
+    const TDistributedWriteSessionFinishOptions& options),
+    (std::move(session), options))
+
 #undef DELEGATE_METHOD
 
 ////////////////////////////////////////////////////////////////////////////////

+ 9 - 0
yt/yt/client/api/delegating_transaction.h

@@ -256,6 +256,15 @@ public:
         const std::vector<TSharedRef>& serializedRows,
         const TPushQueueProducerOptions& options) override;
 
+    // Distributed table client
+    TFuture<TDistributedWriteSessionPtr> StartDistributedWriteSession(
+        const NYPath::TRichYPath& path,
+        const TDistributedWriteSessionStartOptions& options = {}) override;
+
+    TFuture<void> FinishDistributedWriteSession(
+        TDistributedWriteSessionPtr session,
+        const TDistributedWriteSessionFinishOptions& options = {}) override;
+
 protected:
     const ITransactionPtr Underlying_;
 };

+ 51 - 0
yt/yt/client/api/distributed_table_client.h

@@ -0,0 +1,51 @@
+#pragma once
+
+#include "table_client.h"
+
+#include <yt/yt/client/table_client/config.h>
+
+namespace NYT::NApi {
+
+////////////////////////////////////////////////////////////////////////////////
+
+struct TDistributedWriteSessionStartOptions
+    : public TTransactionalOptions
+{ };
+
+struct TDistributedWriteSessionFinishOptions
+    : public TTransactionalOptions
+{ };
+
+struct TParticipantTableWriterOptions
+    : public TTableWriterOptions
+{ };
+
+////////////////////////////////////////////////////////////////////////////////
+
+struct IDistributedTableClientBase
+{
+    virtual ~IDistributedTableClientBase() = default;
+
+    virtual TFuture<TDistributedWriteSessionPtr> StartDistributedWriteSession(
+        const NYPath::TRichYPath& path,
+        const TDistributedWriteSessionStartOptions& options = {}) = 0;
+
+    virtual TFuture<void> FinishDistributedWriteSession(
+        TDistributedWriteSessionPtr session,
+        const TDistributedWriteSessionFinishOptions& options = {}) = 0;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+struct IDistributedTableClient
+{
+    virtual ~IDistributedTableClient() = default;
+
+    virtual TFuture<ITableWriterPtr> CreateParticipantTableWriter(
+        const TDistributedWriteCookiePtr& cookie,
+        const TParticipantTableWriterOptions& options = {}) = 0;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+} // namespace NYT::NApi

+ 17 - 0
yt/yt/client/api/distributed_table_sessions.cpp

@@ -0,0 +1,17 @@
+#include "distributed_table_sessions.h"
+
+namespace NYT::NApi {
+
+////////////////////////////////////////////////////////////////////////////////
+
+void TDistributedWriteCookie::Register(TRegistrar /*registrar*/)
+{ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+void TDistributedWriteSession::Register(TRegistrar /*registrar*/)
+{ }
+
+////////////////////////////////////////////////////////////////////////////////
+
+} // namespace NYT::NApi

+ 41 - 0
yt/yt/client/api/distributed_table_sessions.h

@@ -0,0 +1,41 @@
+#pragma once
+
+#include "public.h"
+
+#include <yt/yt/core/ytree/yson_struct.h>
+
+namespace NYT::NApi {
+
+////////////////////////////////////////////////////////////////////////////////
+
+YT_DEFINE_STRONG_TYPEDEF(TDistributedWriteSessionId, TGuid);
+
+////////////////////////////////////////////////////////////////////////////////
+
+class TDistributedWriteCookie
+    : public NYTree::TYsonStruct
+{
+public:
+    REGISTER_YSON_STRUCT(TDistributedWriteCookie);
+
+    static void Register(TRegistrar registrar);
+};
+
+DEFINE_REFCOUNTED_TYPE(TDistributedWriteCookie);
+
+////////////////////////////////////////////////////////////////////////////////
+
+class TDistributedWriteSession
+    : public NYTree::TYsonStruct
+{
+public:
+    REGISTER_YSON_STRUCT(TDistributedWriteSession);
+
+    static void Register(TRegistrar registrar);
+};
+
+DEFINE_REFCOUNTED_TYPE(TDistributedWriteSession);
+
+////////////////////////////////////////////////////////////////////////////////
+
+} // namespace NYT::NApi

+ 3 - 0
yt/yt/client/api/public.h

@@ -184,6 +184,9 @@ DECLARE_REFCOUNTED_STRUCT(TBackupManifest)
 
 DECLARE_REFCOUNTED_STRUCT(TListOperationsAccessFilter)
 
+DECLARE_REFCOUNTED_CLASS(TDistributedWriteSession)
+DECLARE_REFCOUNTED_CLASS(TDistributedWriteCookie)
+
 ////////////////////////////////////////////////////////////////////////////////
 
 inline const TString ClusterNamePath("//sys/@cluster_name");

+ 6 - 0
yt/yt/client/api/rpc_proxy/api_service_proxy.h

@@ -204,6 +204,12 @@ public:
     DEFINE_RPC_PROXY_METHOD(NRpcProxy::NProto, AlterQuery);
     DEFINE_RPC_PROXY_METHOD(NRpcProxy::NProto, GetQueryTrackerInfo);
 
+    // Distributed table client
+    DEFINE_RPC_PROXY_METHOD(NRpcProxy::NProto, StartDistributedWriteSession);
+    DEFINE_RPC_PROXY_METHOD(NRpcProxy::NProto, FinishDistributedWriteSession);
+    DEFINE_RPC_PROXY_METHOD(NRpcProxy::NProto, ParticipantWriteTable,
+        .SetStreamingEnabled(true));
+
     // Misc
     DEFINE_RPC_PROXY_METHOD(NRpcProxy::NProto, CheckClusterLiveness);
 };

+ 33 - 0
yt/yt/client/api/rpc_proxy/client_base.cpp

@@ -12,6 +12,7 @@
 #include "table_writer.h"
 #include "transaction.h"
 
+#include <yt/yt/client/api/distributed_table_sessions.h>
 #include <yt/yt/client/api/file_reader.h>
 #include <yt/yt/client/api/file_writer.h>
 #include <yt/yt/client/api/journal_reader.h>
@@ -788,6 +789,38 @@ TFuture<ITableWriterPtr> TClientBase::CreateTableWriter(
 
 ////////////////////////////////////////////////////////////////////////////////
 
+TFuture<TDistributedWriteSessionPtr> TClientBase::StartDistributedWriteSession(
+    const NYPath::TRichYPath& path,
+    const TDistributedWriteSessionStartOptions& options)
+{
+    using TRsp = TIntrusivePtr<NRpc::TTypedClientResponse<NProto::TRspStartDistributedWriteSession>>;
+
+    auto proxy = CreateApiServiceProxy();
+
+    auto req = proxy.StartDistributedWriteSession();
+    FillRequest(req.Get(), path, options);
+
+    return req->Invoke()
+        .ApplyUnique(BIND([] (TRsp&& result) -> TDistributedWriteSessionPtr {
+            return ConvertTo<TDistributedWriteSessionPtr>(TYsonString(result->session()));
+        }));
+}
+
+TFuture<void> TClientBase::FinishDistributedWriteSession(
+    TDistributedWriteSessionPtr session,
+    const TDistributedWriteSessionFinishOptions& options)
+{
+    auto proxy = CreateApiServiceProxy();
+
+    auto req = proxy.FinishDistributedWriteSession();
+
+    FillRequest(req.Get(), std::move(session), options);
+
+    return req->Invoke().AsVoid();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
 TFuture<TUnversionedLookupRowsResult> TClientBase::LookupRows(
     const TYPath& path,
     TNameTablePtr nameTable,

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