diff --git a/cmd/proxy/main.go b/cmd/proxy/main.go index 5d1fe37..6314dcc 100644 --- a/cmd/proxy/main.go +++ b/cmd/proxy/main.go @@ -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() }