apache / brpc

brpc is an Industrial-grade RPC framework using C++ Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. "brpc" means "better RPC".
https://brpc.apache.org
Apache License 2.0
16.41k stars 3.96k forks source link

Fix multi FlatMap scale and size #2669

Closed chenBright closed 2 months ago

chenBright commented 3 months ago

What problem does this PR solve?

Issue Number:

Problem Summary:

  1. Multi模式下,插入数据发生hash冲突的时候,size没有加一。另一方面,插入数据不能自动扩容。
  2. m1 = m2,m1扩容后m1._nbucket不等于m2._nbucket的时候,m1的_buckets上除了插入数据的位置,其他位置没有set_invalid,后续使用会出现内存问题。
  3. 扩容时,_buckets和_thumbnail都是先释放再申请新的内存。如果申请失败了,FlatMap就完全不可用了。

What is changed and the side effects?

Changed:

  1. size++。另外,当FlatMap负载超过阈值,则遍历Bucket链表,当存在不同的key的时候,则扩容。否则,不扩容直接插入。因为key一样,扩容后这些数据还是在同一个链表上。
  2. 扩容后都要初始化_buckets和_thumbnail数组。
  3. 申请内存成功后,再将其复制给_buckets和_thumbnail。一旦出现错误,则先释放已经申请的内存再返回失败。

Side effects:


Check List:

wwbmmm commented 2 months ago

LGTM

wasphin commented 2 months ago

这个是不是可以合了?

chenBright commented 2 months ago

这个是不是可以合了?

是的,可以合了。