in origin/blobserver/server.go [608:644]
func (s *Server) commitClusterUploadHandler(w http.ResponseWriter, r *http.Request) error {
d, err := httputil.ParseDigest(r, "digest")
if err != nil {
return err
}
namespace, err := httputil.ParseParam(r, "namespace")
if err != nil {
return err
}
uid, err := httputil.ParseParam(r, "uid")
if err != nil {
return err
}
if err := s.uploader.commit(d, uid); err != nil {
return s.handleUploadConflict(err, namespace, d)
}
if err := s.writeBack(namespace, d, 0); err != nil {
return err
}
err = s.applyToReplicas(d, func(i int, client blobclient.Client) error {
delay := s.config.DuplicateWriteBackStagger * time.Duration(i+1)
f, err := s.cas.GetCacheFileReader(d.Hex())
if err != nil {
return fmt.Errorf("get cache file: %s", err)
}
if err := client.DuplicateUploadBlob(namespace, d, f, delay); err != nil {
return fmt.Errorf("duplicate upload: %s", err)
}
return nil
})
if err != nil {
s.stats.Counter("duplicate_write_back_errors").Inc(1)
log.Errorf("Error duplicating write-back task to replicas: %s", err)
}
return nil
}