未验证 提交 93fa86da 编写于 作者: Y yukun 提交者: GitHub

Fix rocksdb_kv memory leak (#8743)

Signed-off-by: Nfishpenguin <kun.yu@zilliz.com>
上级 54a4e2cb
...@@ -135,6 +135,7 @@ func (kv *RocksdbKV) MultiLoad(keys []string) ([]string, error) { ...@@ -135,6 +135,7 @@ func (kv *RocksdbKV) MultiLoad(keys []string) ([]string, error) {
return []string{}, err return []string{}, err
} }
values = append(values, string(value.Data())) values = append(values, string(value.Data()))
value.Free()
} }
return values, nil return values, nil
} }
...@@ -154,7 +155,7 @@ func (kv *RocksdbKV) MultiSave(kvs map[string]string) error { ...@@ -154,7 +155,7 @@ func (kv *RocksdbKV) MultiSave(kvs map[string]string) error {
return errors.New("Rocksdb instance is nil when do MultiSave") return errors.New("Rocksdb instance is nil when do MultiSave")
} }
writeBatch := gorocksdb.NewWriteBatch() writeBatch := gorocksdb.NewWriteBatch()
defer writeBatch.Clear() defer writeBatch.Destroy()
for k, v := range kvs { for k, v := range kvs {
writeBatch.Put([]byte(k), []byte(v)) writeBatch.Put([]byte(k), []byte(v))
} }
...@@ -207,7 +208,7 @@ func (kv *RocksdbKV) MultiRemove(keys []string) error { ...@@ -207,7 +208,7 @@ func (kv *RocksdbKV) MultiRemove(keys []string) error {
return errors.New("Rocksdb instance is nil when do MultiRemove") return errors.New("Rocksdb instance is nil when do MultiRemove")
} }
writeBatch := gorocksdb.NewWriteBatch() writeBatch := gorocksdb.NewWriteBatch()
defer writeBatch.Clear() defer writeBatch.Destroy()
for _, key := range keys { for _, key := range keys {
writeBatch.Delete([]byte(key)) writeBatch.Delete([]byte(key))
} }
...@@ -221,7 +222,7 @@ func (kv *RocksdbKV) MultiSaveAndRemove(saves map[string]string, removals []stri ...@@ -221,7 +222,7 @@ func (kv *RocksdbKV) MultiSaveAndRemove(saves map[string]string, removals []stri
return errors.New("Rocksdb instance is nil when do MultiSaveAndRemove") return errors.New("Rocksdb instance is nil when do MultiSaveAndRemove")
} }
writeBatch := gorocksdb.NewWriteBatch() writeBatch := gorocksdb.NewWriteBatch()
defer writeBatch.Clear() defer writeBatch.Destroy()
for k, v := range saves { for k, v := range saves {
writeBatch.Put([]byte(k), []byte(v)) writeBatch.Put([]byte(k), []byte(v))
} }
...@@ -238,7 +239,7 @@ func (kv *RocksdbKV) DeleteRange(startKey, endKey string) error { ...@@ -238,7 +239,7 @@ func (kv *RocksdbKV) DeleteRange(startKey, endKey string) error {
return errors.New("Rocksdb instance is nil when do DeleteRange") return errors.New("Rocksdb instance is nil when do DeleteRange")
} }
writeBatch := gorocksdb.NewWriteBatch() writeBatch := gorocksdb.NewWriteBatch()
defer writeBatch.Clear() defer writeBatch.Destroy()
if len(startKey) == 0 { if len(startKey) == 0 {
iter := kv.DB.NewIterator(kv.ReadOptions) iter := kv.DB.NewIterator(kv.ReadOptions)
defer iter.Close() defer iter.Close()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册