写缓存失败时,允许继续读取源站内容

This commit is contained in:
GoEdgeLab
2023-12-27 20:55:12 +08:00
parent 0f76de73ee
commit e7fb706d8a
3 changed files with 16 additions and 7 deletions

View File

@@ -125,7 +125,6 @@ func (this *MemoryWriter) Close() error {
// 需要在Locker之外
defer this.once.Do(func() {
this.endFunc(this.item)
this.item = nil // free memory
})
if this.item == nil {
@@ -164,7 +163,6 @@ func (this *MemoryWriter) Discard() error {
// 需要在Locker之外
defer this.once.Do(func() {
this.endFunc(this.item)
this.item = nil // free memory
})
this.storage.locker.Lock()

View File

@@ -494,7 +494,7 @@ func (this *HTTPWriter) PrepareCache(resp *http.Response, size int64) {
return
}
var cacheReader = readers.NewTeeReaderCloser(resp.Body, this.cacheWriter)
var cacheReader = readers.NewTeeReaderCloser(resp.Body, this.cacheWriter, false)
resp.Body = cacheReader
this.rawReader = cacheReader

View File

@@ -12,12 +12,17 @@ type TeeReaderCloser struct {
onFail func(err error)
onEOF func()
mustWrite bool
}
func NewTeeReaderCloser(reader io.Reader, writer io.Writer) *TeeReaderCloser {
// NewTeeReaderCloser
// mustWrite - ensure writing MUST be successfully
func NewTeeReaderCloser(reader io.Reader, writer io.Writer, mustWrite bool) *TeeReaderCloser {
return &TeeReaderCloser{
r: reader,
w: writer,
mustWrite: mustWrite,
}
}
@@ -26,7 +31,13 @@ func (this *TeeReaderCloser) Read(p []byte) (n int, err error) {
if n > 0 {
_, wErr := this.w.Write(p[:n])
if (err == nil || err == io.EOF) && wErr != nil {
if this.mustWrite {
err = wErr
} else {
if this.onFail != nil {
this.onFail(wErr)
}
}
}
}
if err != nil {