]> source.dussan.org Git - gitea.git/commitdiff
Bump unrolled/render to v1.1.0 (#15581)
authorNathan Smith <12156185+nsmith5@users.noreply.github.com>
Thu, 22 Apr 2021 09:54:27 +0000 (02:54 -0700)
committerGitHub <noreply@github.com>
Thu, 22 Apr 2021 09:54:27 +0000 (10:54 +0100)
v1.1.0 has improved buffer pooling

go.mod
go.sum
vendor/github.com/unrolled/render/.travis.yml [deleted file]
vendor/github.com/unrolled/render/README.md
vendor/github.com/unrolled/render/buffer.go
vendor/github.com/unrolled/render/engine.go
vendor/github.com/unrolled/render/genericbufferpool.go [new file with mode: 0644]
vendor/github.com/unrolled/render/render.go
vendor/github.com/unrolled/render/sizedbufferpool.go [new file with mode: 0644]
vendor/modules.txt

diff --git a/go.mod b/go.mod
index d9c4fbd2744663dd79d1e78d2e4056ae85225c8d..f834d36e7afcdf1a5aaf207841966dd20b66927d 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -122,7 +122,7 @@ require (
        github.com/unknwon/com v1.0.1
        github.com/unknwon/i18n v0.0.0-20210321134014-0ebbf2df1c44
        github.com/unknwon/paginater v0.0.0-20200328080006-042474bd0eae
-       github.com/unrolled/render v1.0.3
+       github.com/unrolled/render v1.1.0
        github.com/urfave/cli v1.22.5
        github.com/willf/bitset v1.1.11 // indirect
        github.com/xanzy/go-gitlab v0.44.0
diff --git a/go.sum b/go.sum
index 794752c9786b9a5012627d8170c7060c41abd260..9cae17759fde927b8b113c081b6e360d7c27c413 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -1115,6 +1115,8 @@ github.com/unknwon/paginater v0.0.0-20200328080006-042474bd0eae h1:ihaXiJkaca54I
 github.com/unknwon/paginater v0.0.0-20200328080006-042474bd0eae/go.mod h1:1fdkY6xxl6ExVs2QFv7R0F5IRZHKA8RahhB9fMC9RvM=
 github.com/unrolled/render v1.0.3 h1:baO+NG1bZSF2WR4zwh+0bMWauWky7DVrTOfvE2w+aFo=
 github.com/unrolled/render v1.0.3/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0obPf6NBdM=
+github.com/unrolled/render v1.1.0 h1:gvpR9hHxTt6DcGqRYuVVFcfd8rtK+nyEPUJN06KB57Q=
+github.com/unrolled/render v1.1.0/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0obPf6NBdM=
 github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=
diff --git a/vendor/github.com/unrolled/render/.travis.yml b/vendor/github.com/unrolled/render/.travis.yml
deleted file mode 100644 (file)
index 9ec8d54..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-language: go
-
-go:
-  - 1.11.x
-  - 1.12.x
-  - tip
-
-env:
-  - GO111MODULE=on
-
-install:
-  - go mod download 
-
-script:
-  - go test -v -race -tags=integration
index 5ffa2a7c1cdda23d0a7eac34bdc4cec68592c9f4..abc210ea4b69f283c4f16b7435b070ac9fa4f9c9 100644 (file)
@@ -1,4 +1,5 @@
-# Render [![GoDoc](http://godoc.org/github.com/unrolled/render?status.svg)](http://godoc.org/github.com/unrolled/render) [![Build Status](https://travis-ci.org/unrolled/render.svg)](https://travis-ci.org/unrolled/render)
+# Render [![GoDoc](http://godoc.org/github.com/unrolled/render?status.svg)](http://godoc.org/github.com/unrolled/render) [![Test](https://github.com/unrolled/render/workflows/Test/badge.svg?branch=v1)](https://github.com/unrolled/render/actions)
+
 
 Render is a package that provides functionality for easily rendering JSON, XML, text, binary data, and HTML templates. This package is based on the [Martini](https://github.com/go-martini/martini) [render](https://github.com/martini-contrib/render) work.
 
index cdc92ffbde281b5e4997c7cb194e7dcced09277f..804d775b7d59ce364a8830152538eca091f8bdb3 100644 (file)
@@ -2,9 +2,6 @@ package render
 
 import "bytes"
 
-// bufPool represents a reusable buffer pool for executing templates into.
-var bufPool *BufferPool
-
 // BufferPool implements a pool of bytes.Buffers in the form of a bounded channel.
 // Pulled from the github.com/oxtoacart/bpool package (Apache licensed).
 type BufferPool struct {
@@ -39,8 +36,3 @@ func (bp *BufferPool) Put(b *bytes.Buffer) {
        default: // Discard the buffer if the pool is full.
        }
 }
-
-// Initialize buffer pool for writing templates into.
-func init() {
-       bufPool = NewBufferPool(64)
-}
index cdf1a1b16f477dae4d92933903d289c189a55c43..283a3772cdd9980edf26f5c07bc9dd6bc3adc22c 100644 (file)
@@ -30,6 +30,8 @@ type HTML struct {
        Head
        Name      string
        Templates *template.Template
+
+       bp GenericBufferPool
 }
 
 // JSON built-in renderer.
@@ -82,9 +84,14 @@ func (d Data) Render(w io.Writer, v interface{}) error {
 
 // Render a HTML response.
 func (h HTML) Render(w io.Writer, binding interface{}) error {
-       // Retrieve a buffer from the pool to write to.
-       out := bufPool.Get()
-       err := h.Templates.ExecuteTemplate(out, h.Name, binding)
+       var buf *bytes.Buffer
+       if h.bp != nil {
+               // If we have a bufferpool, allocate from it
+               buf = h.bp.Get()
+               defer h.bp.Put(buf)
+       }
+
+       err := h.Templates.ExecuteTemplate(buf, h.Name, binding)
        if err != nil {
                return err
        }
@@ -92,10 +99,8 @@ func (h HTML) Render(w io.Writer, binding interface{}) error {
        if hw, ok := w.(http.ResponseWriter); ok {
                h.Head.Write(hw)
        }
-       out.WriteTo(w)
+       buf.WriteTo(w)
 
-       // Return the buffer to the pool.
-       bufPool.Put(out)
        return nil
 }
 
diff --git a/vendor/github.com/unrolled/render/genericbufferpool.go b/vendor/github.com/unrolled/render/genericbufferpool.go
new file mode 100644 (file)
index 0000000..7e8d342
--- /dev/null
@@ -0,0 +1,9 @@
+package render
+
+import "bytes"
+
+// GenericBufferPool abstracts buffer pool implementations
+type GenericBufferPool interface {
+       Get() *bytes.Buffer
+       Put(*bytes.Buffer)
+}
index 3259f620ebc08c000f22924488f8bf9c79270030..4cd11cdfcc319f571c323ce10a4d5d47664b0d9f 100644 (file)
@@ -103,6 +103,10 @@ type Options struct {
        // Enables using partials without the current filename suffix which allows use of the same template in multiple files. e.g {{ partial "carosuel" }} inside the home template will match carosel-home or carosel.
        // ***NOTE*** - This option should be named RenderPartialsWithoutSuffix as that is what it does. "Prefix" is a typo. Maintaining the existing name for backwards compatibility.
        RenderPartialsWithoutPrefix bool
+
+       // BufferPool to use when rendering HTML templates. If none is supplied
+       // defaults to SizedBufferPool of size 32 with 512KiB buffers.
+       BufferPool GenericBufferPool
 }
 
 // HTMLOptions is a struct for overriding some rendering Options for specific HTML call.
@@ -176,6 +180,10 @@ func (r *Render) prepareOptions() {
        if len(r.opt.XMLContentType) == 0 {
                r.opt.XMLContentType = ContentXML
        }
+       if r.opt.BufferPool == nil {
+               // 32 buffers of size 512KiB each
+               r.opt.BufferPool = NewSizedBufferPool(32, 1<<19)
+       }
 }
 
 func (r *Render) compileTemplates() {
@@ -410,6 +418,7 @@ func (r *Render) HTML(w io.Writer, status int, name string, binding interface{},
                Head:      head,
                Name:      name,
                Templates: r.templates,
+               bp:        r.opt.BufferPool,
        }
 
        return r.Render(w, h, binding)
diff --git a/vendor/github.com/unrolled/render/sizedbufferpool.go b/vendor/github.com/unrolled/render/sizedbufferpool.go
new file mode 100644 (file)
index 0000000..901c983
--- /dev/null
@@ -0,0 +1,62 @@
+package render
+
+import (
+       "bytes"
+)
+
+// Pulled from the github.com/oxtoacart/bpool package (Apache licensed).
+
+// SizedBufferPool implements a pool of bytes.Buffers in the form of a bounded
+// channel. Buffers are pre-allocated to the requested size.
+type SizedBufferPool struct {
+       c chan *bytes.Buffer
+       a int
+}
+
+// NewSizedBufferPool creates a new BufferPool bounded to the given size.
+// size defines the number of buffers to be retained in the pool and alloc sets
+// the initial capacity of new buffers to minimize calls to make().
+//
+// The value of alloc should seek to provide a buffer that is representative of
+// most data written to the the buffer (i.e. 95th percentile) without being
+// overly large (which will increase static memory consumption). You may wish to
+// track the capacity of your last N buffers (i.e. using an []int) prior to
+// returning them to the pool as input into calculating a suitable alloc value.
+func NewSizedBufferPool(size int, alloc int) (bp *SizedBufferPool) {
+       return &SizedBufferPool{
+               c: make(chan *bytes.Buffer, size),
+               a: alloc,
+       }
+}
+
+// Get gets a Buffer from the SizedBufferPool, or creates a new one if none are
+// available in the pool. Buffers have a pre-allocated capacity.
+func (bp *SizedBufferPool) Get() (b *bytes.Buffer) {
+       select {
+       case b = <-bp.c:
+               // reuse existing buffer
+       default:
+               // create new buffer
+               b = bytes.NewBuffer(make([]byte, 0, bp.a))
+       }
+       return
+}
+
+// Put returns the given Buffer to the SizedBufferPool.
+func (bp *SizedBufferPool) Put(b *bytes.Buffer) {
+       b.Reset()
+
+       // Release buffers over our maximum capacity and re-create a pre-sized
+       // buffer to replace it.
+       // Note that the cap(b.Bytes()) provides the capacity from the read off-set
+       // only, but as we've called b.Reset() the full capacity of the underlying
+       // byte slice is returned.
+       if cap(b.Bytes()) > bp.a {
+               b = bytes.NewBuffer(make([]byte, 0, bp.a))
+       }
+
+       select {
+       case bp.c <- b:
+       default: // Discard the buffer if the pool is full.
+       }
+}
index 8ca9aed32d0172babc479a867a6e28f2f5c94dd8..38c2bd8517a823a499111ced095b0b823df12405 100644 (file)
@@ -777,7 +777,7 @@ github.com/unknwon/i18n
 # github.com/unknwon/paginater v0.0.0-20200328080006-042474bd0eae
 ## explicit
 github.com/unknwon/paginater
-# github.com/unrolled/render v1.0.3
+# github.com/unrolled/render v1.1.0
 ## explicit
 github.com/unrolled/render
 # github.com/urfave/cli v1.22.5