mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-22 17:40:34 +00:00
pending_endpoints_for is called frequently by storage_proxy::create_write_response_handler when doing cql query. Before this patch, each call to pending_endpoints_for involves converting a multimap (std::unordered_multimap<range<token>, inet_address>>) to map (std::unordered_map<range<token>, std::unordered_set<inet_address>>). To speed up the token to pending endpoint mapping search, a interval map is introduced. It is faster than searching the map linearly and can avoid caching the token/pending endpoint mapping. With this patch, the operations per second drop during adding node period gets much better. Before: 45K to 10K After: 45k to 38K (The number is measured with the streaming code skipping to send data to rule out the streaming factor.) Refs: #1223