Skip to content

Commit 62cc966

Browse files
committed
FIX: Fix metadata not upgraded in C++
1 parent af9c77c commit 62cc966

File tree

7 files changed

+44
-18
lines changed

7 files changed

+44
-18
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@
33
## 0.19.1 - TBD
44

55
### Enhancements
6+
- Added `Upgrade()` method to `Metadata` to update the metadata fields according to a
7+
`VersionUpgradePolicy`
68
- Added new publisher values for `XNAS.BASIC` and `XNAS.NLS`
79

10+
### Bug fixes
11+
- Fixed issue where `Metadata` wasn't upgraded when passing
12+
`VersionUpgradePolicy::Upgrade`
13+
814
## 0.19.0 - 2024-06-04
915

1016
### Enhancements

include/databento/dbn.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ struct Metadata {
6868
std::vector<std::string> not_found;
6969
// Symbol mappings containing a native symbol and its mapping intervals.
7070
std::vector<SymbolMapping> mappings;
71+
72+
// Upgrades the metadata according to `upgrade_policy` if necessary.
73+
void Upgrade(VersionUpgradePolicy upgrade_policy);
7174
};
7275

7376
inline bool operator==(const MappingInterval& lhs, const MappingInterval& rhs) {

src/dbn.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,20 @@
22

33
#include <array>
44
#include <sstream> // ostringstream
5-
#include <utility> // pair
65

6+
#include "databento/constants.hpp"
77
#include "stream_op_helper.hpp"
88

99
namespace databento {
10+
11+
void Metadata::Upgrade(VersionUpgradePolicy upgrade_policy) {
12+
if (version < kDbnVersion &&
13+
upgrade_policy == VersionUpgradePolicy::Upgrade) {
14+
version = kDbnVersion;
15+
symbol_cstr_len = kSymbolCstrLen;
16+
}
17+
}
18+
1019
std::string ToString(const Metadata& metadata) { return MakeString(metadata); }
1120
std::ostream& operator<<(std::ostream& stream, const Metadata& metadata) {
1221
auto helper = StreamOpBuilder{stream}

src/dbn_decoder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ databento::Metadata DbnDecoder::DecodeMetadata() {
191191
buffer_idx_ = read_buffer_.size();
192192
auto metadata = DbnDecoder::DecodeMetadataFields(version_, read_buffer_);
193193
ts_out_ = metadata.ts_out;
194+
metadata.Upgrade(upgrade_policy_);
194195
return metadata;
195196
}
196197

src/live_blocking.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ databento::Metadata LiveBlocking::Start() {
130130
auto metadata =
131131
DbnDecoder::DecodeMetadataFields(version_and_size.first, meta_buffer);
132132
version_ = metadata.version;
133+
metadata.Upgrade(upgrade_policy_);
133134
return metadata;
134135
}
135136

test/src/dbn_decoder_tests.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ TEST_F(DbnDecoderTests, TestDecodeDefinitionUpgrade) {
109109
const Metadata ch_metadata = channel_target_->DecodeMetadata();
110110
const Metadata f_metadata = file_target_->DecodeMetadata();
111111
EXPECT_EQ(ch_metadata, f_metadata);
112-
EXPECT_EQ(ch_metadata.version, 1);
112+
EXPECT_EQ(ch_metadata.version, 2);
113113
EXPECT_EQ(ch_metadata.dataset, dataset::kXnasItch);
114114
EXPECT_EQ(ch_metadata.schema, Schema::Definition);
115115
EXPECT_EQ(ch_metadata.start.time_since_epoch().count(), 1633305600000000000);

test/src/live_blocking_tests.cpp

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <memory>
88
#include <mutex> // lock_guard, mutex, unique_lock
99
#include <thread> // this_thread
10+
#include <utility>
1011
#include <vector>
1112

1213
#include "databento/constants.hpp" // dataset
@@ -55,23 +56,28 @@ TEST_F(LiveBlockingTests, TestAuthentication) {
5556
.BuildBlocking();
5657
}
5758

58-
TEST_F(LiveBlockingTests, TestStart) {
59+
TEST_F(LiveBlockingTests, TestStartAndUpgrade) {
5960
constexpr auto kTsOut = true;
60-
const mock::MockLsgServer mock_server{dataset::kGlbxMdp3, kTsOut,
61-
[](mock::MockLsgServer& self) {
62-
self.Accept();
63-
self.Authenticate();
64-
self.Start();
65-
}};
66-
67-
LiveBlocking target = builder_.SetAddress(kLocalhost, mock_server.Port())
68-
.SetSendTsOut(kTsOut)
69-
.SetDataset(dataset::kGlbxMdp3)
70-
.BuildBlocking();
71-
const auto metadata = target.Start();
72-
EXPECT_EQ(metadata.version, 1);
73-
EXPECT_TRUE(metadata.has_mixed_schema);
74-
EXPECT_EQ(metadata.dataset, dataset::kGlbxMdp3);
61+
for (const auto policy_and_version :
62+
{std::make_pair(VersionUpgradePolicy::AsIs, 1),
63+
std::make_pair(VersionUpgradePolicy::Upgrade, 2)}) {
64+
const mock::MockLsgServer mock_server{dataset::kGlbxMdp3, kTsOut,
65+
[](mock::MockLsgServer& self) {
66+
self.Accept();
67+
self.Authenticate();
68+
self.Start();
69+
}};
70+
71+
LiveBlocking target = builder_.SetAddress(kLocalhost, mock_server.Port())
72+
.SetSendTsOut(kTsOut)
73+
.SetDataset(dataset::kGlbxMdp3)
74+
.SetUpgradePolicy(policy_and_version.first)
75+
.BuildBlocking();
76+
const auto metadata = target.Start();
77+
EXPECT_EQ(metadata.version, policy_and_version.second);
78+
EXPECT_TRUE(metadata.has_mixed_schema);
79+
EXPECT_EQ(metadata.dataset, dataset::kGlbxMdp3);
80+
}
7581
}
7682

7783
TEST_F(LiveBlockingTests, TestSubscribe) {

0 commit comments

Comments
 (0)