resource: Move opening of the transformed resources after cache check
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 12 Jul 2018 16:59:39 +0000 (18:59 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 12 Jul 2018 17:36:12 +0000 (19:36 +0200)
The old version should be functionally the same, but opening up these readers (potentially files) every time is wasteful if we don't read from them.

resource/transform.go

index 005ede7679a63713108b5d6f438a7f9a4bbce0cd..93ace2ba05298c16ef198797cbf051dd35e9aa1d 100644 (file)
@@ -303,12 +303,6 @@ func (r *transformedResource) transform(setContent bool) (err error) {
 
        first := chain[0]
 
-       contentrc, err := contentReadSeekerCloser(first)
-       if err != nil {
-               return err
-       }
-       defer contentrc.Close()
-
        // Files with a suffix will be stored in cache (both on disk and in memory)
        // partitioned by their suffix. There will be other files below /other.
        // This partition is also how we determine what to delete on server reloads.
@@ -347,6 +341,7 @@ func (r *transformedResource) transform(setContent bool) (err error) {
                r.cache.nlocker.Unlock(key)
                return
        }
+
        defer r.cache.nlocker.Unlock(key)
        defer r.cache.set(key, r)
 
@@ -362,6 +357,13 @@ func (r *transformedResource) transform(setContent bool) (err error) {
 
        tctx.InMediaType = first.MediaType()
        tctx.OutMediaType = first.MediaType()
+
+       contentrc, err := contentReadSeekerCloser(first)
+       if err != nil {
+               return err
+       }
+       defer contentrc.Close()
+
        tctx.From = contentrc
        tctx.To = b1