59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||
//go:build plus
|
||
|
||
package caches
|
||
|
||
import (
|
||
"github.com/TeaOSLab/EdgeNode/internal/utils/mmap"
|
||
"os"
|
||
)
|
||
|
||
func (this *FileStorage) tryMMAPReader(isPartial bool, estimatedSize int64, path string) (Reader, error) {
|
||
// TODO 因为在实践中MMAP耗费了太多CPU,在未解决之前先暂停支持
|
||
return nil, nil
|
||
var options = this.options // copy
|
||
if estimatedSize > 0 &&
|
||
!isPartial &&
|
||
(options != nil && options.EnableMMAP) &&
|
||
IsValidForMMAPSize(estimatedSize) {
|
||
var isOk bool
|
||
defer func() {
|
||
if !isOk {
|
||
_ = this.removeCacheFile(path)
|
||
}
|
||
}()
|
||
|
||
sharedMMAP, err := mmap.OpenSharedMMAP(path)
|
||
if err != nil {
|
||
if os.IsNotExist(err) {
|
||
isOk = true
|
||
return nil, ErrNotFound
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
reader, err := NewMMAPFileReader(sharedMMAP)
|
||
if err != nil {
|
||
if os.IsNotExist(err) {
|
||
isOk = true
|
||
return nil, ErrNotFound
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
err = reader.Init()
|
||
if err != nil {
|
||
if os.IsNotExist(err) {
|
||
isOk = true
|
||
return nil, ErrNotFound
|
||
}
|
||
return nil, err
|
||
}
|
||
|
||
isOk = true
|
||
return reader, nil
|
||
}
|
||
|
||
return nil, nil
|
||
}
|