Skip to content

Commit 7e02491

Browse files
authored
perf(vector): updated marshalling of vector (#9109)
Earlier we were unmarshalling bytes to []float64 by iterating on each element and reading it little endian. But we are now doing it using unsafe pointers. This reduces thee time from O(size(bytes)) to O(1) basically. Benchmark stats: ``` goos: linux goarch: amd64 pkg: github.com/dgraph-io/dgraph/tok/index cpu: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz BenchmarkEncodeDecodeUint64Matrix/Binary_Encoding/Decoding-8 185269 5991 ns/op BenchmarkEncodeDecodeUint64Matrix/Gob_Encoding/Decoding-8 46299 25547 ns/op BenchmarkEncodeDecodeUint64Matrix/JSON_Encoding/Decoding-8 77666 13723 ns/op BenchmarkEncodeDecodeUint64Matrix/PB_Encoding/Decoding-8 500092 2346 ns/op BenchmarkEncodeDecodeUint64Matrix/Unsafe_Encoding/Decoding-8 1465863 826.2 ns/op BenchmarkDotProduct/vek:size=96000-8 528499 2331 ns/op BenchmarkDotProduct/dotProduct:size=96000-8 170630 7765 ns/op BenchmarkDotProduct/dotProductT:size=96000-8 145855 8314 ns/op BenchmarkFloatConverstion/Current:size=96000-8 284873474 4.172 ns/op BenchmarkFloatConverstion/pointerFloat:size=96000-8 263052618 3.988 ns/op BenchmarkFloatConverstion/littleEndianFloat:size=96000-8 40446 35287 ns/op ``` Now indexing 500k vectors take about 5 minutes. (more than 5 hours before)
1 parent a6e5233 commit 7e02491

File tree

16 files changed

+844
-277
lines changed

16 files changed

+844
-277
lines changed

dgraphtest/config.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,14 @@ func NewClusterConfig() ClusterConfig {
147147
}
148148
}
149149

150-
func newClusterConfigFrom(cc ClusterConfig) ClusterConfig {
151-
prefix := fmt.Sprintf("dgraphtest-%d", rand.NewSource(time.Now().UnixNano()).Int63()%1000000)
152-
defaultBackupVol := fmt.Sprintf("%v_backup", prefix)
153-
defaultExportVol := fmt.Sprintf("%v_export", prefix)
154-
cc.prefix = prefix
155-
cc.volumes = map[string]string{DefaultBackupDir: defaultBackupVol, DefaultExportDir: defaultExportVol}
156-
return cc
157-
}
150+
//func newClusterConfigFrom(cc ClusterConfig) ClusterConfig {
151+
// prefix := fmt.Sprintf("dgraphtest-%d", rand.NewSource(time.Now().UnixNano()).Int63()%1000000)
152+
// defaultBackupVol := fmt.Sprintf("%v_backup", prefix)
153+
// defaultExportVol := fmt.Sprintf("%v_export", prefix)
154+
// cc.prefix = prefix
155+
// cc.volumes = map[string]string{DefaultBackupDir: defaultBackupVol, DefaultExportDir: defaultExportVol}
156+
// return cc
157+
//}
158158

