userver: userver/ydb/federated_topic.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
federated_topic.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/ydb/federated_topic.hpp
4/// @brief YDB Federated Topic client
5///
6/// Federated Topic SDK serves as a wrapper over Topic SDK, coordinates
7/// reading from federated YDB installations topics, has a subset of functions
8/// of usual Topic SDK
9///
10/// @ref userver/ydb/topic.hpp
11
12#include <chrono>
13#include <memory>
14
15#include <ydb-cpp-sdk/client/federated_topic/federated_topic.h>
16
17USERVER_NAMESPACE_BEGIN
18
19namespace ydb {
20
21namespace impl {
22class Driver;
23struct TopicSettings;
24} // namespace impl
25
26/// @brief Read session used to connect to one or more topics for reading
27///
28/// @see https://ydb.tech/docs/en/reference/ydb-sdk/topic#reading
29///
30/// ## Example usage:
31///
32/// @ref samples/ydb_service/components/federated_topic_reader.hpp
33/// @ref samples/ydb_service/components/federated_topic_reader.cpp
34///
35/// @example samples/ydb_service/components/federated_topic_reader.hpp
36/// @example samples/ydb_service/components/federated_topic_reader.cpp
37class FederatedTopicReadSession final {
38public:
39 /// @cond
40 // For internal use only.
41 explicit FederatedTopicReadSession(std::shared_ptr<NYdb::NFederatedTopic::IFederatedReadSession> read_session);
42 /// @endcond
43
44 /// @brief Get read session events
45 ///
46 /// Waits until event occurs
47 /// @param max_events_count maximum events count in batch
48 /// @param max_size_bytes total size limit for data messages in batch
49 /// if not specified, read session chooses event batch size automatically
51 std::optional<std::size_t> max_events_count = {},
52 size_t max_size_bytes = std::numeric_limits<size_t>::max()
53 );
54
55 /// @brief Close read session
56 ///
57 /// Waits for all commit acknowledgments to arrive.
58 /// Force close after timeout
59 bool Close(std::chrono::milliseconds timeout);
60
61 /// Get native read session
62 /// @warning Use with care! Facilities from
63 /// `<core/include/userver/drivers/subscribable_futures.hpp>` can help with
64 /// non-blocking wait operations.
65 std::shared_ptr<NYdb::NFederatedTopic::IFederatedReadSession> GetNativeTopicReadSession();
66
67private:
68 std::shared_ptr<NYdb::NFederatedTopic::IFederatedReadSession> read_session_;
69};
70
71/// @ingroup userver_clients
72///
73/// @brief YDB Federated Topic Client
74///
75/// @see https://ydb.tech/docs/en/concepts/topic
76class FederatedTopicClient final {
77public:
78 /// @cond
79 // For internal use only.
80 FederatedTopicClient(std::shared_ptr<impl::Driver> driver, impl::TopicSettings settings);
81 /// @endcond
82
83 ~FederatedTopicClient();
84
85 /// Create read session
86 FederatedTopicReadSession CreateReadSession(const NYdb::NFederatedTopic::TFederatedReadSessionSettings& settings);
87
88 /// Get native topic client
89 /// @warning Use with care! Facilities from
90 /// `<core/include/userver/drivers/subscribable_futures.hpp>` can help with
91 /// non-blocking wait operations.
92 NYdb::NFederatedTopic::TFederatedTopicClient& GetNativeTopicClient();
93
94private:
95 std::shared_ptr<impl::Driver> driver_;
96 NYdb::NFederatedTopic::TFederatedTopicClient topic_client_;
97};
98
99} // namespace ydb
100
101USERVER_NAMESPACE_END