Skip to content

Commit 678de9c

Browse files
committed
MOD: Increase symbol chunk size
1 parent cfabbbe commit 678de9c

File tree

4 files changed

+16
-15
lines changed

4 files changed

+16
-15
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
- Added `kDbnVersion` constants to each version namespace: `v1`, `v2`, and `v3`
88
- Added `kUndefStatQuantity` constants to each version namespace
99
- Added new off-market publishers for Eurex, and European Energy Exchange (EEX)
10+
- Increased live subscription symbol chunking size
1011

1112
## 0.34.2 - 2025-05-06
1213

src/live_blocking.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,16 @@ void LiveBlocking::Subscribe(std::string_view sub_msg,
113113
const std::vector<std::string>& symbols,
114114
bool use_snapshot) {
115115
static constexpr auto kMethodName = "Live::Subscribe";
116-
constexpr std::ptrdiff_t kSymbolMaxChunkSize = 128;
116+
constexpr std::ptrdiff_t kSymbolMaxChunkSize = 500;
117117

118118
if (symbols.empty()) {
119119
throw InvalidArgumentError{kMethodName, "symbols",
120120
"must contain at least one symbol"};
121121
}
122122
auto symbols_it = symbols.begin();
123123
while (symbols_it != symbols.end()) {
124-
const auto chunk_size =
125-
std::min(kSymbolMaxChunkSize, std::distance(symbols_it, symbols.end()));
124+
const auto distance_from_end = std::distance(symbols_it, symbols.end());
125+
const auto chunk_size = std::min(kSymbolMaxChunkSize, distance_from_end);
126126

127127
std::ostringstream chunked_sub_msg;
128128
chunked_sub_msg << sub_msg << "|symbols="

tests/src/live_blocking_tests.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ TEST_F(LiveBlockingTests, TestSubscriptionChunkingUnixNanos) {
107107
constexpr auto kTsOut = false;
108108
constexpr auto kDataset = dataset::kXnasItch;
109109
const auto kSymbol = "TEST";
110-
const std::size_t kSymbolCount = 1000;
110+
const std::size_t kSymbolCount = 1001;
111111
const auto kSchema = Schema::Ohlcv1M;
112112
const auto kSType = SType::RawSymbol;
113113

@@ -117,9 +117,9 @@ TEST_F(LiveBlockingTests, TestSubscriptionChunkingUnixNanos) {
117117
self.Accept();
118118
self.Authenticate();
119119
std::size_t i{};
120-
while (i < 1000) {
120+
while (i < kSymbolCount) {
121121
const auto chunk_size =
122-
std::min(static_cast<std::size_t>(128), kSymbolCount - i);
122+
std::min(static_cast<std::size_t>(500), kSymbolCount - i);
123123
const std::vector<std::string> symbols_chunk(chunk_size, kSymbol);
124124
self.Subscribe(symbols_chunk, kSchema, kSType);
125125
i += chunk_size;
@@ -162,7 +162,7 @@ TEST_F(LiveBlockingTests, TestSubscriptionChunkingStringStart) {
162162
constexpr auto kTsOut = false;
163163
constexpr auto kDataset = dataset::kXnasItch;
164164
const auto kSymbol = "TEST";
165-
const std::size_t kSymbolCount = 1000;
165+
const std::size_t kSymbolCount = 1001;
166166
const auto kSchema = Schema::Ohlcv1M;
167167
const auto kSType = SType::RawSymbol;
168168
const auto kStart = "2020-01-01T00:00:00";
@@ -174,9 +174,9 @@ TEST_F(LiveBlockingTests, TestSubscriptionChunkingStringStart) {
174174
self.Accept();
175175
self.Authenticate();
176176
std::size_t i{};
177-
while (i < 1000) {
177+
while (i < kSymbolCount) {
178178
const auto chunk_size =
179-
std::min(static_cast<std::size_t>(128), kSymbolCount - i);
179+
std::min(static_cast<std::size_t>(500), kSymbolCount - i);
180180
const std::vector<std::string> symbols_chunk(chunk_size, kSymbol);
181181
self.Subscribe(symbols_chunk, kSchema, kSType, kStart);
182182
i += chunk_size;
@@ -195,7 +195,7 @@ TEST_F(LiveBlockingTests, TestSubscribeSnapshot) {
195195
constexpr auto kTsOut = false;
196196
constexpr auto kDataset = dataset::kXnasItch;
197197
const auto kSymbol = "TEST";
198-
const std::size_t kSymbolCount = 1000;
198+
const std::size_t kSymbolCount = 1001;
199199
const auto kSchema = Schema::Ohlcv1M;
200200
const auto kSType = SType::RawSymbol;
201201
const auto kUseSnapshot = true;
@@ -207,9 +207,9 @@ TEST_F(LiveBlockingTests, TestSubscribeSnapshot) {
207207
self.Accept();
208208
self.Authenticate();
209209
std::size_t i{};
210-
while (i < 1000) {
210+
while (i < kSymbolCount) {
211211
const auto chunk_size =
212-
std::min(static_cast<std::size_t>(128), kSymbolCount - i);
212+
std::min(static_cast<std::size_t>(500), kSymbolCount - i);
213213
const std::vector<std::string> symbols_chunk(chunk_size, kSymbol);
214214
self.SubscribeWithSnapshot(symbols_chunk, kSchema, kSType);
215215
i += chunk_size;

tests/src/mock_lsg_server.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void MockLsgServer::Accept() {
5454
}
5555

5656
std::string MockLsgServer::Receive() {
57-
std::string received(1024, 0);
57+
std::string received(static_cast<std::size_t>(32 * 1024), 0);
5858
char c{};
5959
std::size_t read_size{};
6060
// Read char by char until newline
@@ -68,8 +68,8 @@ std::string MockLsgServer::Receive() {
6868
}
6969
c = received[read_size];
7070
++read_size;
71-
} while (c != '\n' && read_size < 1024);
72-
if (read_size == 1024) {
71+
} while (c != '\n' && read_size < received.size());
72+
if (read_size == received.size()) {
7373
throw TcpError{{}, "Overran buffer in MockLsgServer"};
7474
}
7575
received.resize(read_size);

0 commit comments

Comments
 (0)