159159
// WithNAlphas sets the number of alphas in the cluster
160160
func (cc ClusterConfig) WithNumAlphas(n int) ClusterConfig {

dgraphtest/local_cluster.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"fmt"
2424
"io"
2525
"log"
26+
"math/rand"
2627
"net/http"
2728
"os"
2829
"os/exec"
@@ -34,6 +35,7 @@ import (
3435

3536
"github.com/docker/docker/api/types"
3637
"github.com/docker/docker/api/types/container"
38+
"github.com/docker/docker/api/types/filters"
3739
"github.com/docker/docker/api/types/network"
3840
"github.com/docker/docker/api/types/volume"
3941
docker "github.com/docker/docker/client"
@@ -402,6 +404,26 @@ func (c *LocalCluster) Cleanup(verbose bool) {
402404
}
403405
}
404406

407+
func (c *LocalCluster) cleanupDocker() error {
408+
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
409+
defer cancel()
410+
// Prune containers
411+
contsReport, err := c.dcli.ContainersPrune(ctx, filters.Args{})
412+
if err != nil {
413+
log.Fatalf("[ERROR] Error pruning containers: %v", err)
414+
}
415+
log.Printf("[INFO] Pruned containers: %+v\n", contsReport)
416+
417+
// Prune networks
418+
netsReport, err := c.dcli.NetworksPrune(ctx, filters.Args{})
419+
if err != nil {
420+
log.Fatalf("[ERROR] Error pruning networks: %v", err)
421+
}
422+
log.Printf("[INFO] Pruned networks: %+v\n", netsReport)
423+
424+
return nil
425+
}
426+
405427
func (c *LocalCluster) Start() error {
406428
log.Printf("[INFO] starting cluster with prefix [%v]", c.conf.prefix)
407429
startAll := func() error {
@@ -433,10 +455,16 @@ func (c *LocalCluster) Start() error {
433455
log.Printf("[WARNING] saw the err, trying again: %v", err)
434456
}
435457

436-
log.Printf("[INFO] cleaning up the cluster for retrying!")
458+
if err1 := c.Stop(); err1 != nil {
459+
log.Printf("[WARNING] error while stopping :%v", err1)
460+
}
437461
c.Cleanup(true)
438462

439-
c.conf = newClusterConfigFrom(c.conf)
463+
if err := c.cleanupDocker(); err != nil {
464+
log.Printf("[ERROR] while cleaning old dockers %v", err)
465+
}
466+
467+
c.conf.prefix = fmt.Sprintf("dgraphtest-%d", rand.NewSource(time.Now().UnixNano()).Int63()%1000000)
440468
if err := c.init(); err != nil {
441469
log.Printf("[ERROR] error while init, returning: %v", err)
442470
return err

go.mod

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ require (
1313
github.com/HdrHistogram/hdrhistogram-go v1.1.2
1414
github.com/IBM/sarama v1.41.0
1515
github.com/Masterminds/semver/v3 v3.1.0
16+
github.com/bits-and-blooms/bitset v1.2.0
1617
github.com/blevesearch/bleve/v2 v2.3.10
17-
github.com/chewxy/math32 v1.10.1
1818
github.com/dgraph-io/badger/v4 v4.2.0
1919
github.com/dgraph-io/dgo/v230 v230.0.2-0.20240314155021-7b8d289e37f3
2020
github.com/dgraph-io/gqlgen v0.13.2
@@ -54,19 +54,20 @@ require (
5454
github.com/spf13/viper v1.7.1
5555
github.com/stretchr/testify v1.9.0
5656
github.com/twpayne/go-geom v1.0.5
57+
github.com/viterin/vek v0.4.2
5758
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c
5859
go.etcd.io/etcd/raft/v3 v3.5.9
5960
go.opencensus.io v0.24.0
6061
go.uber.org/zap v1.16.0
61-
golang.org/x/crypto v0.21.0
62-
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8
63-
golang.org/x/mod v0.16.0
64-
golang.org/x/net v0.22.0
65-
golang.org/x/sync v0.6.0
66-
golang.org/x/sys v0.18.0
67-
golang.org/x/term v0.18.0
68-
golang.org/x/text v0.14.0
69-
golang.org/x/tools v0.19.0
62+
golang.org/x/crypto v0.24.0
63+
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8
64+
golang.org/x/mod v0.18.0
65+
golang.org/x/net v0.26.0
66+
golang.org/x/sync v0.7.0
67+
golang.org/x/sys v0.22.0
68+
golang.org/x/term v0.21.0
69+
golang.org/x/text v0.16.0
70+
golang.org/x/tools v0.22.0
7071
google.golang.org/grpc v1.62.1
7172
gopkg.in/square/go-jose.v2 v2.3.1
7273
gopkg.in/yaml.v2 v2.4.0
@@ -78,14 +79,14 @@ require (
7879
github.com/agnivade/levenshtein v1.0.3 // indirect
7980
github.com/apache/thrift v0.13.0 // indirect
8081
github.com/beorn7/perks v1.0.1 // indirect
81-
github.com/bits-and-blooms/bitset v1.2.0 // indirect
8282
github.com/blevesearch/bleve_index_api v1.0.6 // indirect
8383
github.com/blevesearch/geo v0.1.18 // indirect
8484
github.com/blevesearch/go-porterstemmer v1.0.3 // indirect
8585
github.com/blevesearch/segment v0.9.1 // indirect
8686
github.com/blevesearch/snowballstem v0.9.0 // indirect
8787
github.com/blevesearch/upsidedown_store_api v1.0.2 // indirect
8888
github.com/cespare/xxhash/v2 v2.2.0 // indirect
89+
github.com/chewxy/math32 v1.10.1 // indirect
8990
github.com/davecgh/go-spew v1.1.1 // indirect
9091
github.com/docker/distribution v2.8.2+incompatible // indirect
9192
github.com/docker/go-units v0.4.0 // indirect
@@ -140,6 +141,7 @@ require (
140141
github.com/spf13/jwalterweatherman v1.1.0 // indirect
141142
github.com/subosito/gotenv v1.4.2 // indirect
142143
github.com/tinylib/msgp v1.1.2 // indirect
144+
github.com/viterin/partial v1.1.0 // indirect
143145
github.com/xdg/stringprep v1.0.3 // indirect
144146
go.uber.org/atomic v1.9.0 // indirect
145147
go.uber.org/multierr v1.10.0 // indirect

go.sum

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,10 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU
685685
github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio=
686686
github.com/vektah/dataloaden v0.2.1-0.20190515034641-a19b9a6e7c9e/go.mod h1:/HUdMve7rvxZma+2ZELQeNh88+003LL7Pf/CZ089j8U=
687687
github.com/vektah/gqlparser/v2 v2.1.0/go.mod h1:SyUiHgLATUR8BiYURfTirrTcGpcE+4XkV2se04Px1Ms=
688+
github.com/viterin/partial v1.1.0 h1:iH1l1xqBlapXsYzADS1dcbizg3iQUKTU1rbwkHv/80E=
689+
github.com/viterin/partial v1.1.0/go.mod h1:oKGAo7/wylWkJTLrWX8n+f4aDPtQMQ6VG4dd2qur5QA=
690+
github.com/viterin/vek v0.4.2 h1:Vyv04UjQT6gcjEFX82AS9ocgNbAJqsHviheIBdPlv5U=
691+
github.com/viterin/vek v0.4.2/go.mod h1:A4JRAe8OvbhdzBL5ofzjBS0J29FyUrf95tQogvtHHUc=
688692
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk=
689693
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
690694
github.com/xdg/stringprep v1.0.3 h1:cmL5Enob4W83ti/ZHuZLuKD/xqJfus4fVPwE+/BDm+4=
@@ -743,8 +747,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm
743747
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
744748
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
745749
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
746-
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
747-
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
750+
golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI=
751+
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
748752
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
749753
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
750754
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -758,8 +762,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
758762
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
759763
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
760764
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
761-
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw=
762-
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ=
765+
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 h1:yixxcjnhBmY0nkL253HFVIm0JsFHwrHdT3Yh6szTnfY=
766+
golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI=
763767
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
764768
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
765769
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -786,8 +790,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
786790
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
787791
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
788792
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
789-
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
790-
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
793+
golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0=
794+
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
791795
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
792796
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
793797
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -834,8 +838,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx
834838
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
835839
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
836840
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
837-
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
838-
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
841+
golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
842+
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
839843
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
840844
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
841845
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -856,8 +860,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
856860
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
857861
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
858862
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
859-
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
860-
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
863+
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
864+
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
861865
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
862866
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
863867
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -916,13 +920,13 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
916920
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
917921
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
918922
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
919-
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
920-
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
923+
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
924+
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
921925
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
922926
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
923927
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
924-
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
925-
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
928+
golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA=
929+
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
926930
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
927931
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
928932
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -934,8 +938,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
934938
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
935939
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
936940
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
937-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
938-
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
941+
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
942+
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
939943
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
940944
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
941945
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -1005,8 +1009,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
10051009
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
10061010
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
10071011
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
1008-
golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
1009-
golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
1012+
golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA=
1013+
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
10101014
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
10111015
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
10121016
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

0 commit comments

Comments
 (0)