feat(metanode): optimize memory usage of metanode, fields be allocted as needed in multi snapshot

close:#22785952

Signed-off-by: leonrayang <chl696@sina.com>
This commit is contained in:
leonrayang 2024-11-13 15:34:33 +08:00 committed by AmazingChi
parent 244eeee62b
commit dd3fd9616c
2 changed files with 28 additions and 1 deletions

View File

@ -36,6 +36,12 @@ type ExtendMultiSnap struct {
versionMu sync.RWMutex
}
type ExtendMultiSnap struct {
verSeq uint64
multiVers []*Extend
versionMu sync.RWMutex
}
type Extend struct {
inode uint64
dataMap map[string][]byte
@ -65,6 +71,27 @@ func (e *Extend) setVersion(seq uint64) {
e.multiSnap.verSeq = seq
}
func (e *Extend) getVersion() uint64 {
if e.multiSnap == nil {
return 0
}
return e.multiSnap.verSeq
}
func (e *Extend) genSnap() {
if e.multiSnap == nil {
e.multiSnap = &ExtendMultiSnap{}
}
e.multiSnap.multiVers = append([]*Extend{e.Copy().(*Extend)}, e.multiSnap.multiVers...)
}
func (e *Extend) setVersion(seq uint64) {
if e.multiSnap == nil {
e.multiSnap = &ExtendMultiSnap{}
}
e.multiSnap.verSeq = seq
}
func (e *Extend) checkSequence() (err error) {
if e.multiSnap == nil {
return

View File

@ -1435,7 +1435,7 @@ func TestExtendSerialization(t *testing.T) {
}
checkFunc()
mv.multiSnap = &ExtendMultiSnap{verSeq: 101}
mv.multiSnap = &ExtendMultiSnap{}
mv.multiSnap.multiVers = []*Extend{
{
inode: 789,