aboutsummaryrefslogtreecommitdiff
path: root/weed/filesys/dirty_page.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/filesys/dirty_page.go')
-rw-r--r--weed/filesys/dirty_page.go20
1 files changed, 14 insertions, 6 deletions
diff --git a/weed/filesys/dirty_page.go b/weed/filesys/dirty_page.go
index 91a952421..871905fd5 100644
--- a/weed/filesys/dirty_page.go
+++ b/weed/filesys/dirty_page.go
@@ -21,19 +21,23 @@ type ContinuousDirtyPages struct {
lock sync.Mutex
}
+var bufPool = sync.Pool{
+ New: func() interface{} {
+ return new(bytes.Buffer)
+ },
+}
+
func newDirtyPages(file *File) *ContinuousDirtyPages {
return &ContinuousDirtyPages{
- Data: make([]byte, file.wfs.option.ChunkSizeLimit),
+ Data: nil,
f: file,
}
}
-func (pages *ContinuousDirtyPages) InitializeToFile(file *File) *ContinuousDirtyPages {
- if len(pages.Data) != int(file.wfs.option.ChunkSizeLimit) {
- pages.Data = make([]byte, file.wfs.option.ChunkSizeLimit)
+func (pages *ContinuousDirtyPages) releaseResource() {
+ if pages.Data != nil {
+ pages.f.wfs.bufPool.Put(pages.Data)
}
- pages.f = file
- return pages
}
func (pages *ContinuousDirtyPages) AddPage(ctx context.Context, offset int64, data []byte) (chunks []*filer_pb.FileChunk, err error) {
@@ -43,6 +47,10 @@ func (pages *ContinuousDirtyPages) AddPage(ctx context.Context, offset int64, da
var chunk *filer_pb.FileChunk
+ if pages.Data == nil {
+ pages.Data = pages.f.wfs.bufPool.Get().([]byte)
+ }
+
if len(data) > len(pages.Data) {
// this is more than what buffer can hold.
return pages.flushAndSave(ctx, offset, data)