fix(flashcache): use NewExtentRequestV2 instead of NewExtentRequest.#22696653

Signed-off-by: baihailong <baihailong@oppo.com>
This commit is contained in:
baihailong 2024-11-12 18:38:45 +08:00 committed by zhumingze1108
parent 90798863ca
commit 027f3aa40c

View File

@ -47,6 +47,19 @@ func NewExtentRequest(offset, size int, data []byte, ek *proto.ExtentKey) *Exten
}
}
// NewExtentRequest returns a new extent request.
func NewExtentRequestV2(offset, size int, data []byte, start, end uint64, ek *proto.ExtentKey) *ExtentRequest {
req := &ExtentRequest{
FileOffset: offset,
Size: size,
ExtentKey: ek,
}
if data != nil {
req.Data = data[start:end]
}
return req
}
// ExtentCache defines the struct of the extent cache.
type ExtentCache struct {
sync.RWMutex
@ -243,12 +256,12 @@ func (cache *ExtentCache) Append(ek *proto.ExtentKey, sync bool) (discardExtents
cache.Lock()
defer cache.Unlock()
//cache.root.Descend(func(i btree.Item) bool {
// cache.root.Descend(func(i btree.Item) bool {
// ek := i.(*proto.ExtentKey)
// // skip if the start offset matches with the given offset
// log.LogDebugf("action[Append.LoopPrint.Enter] inode %v ek [%v]", cache.inode, ek.String())
// return true
//})
// })
// When doing the append, we do not care about the data after the file offset.
// Those data will be overwritten by the current extent anyway.
@ -400,7 +413,7 @@ func (cache *ExtentCache) GetEndForAppendWrite(offset uint64, verSeq uint64, nee
ret = nil
return false
}
//?? should not have the neighbor extent in the next
// ?? should not have the neighbor extent in the next
if lastExistEk != nil && ek.IsFileInSequence(lastExistEk) {
log.LogErrorf("action[ExtentCache.GetEndForAppendWrite] ek %v is InSequence exist sequence extent %v", ek, lastExistEk)
ret = nil
@ -452,20 +465,20 @@ func (cache *ExtentCache) PrepareReadRequests(offset, size int, data []byte) []*
return false
} else if end < ekEnd {
// add hole (start, ekStart)
req := NewExtentRequest(start, ekStart-start, data[start-offset:ekStart-offset], nil)
req := NewExtentRequestV2(start, ekStart-start, data, uint64(start-offset), uint64(ekStart-offset), nil)
requests = append(requests, req)
// add non-hole (ekStart, end)
req = NewExtentRequest(ekStart, end-ekStart, data[ekStart-offset:end-offset], ek)
req = NewExtentRequestV2(ekStart, end-ekStart, data, uint64(ekStart-offset), uint64(end-offset), ek)
requests = append(requests, req)
start = end
return false
} else {
// add hole (start, ekStart)
req := NewExtentRequest(start, ekStart-start, data[start-offset:ekStart-offset], nil)
req := NewExtentRequestV2(start, ekStart-start, data, uint64(start-offset), uint64(ekStart-offset), nil)
requests = append(requests, req)
// add non-hole (ekStart, ekEnd)
req = NewExtentRequest(ekStart, ekEnd-ekStart, data[ekStart-offset:ekEnd-offset], ek)
req = NewExtentRequestV2(ekStart, ekEnd-ekStart, data, uint64(ekStart-offset), uint64(ekEnd-offset), ek)
requests = append(requests, req)
start = ekEnd
@ -474,13 +487,13 @@ func (cache *ExtentCache) PrepareReadRequests(offset, size int, data []byte) []*
} else if start < ekEnd {
if end <= ekEnd {
// add non-hole (start, end)
req := NewExtentRequest(start, end-start, data[start-offset:end-offset], ek)
req := NewExtentRequestV2(start, end-start, data, uint64(start-offset), uint64(end-offset), ek)
requests = append(requests, req)
start = end
return false
} else {
// add non-hole (start, ekEnd), start = ekEnd
req := NewExtentRequest(start, ekEnd-start, data[start-offset:ekEnd-offset], ek)
req := NewExtentRequestV2(start, ekEnd-start, data, uint64(start-offset), uint64(ekEnd-offset), ek)
requests = append(requests, req)
start = ekEnd
return true
@ -493,7 +506,7 @@ func (cache *ExtentCache) PrepareReadRequests(offset, size int, data []byte) []*
log.LogDebugf("PrepareReadRequests: ino(%v) start(%v) end(%v)", cache.inode, start, end)
if start < end {
// add hole (start, end)
req := NewExtentRequest(start, end-start, data[start-offset:end-offset], nil)
req := NewExtentRequestV2(start, end-start, data, uint64(start-offset), uint64(end-offset), nil)
requests = append(requests, req)
}