concourse/#3819 using zstd to streamIn/Out between workers

Signed-off-by: Divya Dadlani <ddadlani@pivotal.io>
Co-authored-by: Krishna Mannem <kmannem@pivotal.io>
This commit is contained in:
Divya Dadlani 2019-05-17 15:00:41 -04:00
parent e253588d23
commit 5aebd0f402
15 changed files with 47 additions and 74 deletions

View File

@ -2,13 +2,13 @@ package exec
import (
"archive/tar"
"compress/gzip"
"context"
"fmt"
"io"
"code.cloudfoundry.org/lager"
"code.cloudfoundry.org/lager/lagerctx"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/creds"
"github.com/concourse/concourse/atc/db"
@ -294,12 +294,8 @@ func streamFileHelper(s interface {
return nil, err
}
gzReader, err := gzip.NewReader(out)
if err != nil {
return nil, FileNotFoundError{Path: path}
}
tarReader := tar.NewReader(gzReader)
zstdReader := zstd.NewReader(out)
tarReader := tar.NewReader(zstdReader)
_, err = tarReader.Next()
if err != nil {

View File

@ -2,7 +2,6 @@ package exec_test
import (
"archive/tar"
"compress/gzip"
"context"
"crypto/sha256"
"errors"
@ -11,6 +10,7 @@ import (
"io/ioutil"
"code.cloudfoundry.org/lager/lagertest"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/creds/credsfakes"
"github.com/concourse/concourse/atc/db"
@ -359,10 +359,10 @@ var _ = Describe("GetStep", func() {
Context("when the file exists", func() {
BeforeEach(func() {
gzWriter := gzip.NewWriter(tgzBuffer)
defer gzWriter.Close()
zstdWriter := zstd.NewWriter(tgzBuffer)
defer zstdWriter.Close()
tarWriter := tar.NewWriter(gzWriter)
tarWriter := tar.NewWriter(zstdWriter)
defer tarWriter.Close()
err := tarWriter.WriteHeader(&tar.Header{

View File

@ -2,7 +2,6 @@ package exec_test
import (
"archive/tar"
"compress/gzip"
"context"
"errors"
"io"
@ -13,6 +12,7 @@ import (
"code.cloudfoundry.org/garden/gardenfakes"
"code.cloudfoundry.org/lager"
"code.cloudfoundry.org/lager/lagertest"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/creds/credsfakes"
"github.com/concourse/concourse/atc/db"
@ -921,10 +921,10 @@ var _ = Describe("TaskStep", func() {
Context("when the file exists", func() {
BeforeEach(func() {
gzWriter := gzip.NewWriter(tgzBuffer)
defer gzWriter.Close()
zstdWriter := zstd.NewWriter(tgzBuffer)
defer zstdWriter.Close()
tarWriter := tar.NewWriter(gzWriter)
tarWriter := tar.NewWriter(zstdWriter)
defer tarWriter.Close()
err := tarWriter.WriteHeader(&tar.Header{

View File

@ -2,13 +2,13 @@ package image
import (
"archive/tar"
"compress/gzip"
"context"
"errors"
"fmt"
"io"
"code.cloudfoundry.org/lager"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/db"
"github.com/concourse/concourse/atc/resource"
@ -194,12 +194,8 @@ func (i *imageResourceFetcher) Fetch(
return nil, nil, nil, err
}
gzReader, err := gzip.NewReader(reader)
if err != nil {
return nil, nil, nil, err
}
tarReader := tar.NewReader(gzReader)
zstdReader := zstd.NewReader(reader)
tarReader := tar.NewReader(zstdReader)
_, err = tarReader.Next()
if err != nil {

View File

@ -2,7 +2,6 @@ package image_test
import (
"archive/tar"
"compress/gzip"
"context"
"crypto/sha256"
"errors"
@ -12,6 +11,7 @@ import (
"code.cloudfoundry.org/lager"
"code.cloudfoundry.org/lager/lagertest"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/db"
"github.com/concourse/concourse/atc/db/dbfakes"
@ -644,8 +644,8 @@ var _ = Describe("Image", func() {
func tgzStreamWith(metadata string) io.ReadCloser {
buffer := gbytes.NewBuffer()
gzWriter := gzip.NewWriter(buffer)
tarWriter := tar.NewWriter(gzWriter)
zstdWriter := zstd.NewWriter(buffer)
tarWriter := tar.NewWriter(zstdWriter)
err := tarWriter.WriteHeader(&tar.Header{
Name: "metadata.json",
@ -660,7 +660,7 @@ func tgzStreamWith(metadata string) io.ReadCloser {
err = tarWriter.Close()
Expect(err).NotTo(HaveOccurred())
err = gzWriter.Close()
err = zstdWriter.Close()
Expect(err).NotTo(HaveOccurred())
return buffer

View File

@ -84,11 +84,11 @@ func (v *volume) SetPrivileged(privileged bool) error {
}
func (v *volume) StreamIn(path string, tarStream io.Reader) error {
return v.bcVolume.StreamIn(path, tarStream)
return v.bcVolume.StreamIn(path, baggageclaim.ZstdEncoding, tarStream)
}
func (v *volume) StreamOut(path string) (io.ReadCloser, error) {
return v.bcVolume.StreamOut(path)
return v.bcVolume.StreamOut(path, baggageclaim.ZstdEncoding)
}
func (v *volume) Properties() (baggageclaim.VolumeProperties, error) {

View File

@ -1,8 +1,9 @@
package executehelpers
import (
"github.com/DataDog/zstd"
"github.com/concourse/concourse/go-concourse/concourse"
"github.com/concourse/go-archive/tgzfs"
"github.com/concourse/go-archive/tarfs"
"github.com/vbauerster/mpb/v4"
)
@ -14,5 +15,5 @@ func Download(bar *mpb.Bar, team concourse.Team, artifactID int, path string) er
defer out.Close()
return tgzfs.Extract(bar.ProxyReader(out), path)
return tarfs.Extract(zstd.NewReader(bar.ProxyReader(out)), path)
}

View File

@ -6,9 +6,10 @@ import (
"io"
"os/exec"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/go-concourse/concourse"
"github.com/concourse/go-archive/tgzfs"
"github.com/concourse/go-archive/tarfs"
"github.com/vbauerster/mpb/v4"
)
@ -18,7 +19,7 @@ func Upload(bar *mpb.Bar, team concourse.Team, path string, includeIgnored bool)
archiveStream, archiveWriter := io.Pipe()
go func() {
archiveWriter.CloseWithError(tgzfs.Compress(archiveWriter, path, files...))
archiveWriter.CloseWithError(tarfs.Compress(zstd.NewWriter(archiveWriter), path, files...))
}()
return team.CreateArtifact(bar.ProxyReader(archiveStream))

View File

@ -2,7 +2,6 @@ package integration_test
import (
"archive/tar"
"compress/gzip"
"encoding/json"
"fmt"
"io/ioutil"
@ -12,6 +11,7 @@ import (
"strings"
"time"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/event"
. "github.com/onsi/ginkgo"
@ -131,10 +131,7 @@ run:
atcServer.RouteToHandler("POST", "/api/v1/teams/main/artifacts",
ghttp.CombineHandlers(
func(w http.ResponseWriter, req *http.Request) {
gr, err := gzip.NewReader(req.Body)
Expect(err).NotTo(HaveOccurred())
tr := tar.NewReader(gr)
tr := tar.NewReader(zstd.NewReader(req.Body))
hdr, err := tr.Next()
Expect(err).NotTo(HaveOccurred())

View File

@ -2,7 +2,6 @@ package integration_test
import (
"archive/tar"
"compress/gzip"
"encoding/json"
"fmt"
"io/ioutil"
@ -11,6 +10,7 @@ import (
"path/filepath"
"time"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/event"
. "github.com/onsi/ginkgo"
@ -164,10 +164,7 @@ run:
func(w http.ResponseWriter, req *http.Request) {
close(uploading)
gr, err := gzip.NewReader(req.Body)
Expect(err).NotTo(HaveOccurred())
tr := tar.NewReader(gr)
tr := tar.NewReader(zstd.NewReader(req.Body))
hdr, err := tr.Next()
Expect(err).NotTo(HaveOccurred())

View File

@ -2,7 +2,6 @@ package integration_test
import (
"archive/tar"
"compress/gzip"
"encoding/json"
"fmt"
"io/ioutil"
@ -17,6 +16,7 @@ import (
"syscall"
"time"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/event"
. "github.com/onsi/ginkgo"
@ -132,10 +132,7 @@ run:
func(w http.ResponseWriter, req *http.Request) {
close(uploading)
gr, err := gzip.NewReader(req.Body)
Expect(err).NotTo(HaveOccurred())
tr := tar.NewReader(gr)
tr := tar.NewReader(zstd.NewReader(req.Body))
hdr, err := tr.Next()
Expect(err).NotTo(HaveOccurred())
@ -375,10 +372,7 @@ run: {}
func(w http.ResponseWriter, req *http.Request) {
close(uploading)
gr, err := gzip.NewReader(req.Body)
Expect(err).NotTo(HaveOccurred())
tr := tar.NewReader(gr)
tr := tar.NewReader(zstd.NewReader(req.Body))
var matchFound = false
for {
@ -425,10 +419,7 @@ run: {}
func(w http.ResponseWriter, req *http.Request) {
close(uploading)
gr, err := gzip.NewReader(req.Body)
Expect(err).NotTo(HaveOccurred())
tr := tar.NewReader(gr)
tr := tar.NewReader(zstd.NewReader(req.Body))
var matchFound = false
for {

View File

@ -2,7 +2,6 @@ package integration_test
import (
"archive/tar"
"compress/gzip"
"encoding/json"
"fmt"
"io/ioutil"
@ -12,6 +11,7 @@ import (
"path/filepath"
"time"
"github.com/DataDog/zstd"
"github.com/concourse/concourse/atc"
"github.com/concourse/concourse/atc/event"
. "github.com/onsi/ginkgo"
@ -145,10 +145,7 @@ run:
atcServer.RouteToHandler("POST", "/api/v1/teams/main/artifacts",
ghttp.CombineHandlers(
func(w http.ResponseWriter, req *http.Request) {
gr, err := gzip.NewReader(req.Body)
Expect(err).NotTo(HaveOccurred())
tr := tar.NewReader(gr)
tr := tar.NewReader(zstd.NewReader(req.Body))
hdr, err := tr.Next()
Expect(err).NotTo(HaveOccurred())
@ -275,8 +272,8 @@ run:
})
func tarHandler(w http.ResponseWriter, req *http.Request) {
gw := gzip.NewWriter(w)
tw := tar.NewWriter(gw)
zw := zstd.NewWriter(w)
tw := tar.NewWriter(zw)
tarContents := []byte("tar-contents")
@ -293,7 +290,7 @@ func tarHandler(w http.ResponseWriter, req *http.Request) {
err = tw.Close()
Expect(err).NotTo(HaveOccurred())
err = gw.Close()
err = zw.Close()
Expect(err).NotTo(HaveOccurred())
}

3
go.mod
View File

@ -13,6 +13,7 @@ require (
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect
github.com/Azure/go-autorest v11.2.8+incompatible // indirect
github.com/DataDog/datadog-go v0.0.0-20180702141236-ef3a9daf849d
github.com/DataDog/zstd v1.4.0
github.com/Jeffail/gabs v1.1.0 // indirect
github.com/Masterminds/squirrel v0.0.0-20190107164353-fa735ea14f09
github.com/Microsoft/go-winio v0.4.11 // indirect
@ -45,7 +46,7 @@ require (
github.com/cloudfoundry/bosh-utils v0.0.0-20181224171034-c2cf699102bd // indirect
github.com/cloudfoundry/go-socks5 v0.0.0-20180221174514-54f73bdb8a8e // indirect
github.com/cloudfoundry/socks5-proxy v0.0.0-20180530211953-3659db090cb2 // indirect
github.com/concourse/baggageclaim v1.4.0
github.com/concourse/baggageclaim v1.6.0
github.com/concourse/dex v0.0.0-20190417202333-2202f4ef4172
github.com/concourse/flag v1.0.0
github.com/concourse/go-archive v1.0.1

14
go.sum
View File

@ -26,6 +26,8 @@ github.com/Azure/go-autorest v11.2.8+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSW
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/DataDog/datadog-go v0.0.0-20180702141236-ef3a9daf849d h1:qGaiqpKg/VnndIRJu9Z0jdVVXebhTxzd6sDP//mh3/E=
github.com/DataDog/datadog-go v0.0.0-20180702141236-ef3a9daf849d/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/DataDog/zstd v1.4.0 h1:vhoV+DUHnRZdKW1i5UMjAk2G4JY8wN4ayRfYDNdEhwo=
github.com/DataDog/zstd v1.4.0/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/Jeffail/gabs v1.1.0 h1:kw5zCcl9tlJNHTDme7qbi21fDHZmXrnjMoXos3Jw/NI=
github.com/Jeffail/gabs v1.1.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc=
github.com/Masterminds/squirrel v0.0.0-20190107164353-fa735ea14f09 h1:enWVS77aJkLWVIUExiqF6A8eWTVzCXUKUvkST3/wyKI=
@ -75,7 +77,6 @@ github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4Yn
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo=
github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c=
github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDdrc=
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
@ -107,17 +108,15 @@ github.com/cloudfoundry/go-socks5 v0.0.0-20180221174514-54f73bdb8a8e h1:FQdRViao
github.com/cloudfoundry/go-socks5 v0.0.0-20180221174514-54f73bdb8a8e/go.mod h1:PXmcacyJB/pJjSxEl15IU6rEIKXrhZQRzsr0UTkgNNs=
github.com/cloudfoundry/socks5-proxy v0.0.0-20180530211953-3659db090cb2 h1:9j2KbUEQn5E7MEV3enSrkJTrBC0iDbosW5gXX+Z+dLE=
github.com/cloudfoundry/socks5-proxy v0.0.0-20180530211953-3659db090cb2/go.mod h1:0a+Ghg38uB86Dx+de84dFSkILTnBHzCpFMRnjHgSzi4=
github.com/cockroachdb/cmux v0.0.0-20170110192607-30d10be49292 h1:dzj1/xcivGjNPwwifh/dWTczkwcuqsXXFHY1X/TZMtw=
github.com/cockroachdb/cmux v0.0.0-20170110192607-30d10be49292/go.mod h1:qRiX68mZX1lGBkTWyp3CLcenw9I94W2dLeRvMzcn9N4=
github.com/concourse/baggageclaim v1.4.0 h1:pNohKpBWgr9RWvDoEpsi+IhPJ67ZaKt0/o/WLt2hFa4=
github.com/concourse/baggageclaim v1.4.0/go.mod h1:JXDes0u8KKR4DDDATN1uLTMxNrQlTJcU0FeAtHqSkSg=
github.com/concourse/baggageclaim v1.6.0 h1:2uhYtAybBMtBXzW0+RiIDca5DljKUxegSt7vos9U6Vs=
github.com/concourse/baggageclaim v1.6.0/go.mod h1:gKOIecb6eIQ1k2Wh0iyKvP1vqI8XN08qwtijwr3Iroc=
github.com/concourse/dex v0.0.0-20190417202333-2202f4ef4172 h1:lYBXqY+XJmyMD3uthg734qIxdHU+lAF8mnVk72gdFCA=
github.com/concourse/dex v0.0.0-20190417202333-2202f4ef4172/go.mod h1:jq+kdbXyj+bEdch50oYfPCNK4ZCRKAd/R0wlZuAG+Gc=
github.com/concourse/flag v0.0.0-20180907155614-cb47f24fff1c/go.mod h1:ngs845OZCESOe8vgeK5fsCNIiS0vUSqB8MGQMS9+4og=
github.com/concourse/flag v1.0.0 h1:XG+A/Y+8kNdNDUC9T+SQ55dZ1+xYQN6LNVBg3cGJ080=
github.com/concourse/flag v1.0.0/go.mod h1:ngs845OZCESOe8vgeK5fsCNIiS0vUSqB8MGQMS9+4og=
github.com/concourse/go-archive v0.0.0-20180803203406-784931698f4f/go.mod h1:Xfo080IPQBmVz3I5ehjCddW3phA2mwv0NFwlpjf5CO8=
github.com/concourse/go-archive v1.0.0 h1:nRejB54QZL8UwCKR5UlenYqwkEKN1A7khsarI5oRBkY=
github.com/concourse/go-archive v1.0.0/go.mod h1:Xfo080IPQBmVz3I5ehjCddW3phA2mwv0NFwlpjf5CO8=
github.com/concourse/go-archive v1.0.1 h1:6jQk0VDiE4G6lNJQ0mLZ7XmxbqI3spO4x0wgVwk4pfo=
github.com/concourse/go-archive v1.0.1/go.mod h1:Xfo080IPQBmVz3I5ehjCddW3phA2mwv0NFwlpjf5CO8=
@ -128,15 +127,12 @@ github.com/containerd/continuity v0.0.0-20180919190352-508d86ade3c2 h1:oiQ0OCfHd
github.com/containerd/continuity v0.0.0-20180919190352-508d86ade3c2/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.2.9+incompatible h1:3TbjfK5+aSRLTU/KgBC1xlgA2dn2ddYQngRqX6HFwlQ=
github.com/coreos/etcd v3.2.9+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/etcd v3.3.12+incompatible h1:pAWNwdf7QiT1zfaWyqCtNZQWCLByQyA3JrSQyuYAqnQ=
github.com/coreos/etcd v3.3.12+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-oidc v0.0.0-20170307191026-be73733bb8cc h1:9yuvA19Q5WFkLwJcMDoYm8m89ilzqZ5zEHqdvU+Zbds=
github.com/coreos/go-oidc v0.0.0-20170307191026-be73733bb8cc/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
github.com/coreos/go-oidc v2.0.0+incompatible h1:+RStIopZ8wooMx+Vs5Bt8zMXxV1ABl5LbakNExNmZIg=
github.com/coreos/go-oidc v2.0.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
@ -448,6 +444,7 @@ github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVo
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y=
github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
@ -522,7 +519,6 @@ github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2
github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/spf13/cobra v0.0.0-20160615143614-bc81c21bd0d8/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/pflag v0.0.0-20160610190902-367864438f1b/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=

View File

@ -11,4 +11,4 @@ var Version = "0.0.0-dev"
//
// New features that are otherwise backwards-compatible should result in a
// minor version bump.
var WorkerVersion = "2.1"
var WorkerVersion = "2.2"