]> Cypherpunks.ru repositories - gocheese.git/commitdiff
Ability to turn off filesystem sync
authorSergey Matveev <stargrave@stargrave.org>
Fri, 24 Sep 2021 19:38:23 +0000 (22:38 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sat, 25 Sep 2021 15:06:18 +0000 (18:06 +0300)
contrib/pyshop2packages.sh
doc/usage.texi
fileutils.go
refresh.go
upload.go

index e247ce8927d10cb9cc742c4161f996b7ce7c21b9..efdfbb3896f1ba0cb0bcf461472c889a89afaab5 100755 (executable)
@@ -52,7 +52,8 @@ done
 ########################################################################
 cd packages
 for pkg in * ; do
-    # Assume gocheese -gpgupdate /gpgupdate/
+    # Assume running:
+    # GOCHEESE_NO_SYNC=1 gocheese -bind "[::1]:8080" -gpgupdate /gpgupdate/
     curl http://localhost:8080/gpgupdate/$pkg/ > /dev/null
 done
 
index e60fdd0edba74d45317f2bf3049a6e0b9c409138..a116bc96d519cee9812e88ff6ba3aa6467de71e0 100644 (file)
@@ -44,3 +44,7 @@ flagged as internal package.
 
 It is advisable to run GoCheese under some kind of
 @url{http://cr.yp.to/daemontools.html, daemontools}.
+
+@env{$GOCHEESE_NO_SYNC=1} environment variable turns off filesystem
+synchronization calls, that could be useful when massively updating the
+database.
index ba18ee98769217a7758caba5f7061a024b200aa8..03b852e011a2e9cbfcbd2af84e9fe3fd78f62f0f 100644 (file)
@@ -24,6 +24,8 @@ import (
        "time"
 )
 
+var NoSync = os.Getenv("GOCHEESE_NO_SYNC") == "1"
+
 func TempFile(dir string) (*os.File, error) {
        // Assume that probability of suffix collision is negligible
        suffix := strconv.FormatInt(time.Now().UnixNano()+int64(os.Getpid()), 16)
@@ -32,6 +34,9 @@ func TempFile(dir string) (*os.File, error) {
 }
 
 func DirSync(dirPath string) error {
+       if NoSync {
+               return nil
+       }
        fd, err := os.Open(dirPath)
        if err != nil {
                return err
@@ -54,10 +59,12 @@ func WriteFileSync(dirPath, filePath string, data []byte) error {
                dst.Close()
                return err
        }
-       if err = dst.Sync(); err != nil {
-               os.Remove(dst.Name())
-               dst.Close()
-               return err
+       if !NoSync {
+               if err = dst.Sync(); err != nil {
+                       os.Remove(dst.Name())
+                       dst.Close()
+                       return err
+               }
        }
        dst.Close()
        if err = os.Rename(dst.Name(), filePath); err != nil {
index 11325e275c3d6c9f2002f97cd2dce6079e25c211..d41f122ead64a4cca959421322bfd6cce1efc4b2 100644 (file)
@@ -207,12 +207,14 @@ func refreshDir(
                                http.Error(w, "digest mismatch", http.StatusBadGateway)
                                return false
                        }
-                       if err = dst.Sync(); err != nil {
-                               os.Remove(dst.Name())
-                               dst.Close()
-                               log.Println("error", r.RemoteAddr, "pypi", filename, err)
-                               http.Error(w, err.Error(), http.StatusInternalServerError)
-                               return false
+                       if !NoSync {
+                               if err = dst.Sync(); err != nil {
+                                       os.Remove(dst.Name())
+                                       dst.Close()
+                                       log.Println("error", r.RemoteAddr, "pypi", filename, err)
+                                       http.Error(w, err.Error(), http.StatusInternalServerError)
+                                       return false
+                               }
                        }
                        if err = dst.Close(); err != nil {
                                log.Println("error", r.RemoteAddr, "pypi", filename, err)
index e9581081da4026261a8429daaa50b184db36399e..cd98df5ba5954db50c2889393c882c3b77be4994 100644 (file)
--- a/upload.go
+++ b/upload.go
@@ -121,12 +121,14 @@ func serveUpload(w http.ResponseWriter, r *http.Request) {
                        http.Error(w, err.Error(), http.StatusInternalServerError)
                        return
                }
-               if err = dst.Sync(); err != nil {
-                       log.Println("error", r.RemoteAddr, filename, err)
-                       os.Remove(dst.Name())
-                       dst.Close()
-                       http.Error(w, err.Error(), http.StatusInternalServerError)
-                       return
+               if !NoSync {
+                       if err = dst.Sync(); err != nil {
+                               log.Println("error", r.RemoteAddr, filename, err)
+                               os.Remove(dst.Name())
+                               dst.Close()
+                               http.Error(w, err.Error(), http.StatusInternalServerError)
+                               return
+                       }
                }
                dst.Close()
                digest := hasher.Sum(nil)