in lib/persistedretry/writeback/executor.go [74:114]
func (e *Executor) upload(t *Task) error {
start := time.Now()
client, err := e.backends.GetClient(t.Namespace)
if err != nil {
if err == backend.ErrNamespaceNotFound {
log.With(
"namespace", t.Namespace,
"name", t.Name).Info("Dropping writeback for unconfigured namespace")
return nil
}
return fmt.Errorf("get client: %s", err)
}
if _, err := client.Stat(t.Namespace, t.Name); err == nil {
// File already uploaded, no-op.
return nil
}
f, err := e.fs.GetCacheFileReader(t.Name)
if err != nil {
if os.IsNotExist(err) {
// Nothing we can do about this but make noise and drop the task.
e.stats.Counter("missing_files").Inc(1)
log.With("name", t.Name).Error("Invariant violation: writeback cache file missing")
return nil
}
return fmt.Errorf("get file: %s", err)
}
defer f.Close()
if err := client.Upload(t.Namespace, t.Name, f); err != nil {
return fmt.Errorf("upload: %s", err)
}
// We don't want to time noops nor errors.
e.stats.Timer("upload").Record(time.Since(start))
e.stats.Timer("lifetime").Record(time.Since(t.CreatedAt))
return nil
}