thrift-0002 + victoria-metrics-0002 + pulsar-0007 unit + kafka-0010 fix

thrift-0002: t_cpp_generator::is_struct_storage_not_throwing() vector<t_field*>
  member deduplication uses std::find O(M²) — fix with unordered_set

victoria-metrics-0002: MetricName RemoveTagsOn/RemoveTagsIgnoring hasTag()
  O(T×I) linear scan inside per-metric loop — fix with map-based tag set

pulsar-0007: ModularLoadManagerImpl.reapDeadBrokerPreallocations() takes
  List<String> aliveBrokers, calls contains() O(B) per broker — fix with HashSet

kafka-0010: fix unit test worst-case ordering (shared-topic last for slow path)
This commit is contained in:
russell@unturf.com 2026-03-29 22:25:29 -04:00
parent ba818693db
commit a922a7ee9d
6 changed files with 577 additions and 2 deletions

View file

@ -0,0 +1,22 @@
diff --git a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
--- a/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_cpp_generator.cc
@@ -5100,7 +5100,8 @@ bool t_cpp_generator::is_struct_storage_not_throwing(t_struct* tstruct) const {
vector<t_field*> members = tstruct->get_members();
+ std::unordered_set<t_field*> memberSet(members.begin(), members.end()); // O(1) dedup
for(size_t i=0; i < members.size(); ++i) {
t_type* type = get_true_type(members[i]->get_type());
@@ -5124,8 +5124,9 @@ bool t_cpp_generator::is_struct_storage_not_throwing(t_struct* tstruct) const {
if(type->is_struct()) {
const vector<t_field*>& more = ((t_struct*)type)->get_members();
for(auto it = more.begin(); it < more.end(); ++it) {
- if(std::find(members.begin(), members.end(), *it) == members.end())
+ if(memberSet.find(*it) == memberSet.end()) {
members.push_back(*it);
+ memberSet.insert(*it);
+ }
}
continue;
}