Skip to content

Commit 0699018

Browse files
authored
Merge pull request #2909 from timbess/feature/decrease-max-heap-loading-data
Fix overallocations
2 parents c25388c + 47f1672 commit 0699018

File tree

6 files changed

+140
-95
lines changed

6 files changed

+140
-95
lines changed

cpp/perspective/src/cpp/arrow_loader.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ using namespace perspective;
138138

139139
ArrowLoader::ArrowLoader() = default;
140140
ArrowLoader::~ArrowLoader() = default;
141+
ArrowLoader::ArrowLoader(ArrowLoader&&) noexcept = default;
141142

142143
t_dtype
143144
convert_type(const std::string& src) {
@@ -484,6 +485,11 @@ copy_array(
484485
t_vocab* vocab = dest->_get_vocab();
485486
std::string elem;
486487

488+
vocab->reserve(
489+
dict->value_data()->size() + dsize, // vocab len + null bytes
490+
dsize
491+
);
492+
487493
for (std::uint64_t i = 0; i < dsize; ++i) {
488494
std::int32_t bidx = offsets[i];
489495
std::size_t es = offsets[i + 1] - bidx;

cpp/perspective/src/cpp/server.cpp

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -682,13 +682,16 @@ ProtoServer::handle_request(
682682
req_env.ParseFromString(data);
683683
std::vector<ProtoServerResp<std::string>> serialized_responses;
684684
std::vector<proto::Response> responses;
685+
686+
auto msg_id = req_env.msg_id();
687+
auto entity_id = req_env.entity_id();
685688
try {
686-
auto resp_msg = _handle_request(client_id, req_env);
689+
auto resp_msg = _handle_request(client_id, std::move(req_env));
687690
for (auto& resp : resp_msg) {
688691
ProtoServerResp<std::string> str_resp;
689692
str_resp.data = resp.data.SerializeAsString();
690693
str_resp.client_id = resp.client_id;
691-
serialized_responses.emplace_back(str_resp);
694+
serialized_responses.emplace_back(std::move(str_resp));
692695
}
693696
} catch (const PerspectiveException& e) {
694697
proto::Response resp;
@@ -718,13 +721,13 @@ ProtoServer::handle_request(
718721
// proto::Response resp_env;
719722
serialized_responses.reserve(responses.size());
720723
for (auto& resp : responses) {
721-
resp.set_msg_id(req_env.msg_id());
722-
resp.set_entity_id(req_env.entity_id());
724+
resp.set_msg_id(msg_id);
725+
resp.set_entity_id(entity_id);
723726

724727
ProtoServerResp<std::string> str_resp;
725728
str_resp.data = resp.SerializeAsString();
726729
str_resp.client_id = client_id;
727-
serialized_responses.emplace_back(str_resp);
730+
serialized_responses.emplace_back(std::move(str_resp));
728731
}
729732

730733
return serialized_responses;
@@ -1148,7 +1151,7 @@ coerce_to(const t_dtype dtype, const A& val) {
11481151
}
11491152

11501153
std::vector<ProtoServerResp<ProtoServer::Response>>
1151-
ProtoServer::_handle_request(std::uint32_t client_id, const Request& req) {
1154+
ProtoServer::_handle_request(std::uint32_t client_id, Request&& req) {
11521155
static bool is_init_expr = false;
11531156
if (!is_init_expr) {
11541157
t_computed_expression_parser::init();
@@ -1157,9 +1160,13 @@ ProtoServer::_handle_request(std::uint32_t client_id, const Request& req) {
11571160

11581161
std::vector<ProtoServerResp<ProtoServer::Response>> proto_resp;
11591162
// proto::Response resp_env;
1163+
1164+
auto msg_id = req.msg_id();
1165+
auto entity_id = req.entity_id();
1166+
11601167
auto push_resp = [&](Response&& resp) {
1161-
resp.set_msg_id(req.msg_id());
1162-
resp.set_entity_id(req.entity_id());
1168+
resp.set_msg_id(msg_id);
1169+
resp.set_entity_id(entity_id);
11631170
ProtoServerResp<ProtoServer::Response> resp2;
11641171
resp2.data = std::move(resp);
11651172
resp2.client_id = client_id;
@@ -1280,32 +1287,42 @@ ProtoServer::_handle_request(std::uint32_t client_id, const Request& req) {
12801287
dims.end_col
12811288
);
12821289

1283-
table = Table::from_arrow(index, *arrow, limit);
1290+
table = Table::from_arrow(index, std::move(*arrow), limit);
12841291
break;
12851292
}
12861293
case proto::MakeTableData::kFromArrow: {
1287-
table =
1288-
Table::from_arrow(index, r.data().from_arrow(), limit);
1294+
std::string data = r.data().from_arrow();
1295+
{ auto _ = std::move(req); }
1296+
1297+
table = Table::from_arrow(index, std::move(data), limit);
12891298
break;
12901299
}
12911300
case proto::MakeTableData::kFromCsv: {
1292-
table = Table::from_csv(index, r.data().from_csv(), limit);
1301+
std::string data = r.data().from_csv();
1302+
{ auto _ = std::move(req); }
1303+
1304+
table = Table::from_csv(index, std::move(data), limit);
12931305
break;
12941306
}
12951307
case proto::MakeTableData::kFromCols: {
1296-
table =
1297-
Table::from_cols(index, r.data().from_cols(), limit);
1308+
std::string data = r.data().from_cols();
1309+
{ auto _ = std::move(req); }
1310+
1311+
table = Table::from_cols(index, std::move(data), limit);
12981312
break;
12991313
}
13001314
case proto::MakeTableData::kFromRows: {
1301-
table =
1302-
Table::from_rows(index, r.data().from_rows(), limit);
1315+
std::string data = r.data().from_rows();
1316+
{ auto _ = std::move(req); }
1317+
1318+
table = Table::from_rows(index, std::move(data), limit);
13031319
break;
13041320
}
13051321
case proto::MakeTableData::kFromNdjson: {
1306-
table = Table::from_ndjson(
1307-
index, r.data().from_ndjson(), limit
1308-
);
1322+
std::string data = r.data().from_ndjson();
1323+
{ auto _ = std::move(req); }
1324+
1325+
table = Table::from_ndjson(index, std::move(data), limit);
13091326
break;
13101327
}
13111328
case proto::MakeTableData::kFromSchema: {
@@ -1327,7 +1344,7 @@ ProtoServer::_handle_request(std::uint32_t client_id, const Request& req) {
13271344
}
13281345
}
13291346

1330-
m_resources.host_table(req.entity_id(), table);
1347+
m_resources.host_table(entity_id, table);
13311348
proto::Response resp;
13321349
resp.mutable_make_table_resp();
13331350
push_resp(std::move(resp));

0 commit comments

Comments
 (0)