fix bugs
This commit is contained in:
parent
2701cf802d
commit
055d113c80
@ -88,7 +88,6 @@ OUTER:
|
||||
for {
|
||||
select {
|
||||
case <-memoryObject.ctx.Done():
|
||||
logrus.Info("ctx done")
|
||||
break OUTER
|
||||
default:
|
||||
}
|
||||
@ -98,14 +97,11 @@ OUTER:
|
||||
time.Sleep(time.Millisecond)
|
||||
continue
|
||||
}
|
||||
logrus.WithFields(logrus.Fields{"start": offset, "end": newOffset}).Info("writing")
|
||||
bytes := memoryObject.Buffer.Bytes()[offset:newOffset]
|
||||
written, err := w.Write(bytes)
|
||||
if err != nil {
|
||||
logrus.WithError(err).Info("write failed")
|
||||
return err
|
||||
}
|
||||
logrus.WithFields(logrus.Fields{"n": written}).Info("written")
|
||||
|
||||
offset += written
|
||||
}
|
||||
@ -213,11 +209,10 @@ const (
|
||||
|
||||
func (server *Server) checkLocal(w http.ResponseWriter, _ *http.Request, key string) (exists localStatus, mtime time.Time, err error) {
|
||||
if stat, err := os.Stat(key); err == nil {
|
||||
logrus.Println(stat.ModTime(), stat.ModTime().Add(server.Cache.Timeout), time.Now())
|
||||
if mtime := stat.ModTime(); mtime.Add(server.Cache.Timeout).Before(time.Now()) {
|
||||
return localExistsButNeedHead, mtime.In(time.UTC), nil
|
||||
}
|
||||
return localExists, zeroTime, nil
|
||||
return localExists, mtime.In(time.UTC), nil
|
||||
} else if os.IsPermission(err) {
|
||||
http.Error(w, err.Error(), http.StatusForbidden)
|
||||
} else if !os.IsNotExist(err) {
|
||||
@ -255,7 +250,7 @@ func (server *Server) streamOnline(w http.ResponseWriter, r *http.Request, mtime
|
||||
}
|
||||
|
||||
if err := memoryObject.StreamTo(w, memoryObject.wg); err != nil {
|
||||
logrus.WithError(err).Warn("failed to stream response")
|
||||
logrus.WithError(err).Warn("failed to stream response with existing memory object")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -317,8 +312,10 @@ func (server *Server) streamOnline(w http.ResponseWriter, r *http.Request, mtime
|
||||
go memoryObject.StreamTo(w, memoryObject.wg)
|
||||
}
|
||||
|
||||
err = nil
|
||||
for chunk := range chunks {
|
||||
if chunk.error != nil {
|
||||
err = chunk.error
|
||||
logrus.WithError(err).Warn("failed to read from upstream")
|
||||
}
|
||||
if chunk.buffer == nil {
|
||||
@ -332,6 +329,11 @@ func (server *Server) streamOnline(w http.ResponseWriter, r *http.Request, mtime
|
||||
|
||||
memoryObject.wg.Wait()
|
||||
|
||||
if err != nil {
|
||||
logrus.WithError(err).WithField("upstreamIdx", selectedIdx).Error("something happened during download. will not cache this response")
|
||||
return
|
||||
}
|
||||
|
||||
go func() {
|
||||
logrus.Trace("preparing to release memory object")
|
||||
mtime := zeroTime
|
||||
@ -408,7 +410,9 @@ func (server *Server) fastesUpstream(r *http.Request, lastModified time.Time) (r
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
logger.WithError(err).Warn("upstream has error")
|
||||
if err != context.Canceled && err != context.DeadlineExceeded {
|
||||
logger.WithError(err).Warn("upstream has error")
|
||||
}
|
||||
return
|
||||
}
|
||||
if response == nil {
|
||||
@ -424,12 +428,12 @@ func (server *Server) fastesUpstream(r *http.Request, lastModified time.Time) (r
|
||||
resultResponse, resultCh, resultErr = response, ch, err
|
||||
selectedCh <- idx
|
||||
|
||||
for idx, cancel := range cancelFuncs {
|
||||
if resultIdx == idx {
|
||||
logrus.WithField("upstreamIdx", idx).Trace("selected thus not canceled")
|
||||
for cancelIdx, cancel := range cancelFuncs {
|
||||
if cancelIdx == idx {
|
||||
logrus.WithField("upstreamIdx", cancelIdx).Trace("selected thus not canceled")
|
||||
continue
|
||||
}
|
||||
logrus.WithField("upstreamIdx", idx).Trace("not selected and thus canceled")
|
||||
logrus.WithField("upstreamIdx", cancelIdx).Trace("not selected and thus canceled")
|
||||
cancel()
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user