优化缓存错误相关代码

This commit is contained in:
GoEdgeLab
2024-01-15 21:00:20 +08:00
parent 8217425e13
commit 94384a2658
5 changed files with 30 additions and 23 deletions

View File

@@ -34,16 +34,14 @@ func CanIgnoreErr(err error) bool {
if err == nil { if err == nil {
return true return true
} }
if err == ErrFileIsWriting || if errors.Is(err, ErrFileIsWriting) ||
err == ErrEntityTooLarge || errors.Is(err, ErrEntityTooLarge) ||
err == ErrWritingUnavailable || errors.Is(err, ErrWritingUnavailable) ||
err == ErrWritingQueueFull || errors.Is(err, ErrWritingQueueFull) ||
err == ErrServerIsBusy { errors.Is(err, ErrServerIsBusy) {
return true return true
} }
_, ok := err.(*CapacityError)
if ok { var capacityErr *CapacityError
return true return errors.As(err, &capacityErr)
}
return false
} }

View File

@@ -1,16 +1,24 @@
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved. // Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package caches package caches_test
import ( import (
"errors"
"fmt"
"github.com/TeaOSLab/EdgeNode/internal/caches"
"github.com/iwind/TeaGo/assert" "github.com/iwind/TeaGo/assert"
"testing" "testing"
) )
func TestCanIgnoreErr(t *testing.T) { func TestCanIgnoreErr(t *testing.T) {
a := assert.NewAssertion(t) var a = assert.NewAssertion(t)
a.IsTrue(CanIgnoreErr(ErrFileIsWriting)) a.IsTrue(caches.CanIgnoreErr(caches.ErrFileIsWriting))
a.IsTrue(CanIgnoreErr(NewCapacityError("over capcity"))) a.IsTrue(caches.CanIgnoreErr(fmt.Errorf("error: %w", caches.ErrFileIsWriting)))
a.IsFalse(CanIgnoreErr(ErrNotFound)) a.IsTrue(errors.Is(fmt.Errorf("error: %w", caches.ErrFileIsWriting), caches.ErrFileIsWriting))
a.IsTrue(errors.Is(caches.ErrFileIsWriting, caches.ErrFileIsWriting))
a.IsTrue(caches.CanIgnoreErr(caches.NewCapacityError("over capacity")))
a.IsTrue(caches.CanIgnoreErr(fmt.Errorf("error: %w", caches.NewCapacityError("over capacity"))))
a.IsFalse(caches.CanIgnoreErr(caches.ErrNotFound))
a.IsFalse(caches.CanIgnoreErr(errors.New("test error")))
} }

View File

@@ -464,7 +464,7 @@ func (this *FileStorage) openWriter(key string, expiredAt int64, status int, hea
_, ok := sharedWritingFileKeyMap[key] _, ok := sharedWritingFileKeyMap[key]
if ok { if ok {
sharedWritingFileKeyLocker.Unlock() sharedWritingFileKeyLocker.Unlock()
return nil, ErrFileIsWriting return nil, fmt.Errorf("%w(001)", ErrFileIsWriting)
} }
if !isFlushing && !fsutils.WriteReady() { if !isFlushing && !fsutils.WriteReady() {
@@ -505,7 +505,7 @@ func (this *FileStorage) openWriter(key string, expiredAt int64, status int, hea
// 检查两次写入缓存的时间是否过于相近,分片内容不受此限制 // 检查两次写入缓存的时间是否过于相近,分片内容不受此限制
if err == nil && !isPartial && time.Since(stat.ModTime()) <= 1*time.Second { if err == nil && !isPartial && time.Since(stat.ModTime()) <= 1*time.Second {
// 防止并发连续写入 // 防止并发连续写入
return nil, ErrFileIsWriting return nil, fmt.Errorf("%w(002)", ErrFileIsWriting)
} }
// 构造文件名 // 构造文件名
@@ -606,7 +606,7 @@ func (this *FileStorage) openWriter(key string, expiredAt int64, status int, hea
err = syscall.Flock(int(writer.Fd()), syscall.LOCK_EX|syscall.LOCK_NB) err = syscall.Flock(int(writer.Fd()), syscall.LOCK_EX|syscall.LOCK_NB)
if err != nil { if err != nil {
removeOnFailure = false removeOnFailure = false
return nil, ErrFileIsWriting return nil, fmt.Errorf("%w (003)", ErrFileIsWriting)
} }
var metaBodySize int64 = -1 var metaBodySize int64 = -1

View File

@@ -231,7 +231,7 @@ func TestFileStorage_Concurrent_Open_DifferentFile(t *testing.T) {
writer, err := storage.OpenWriter("abc"+strconv.Itoa(i), time.Now().Unix()+3600, 200, -1, -1, -1, false) writer, err := storage.OpenWriter("abc"+strconv.Itoa(i), time.Now().Unix()+3600, 200, -1, -1, -1, false)
if err != nil { if err != nil {
if err != ErrFileIsWriting { if errors.Is(err, ErrFileIsWriting) {
t.Error(err) t.Error(err)
return return
} }
@@ -289,7 +289,7 @@ func TestFileStorage_Concurrent_Open_SameFile(t *testing.T) {
writer, err := storage.OpenWriter("abc"+strconv.Itoa(0), time.Now().Unix()+3600, 200, -1, -1, -1, false) writer, err := storage.OpenWriter("abc"+strconv.Itoa(0), time.Now().Unix()+3600, 200, -1, -1, -1, false)
if err != nil { if err != nil {
if err != ErrFileIsWriting { if errors.Is(err, ErrFileIsWriting) {
t.Error(err) t.Error(err)
return return
} }

View File

@@ -1,6 +1,7 @@
package caches package caches
import ( import (
"fmt"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
"github.com/TeaOSLab/EdgeNode/internal/goman" "github.com/TeaOSLab/EdgeNode/internal/goman"
"github.com/TeaOSLab/EdgeNode/internal/remotelogs" "github.com/TeaOSLab/EdgeNode/internal/remotelogs"
@@ -161,7 +162,7 @@ func (this *MemoryStorage) OpenWriter(key string, expiredAt int64, status int, h
// TODO 内存缓存暂时不支持分块内容存储 // TODO 内存缓存暂时不支持分块内容存储
if isPartial { if isPartial {
return nil, ErrFileIsWriting return nil, fmt.Errorf("%w (004)", ErrFileIsWriting)
} }
return this.openWriter(key, expiredAt, status, headerSize, bodySize, maxSize, true) return this.openWriter(key, expiredAt, status, headerSize, bodySize, maxSize, true)
} }
@@ -187,7 +188,7 @@ func (this *MemoryStorage) openWriter(key string, expiresAt int64, status int, h
var isWriting = false var isWriting = false
_, ok := this.writingKeyMap[key] _, ok := this.writingKeyMap[key]
if ok { if ok {
return nil, ErrFileIsWriting return nil, fmt.Errorf("%w (005)", ErrFileIsWriting)
} }
this.writingKeyMap[key] = zero.New() this.writingKeyMap[key] = zero.New()
defer func() { defer func() {
@@ -208,7 +209,7 @@ func (this *MemoryStorage) openWriter(key string, expiresAt int64, status int, h
_ = this.list.Remove(hashString) _ = this.list.Remove(hashString)
item = nil item = nil
} else { } else {
return nil, ErrFileIsWriting return nil, fmt.Errorf("%w (006)", ErrFileIsWriting)
} }
} }