Skip to content

Commit 6a00a87

Browse files
authored
feat(kv-ir): Update IrUnitHandlerReq::handle_log_event to accept the log event's index in the stream from the deserializer. (#1237)
1 parent bf24d8f commit 6a00a87

File tree

7 files changed

+47
-9
lines changed

7 files changed

+47
-9
lines changed

components/core/src/clp/ffi/ir_stream/Deserializer.hpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef CLP_FFI_IR_STREAM_DESERIALIZER_HPP
22
#define CLP_FFI_IR_STREAM_DESERIALIZER_HPP
33

4+
#include <cstddef>
45
#include <cstdint>
56
#include <memory>
67
#include <string>
@@ -196,6 +197,7 @@ class Deserializer {
196197
IrUnitHandlerType m_ir_unit_handler;
197198
bool m_is_complete{false};
198199
[[no_unique_address]] QueryHandlerType m_query_handler;
200+
size_t m_next_log_event_idx{0};
199201
};
200202

201203
/**
@@ -304,6 +306,9 @@ auto Deserializer<IrUnitHandler, QueryHandlerType>::deserialize_next_ir_unit(
304306
m_utc_offset
305307
))};
306308

309+
auto const log_event_idx{m_next_log_event_idx};
310+
m_next_log_event_idx += 1;
311+
307312
if constexpr (search::IsNonEmptyQueryHandler<QueryHandlerType>::value) {
308313
if (search::AstEvaluationResult::True
309314
!= YSTDLIB_ERROR_HANDLING_TRYX(
@@ -314,7 +319,9 @@ auto Deserializer<IrUnitHandler, QueryHandlerType>::deserialize_next_ir_unit(
314319
}
315320
}
316321

317-
if (auto const err{m_ir_unit_handler.handle_log_event(std::move(log_event))};
322+
if (auto const err{
323+
m_ir_unit_handler.handle_log_event(std::move(log_event), log_event_idx)
324+
};
318325
IRErrorCode::IRErrorCode_Success != err)
319326
{
320327
return ir_error_code_to_errc(err);

components/core/src/clp/ffi/ir_stream/IrUnitHandlerReq.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#define CLP_FFI_IR_STREAM_IRUNITHANDLERREQ_HPP
33

44
#include <concepts>
5+
#include <cstddef>
56
#include <memory>
67
#include <utility>
78

@@ -23,6 +24,7 @@ template <typename IrUnitHandlerType>
2324
concept IrUnitHandlerInterfaceReq = requires(
2425
IrUnitHandlerType handler,
2526
KeyValuePairLogEvent&& log_event,
27+
size_t log_event_idx,
2628
bool is_auto_generated,
2729
UtcOffset utc_offset_old,
2830
UtcOffset utc_offset_new,
@@ -32,10 +34,11 @@ concept IrUnitHandlerInterfaceReq = requires(
3234
/**
3335
* Handles a log event IR unit.
3436
* @param log_event The deserialized result from IR deserializer.
37+
* @param log_event_idx The log event index of `log_event` in the stream.
3538
* @return IRErrorCode::Success on success, user-defined error code on failures.
3639
*/
3740
{
38-
handler.handle_log_event(std::forward<KeyValuePairLogEvent &&>(log_event))
41+
handler.handle_log_event(std::forward<KeyValuePairLogEvent &&>(log_event), log_event_idx)
3942
} -> std::same_as<IRErrorCode>;
4043

4144
/**

components/core/src/clp/ffi/ir_stream/search/test/test_deserializer_integration.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <cstddef>
12
#include <cstdint>
23
#include <memory>
34
#include <sstream>
@@ -40,7 +41,9 @@ using JsonPair = std::pair<nlohmann::json, nlohmann::json>;
4041
*/
4142
class IrUnitHandler {
4243
public:
43-
[[nodiscard]] auto handle_log_event(KeyValuePairLogEvent&& log_event) -> IRErrorCode {
44+
[[nodiscard]] auto
45+
handle_log_event(KeyValuePairLogEvent&& log_event, [[maybe_unused]] size_t log_event_idx)
46+
-> IRErrorCode {
4447
m_deserialized_log_events.emplace_back(std::move(log_event));
4548
return IRErrorCode::IRErrorCode_Success;
4649
}

components/core/src/clp_s/JsonParser.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "JsonParser.hpp"
22

3+
#include <cstddef>
34
#include <cstdint>
45
#include <iostream>
56
#include <memory>
@@ -45,7 +46,9 @@ namespace clp_s {
4546
*/
4647
class IrUnitHandler {
4748
public:
48-
[[nodiscard]] auto handle_log_event(KeyValuePairLogEvent&& log_event) -> IRErrorCode {
49+
[[nodiscard]] auto
50+
handle_log_event(KeyValuePairLogEvent&& log_event, [[maybe_unused]] size_t log_event_idx)
51+
-> IRErrorCode {
4952
m_deserialized_log_event.emplace(std::move(log_event));
5053
return IRErrorCode::IRErrorCode_Success;
5154
}

components/core/src/clp_s/kv_ir_search.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,9 @@ class IrUnitHandler {
7474
~IrUnitHandler() = default;
7575

7676
// Methods implementing `IrUnitHandlerInterface`
77-
[[nodiscard]] auto handle_log_event(KeyValuePairLogEvent log_event) -> IRErrorCode;
77+
[[nodiscard]] auto
78+
handle_log_event(KeyValuePairLogEvent log_event, [[maybe_unused]] size_t log_event_idx)
79+
-> IRErrorCode;
7880

7981
[[nodiscard]] static auto handle_utc_offset_change(
8082
[[maybe_unused]] UtcOffset utc_offset_old,
@@ -151,7 +153,10 @@ auto IrUnitHandler::create(
151153
* necessary validations are performed.
152154
*/
153155
// NOLINTNEXTLINE(readability-convert-member-functions-to-static)
154-
auto IrUnitHandler::handle_log_event(clp::ffi::KeyValuePairLogEvent log_event) -> IRErrorCode {
156+
auto IrUnitHandler::handle_log_event(
157+
clp::ffi::KeyValuePairLogEvent log_event,
158+
[[maybe_unused]] size_t log_event_idx
159+
) -> IRErrorCode {
155160
auto const serialize_result{log_event.serialize_to_json()};
156161
if (serialize_result.has_error()) {
157162
SPDLOG_ERROR(

components/core/tests/test-ffi_IrUnitHandlerReq.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <cstddef>
12
#include <memory>
23
#include <optional>
34
#include <string_view>
@@ -28,7 +29,9 @@ constexpr std::string_view cTestSchemaTreeNodeKeyName{"test_key"};
2829
class TrivialIrUnitHandler {
2930
public:
3031
// Implements `clp::ffi::ir_stream::IrUnitHandlerReq`
31-
[[nodiscard]] auto handle_log_event(KeyValuePairLogEvent&& log_event) -> IRErrorCode {
32+
[[nodiscard]] auto
33+
handle_log_event(KeyValuePairLogEvent&& log_event, [[maybe_unused]] size_t log_event_idx)
34+
-> IRErrorCode {
3235
m_log_event.emplace(std::move(log_event));
3336
return IRErrorCode::IRErrorCode_Success;
3437
}
@@ -98,7 +101,7 @@ auto test_ir_unit_handler_req(clp::ffi::ir_stream::IrUnitHandlerReq auto& handle
98101
REQUIRE(
99102
(false == test_log_event_result.has_error()
100103
&& IRErrorCode::IRErrorCode_Success
101-
== handler.handle_log_event(std::move(test_log_event_result.value())))
104+
== handler.handle_log_event(std::move(test_log_event_result.value()), 0))
102105
);
103106
REQUIRE(
104107
(IRErrorCode::IRErrorCode_Success

components/core/tests/test-ir_encoding_methods.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,11 @@ class UnstructuredLogEvent {
103103
class IrUnitHandler {
104104
public:
105105
// Implements `clp::ffi::ir_stream::IrUnitHandlerReq`
106-
[[nodiscard]] auto handle_log_event(KeyValuePairLogEvent&& log_event) -> IRErrorCode {
106+
[[nodiscard]] auto
107+
handle_log_event(KeyValuePairLogEvent&& log_event, [[maybe_unused]] size_t log_event_idx)
108+
-> IRErrorCode {
107109
m_deserialized_log_events.emplace_back(std::move(log_event));
110+
m_deserialized_log_event_indices.emplace_back(log_event_idx);
108111
return IRErrorCode::IRErrorCode_Success;
109112
}
110113

@@ -152,8 +155,13 @@ class IrUnitHandler {
152155
return m_deserialized_log_events;
153156
}
154157

158+
[[nodiscard]] auto get_deserialized_log_event_indices() const -> vector<size_t> const& {
159+
return m_deserialized_log_event_indices;
160+
}
161+
155162
private:
156163
vector<KeyValuePairLogEvent> m_deserialized_log_events;
164+
vector<size_t> m_deserialized_log_event_indices;
157165
bool m_is_complete{false};
158166
};
159167

@@ -1313,6 +1321,10 @@ TEMPLATE_TEST_CASE(
13131321
auto const& deserialized_log_events{ir_unit_handler.get_deserialized_log_events()};
13141322
REQUIRE((expected_auto_gen_and_user_gen_object_pairs.size() == deserialized_log_events.size()));
13151323

1324+
auto const& deserialized_log_event_indices{
1325+
ir_unit_handler.get_deserialized_log_event_indices()
1326+
};
1327+
13161328
auto const num_log_events{expected_auto_gen_and_user_gen_object_pairs.size()};
13171329
for (size_t idx{0}; idx < num_log_events; ++idx) {
13181330
auto const& [expected_auto_gen_json_obj, expected_user_gen_json_obj]{
@@ -1339,6 +1351,8 @@ TEMPLATE_TEST_CASE(
13391351
};
13401352
REQUIRE((expected_auto_gen_json_obj == actual_auto_gen_json_obj));
13411353
REQUIRE((expected_user_gen_json_obj == actual_user_gen_json_obj));
1354+
1355+
REQUIRE((idx == deserialized_log_event_indices.at(idx)));
13421356
}
13431357

13441358
auto const eof_result{deserializer.deserialize_next_ir_unit(reader)};

0 commit comments

Comments
 (0)