Skip to content

Commit 8b27d62

Browse files
authored
Merge pull request #717 from ava-labs/snapshot-auto-save
Snapshot auto save
2 parents 7523771 + a2054fc commit 8b27d62

29 files changed

+1292
-1314
lines changed

.golangci.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# https://golangci-lint.run/usage/configuration/
22
run:
33
timeout: 10m
4-
# skip auto-generated files.
5-
skip-files:
6-
- ".*\\.pb\\.go$"
7-
- ".*mock.*"
84

95
issues:
106
# Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
117
max-same-issues: 0
8+
# skip auto-generated files.
9+
exclude-files:
10+
- ".*\\.pb\\.go$"
11+
- ".*mock.*"
1212

1313
linters:
1414
# please, do not use `enable-all`: it's deprecated and will be removed soon.

client/client.go

+22-8
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ type Client interface {
5252
AttachPeer(ctx context.Context, nodeName string) (*rpcpb.AttachPeerResponse, error)
5353
SendOutboundMessage(ctx context.Context, nodeName string, peerID string, op uint32, msgBody []byte) (*rpcpb.SendOutboundMessageResponse, error)
5454
Close() error
55-
SaveSnapshot(ctx context.Context, snapshotName string) (*rpcpb.SaveSnapshotResponse, error)
56-
LoadSnapshot(ctx context.Context, snapshotName string, opts ...OpOption) (*rpcpb.LoadSnapshotResponse, error)
55+
SaveSnapshot(ctx context.Context, snapshotName string, force bool) (*rpcpb.SaveSnapshotResponse, error)
56+
LoadSnapshot(ctx context.Context, snapshotName string, inPlace bool, opts ...OpOption) (*rpcpb.LoadSnapshotResponse, error)
5757
RemoveSnapshot(ctx context.Context, snapshotName string) (*rpcpb.RemoveSnapshotResponse, error)
58-
GetSnapshotNames(ctx context.Context) ([]string, error)
58+
ListSnapshots(ctx context.Context) ([]string, error)
5959
ListSubnets(ctx context.Context) ([]string, error)
6060
ListBlockchains(ctx context.Context) ([]*rpcpb.CustomChainInfo, error)
6161
ListRpcs(ctx context.Context) ([]*rpcpb.BlockchainRpcs, error)
@@ -131,6 +131,9 @@ func (c *client) Start(ctx context.Context, execPath string, opts ...OpOption) (
131131
if ret.rootDataDir != "" {
132132
req.RootDataDir = &ret.rootDataDir
133133
}
134+
if ret.logRootDir != "" {
135+
req.LogRootDir = &ret.logRootDir
136+
}
134137
if ret.pluginDir != "" {
135138
req.PluginDir = ret.pluginDir
136139
}
@@ -362,12 +365,12 @@ func (c *client) SendOutboundMessage(ctx context.Context, nodeName string, peerI
362365
})
363366
}
364367

365-
func (c *client) SaveSnapshot(ctx context.Context, snapshotName string) (*rpcpb.SaveSnapshotResponse, error) {
368+
func (c *client) SaveSnapshot(ctx context.Context, snapshotName string, force bool) (*rpcpb.SaveSnapshotResponse, error) {
366369
c.log.Info("save snapshot", zap.String("snapshot-name", snapshotName))
367-
return c.controlc.SaveSnapshot(ctx, &rpcpb.SaveSnapshotRequest{SnapshotName: snapshotName})
370+
return c.controlc.SaveSnapshot(ctx, &rpcpb.SaveSnapshotRequest{SnapshotName: snapshotName, Force: force})
368371
}
369372

370-
func (c *client) LoadSnapshot(ctx context.Context, snapshotName string, opts ...OpOption) (*rpcpb.LoadSnapshotResponse, error) {
373+
func (c *client) LoadSnapshot(ctx context.Context, snapshotName string, inPlace bool, opts ...OpOption) (*rpcpb.LoadSnapshotResponse, error) {
371374
c.log.Info("load snapshot", zap.String("snapshot-name", snapshotName))
372375
ret := &Op{}
373376
ret.applyOpts(opts)
@@ -376,6 +379,7 @@ func (c *client) LoadSnapshot(ctx context.Context, snapshotName string, opts ...
376379
ChainConfigs: ret.chainConfigs,
377380
UpgradeConfigs: ret.upgradeConfigs,
378381
SubnetConfigs: ret.subnetConfigs,
382+
InPlace: inPlace,
379383
}
380384
if ret.execPath != "" {
381385
req.ExecPath = &ret.execPath
@@ -386,6 +390,9 @@ func (c *client) LoadSnapshot(ctx context.Context, snapshotName string, opts ...
386390
if ret.rootDataDir != "" {
387391
req.RootDataDir = &ret.rootDataDir
388392
}
393+
if ret.logRootDir != "" {
394+
req.LogRootDir = &ret.logRootDir
395+
}
389396
if ret.globalNodeConfig != "" {
390397
req.GlobalNodeConfig = &ret.globalNodeConfig
391398
}
@@ -398,8 +405,8 @@ func (c *client) RemoveSnapshot(ctx context.Context, snapshotName string) (*rpcp
398405
return c.controlc.RemoveSnapshot(ctx, &rpcpb.RemoveSnapshotRequest{SnapshotName: snapshotName})
399406
}
400407

401-
func (c *client) GetSnapshotNames(ctx context.Context) ([]string, error) {
402-
c.log.Info("get snapshot names")
408+
func (c *client) ListSnapshots(ctx context.Context) ([]string, error) {
409+
c.log.Info("list snapshots")
403410
resp, err := c.controlc.GetSnapshotNames(ctx, &rpcpb.GetSnapshotNamesRequest{})
404411
if err != nil {
405412
return nil, err
@@ -456,6 +463,7 @@ type Op struct {
456463
trackSubnets string
457464
globalNodeConfig string
458465
rootDataDir string
466+
logRootDir string
459467
pluginDir string
460468
blockchainSpecs []*rpcpb.BlockchainSpec
461469
customNodeConfigs map[string]string
@@ -518,6 +526,12 @@ func WithRootDataDir(rootDataDir string) OpOption {
518526
}
519527
}
520528

529+
func WithLogRootDir(logRootDir string) OpOption {
530+
return func(op *Op) {
531+
op.logRootDir = logRootDir
532+
}
533+
}
534+
521535
func WithPluginDir(pluginDir string) OpOption {
522536
return func(op *Op) {
523537
op.pluginDir = pluginDir

cmd/control/control.go

+22-8
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func NewCommand() *cobra.Command {
8080
newSaveSnapshotCommand(),
8181
newLoadSnapshotCommand(),
8282
newRemoveSnapshotCommand(),
83-
newGetSnapshotNamesCommand(),
83+
newListSnapshotsCommand(),
8484
newVMIDCommand(),
8585
newListSubnetsCommand(),
8686
newListBlockchainsCommand(),
@@ -105,6 +105,8 @@ var (
105105
reassignPortsIfUsed bool
106106
dynamicPorts bool
107107
networkID uint32
108+
force bool
109+
inPlace bool
108110
)
109111

110112
func setLogs() error {
@@ -1198,6 +1200,12 @@ func newSaveSnapshotCommand() *cobra.Command {
11981200
RunE: saveSnapshotFunc,
11991201
Args: cobra.ExactArgs(1),
12001202
}
1203+
cmd.PersistentFlags().BoolVar(
1204+
&force,
1205+
"force",
1206+
false,
1207+
"overwrite snapshot if it already exists",
1208+
)
12011209
return cmd
12021210
}
12031211

@@ -1209,7 +1217,7 @@ func saveSnapshotFunc(_ *cobra.Command, args []string) error {
12091217
defer cli.Close()
12101218

12111219
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
1212-
resp, err := cli.SaveSnapshot(ctx, args[0])
1220+
resp, err := cli.SaveSnapshot(ctx, args[0], force)
12131221
cancel()
12141222
if err != nil {
12151223
return err
@@ -1274,6 +1282,12 @@ func newLoadSnapshotCommand() *cobra.Command {
12741282
false,
12751283
"true to reassign snapshot ports if already taken",
12761284
)
1285+
cmd.PersistentFlags().BoolVar(
1286+
&inPlace,
1287+
"in-place",
1288+
false,
1289+
"load snapshot in place, so as it always auto save",
1290+
)
12771291
return cmd
12781292
}
12791293

@@ -1326,7 +1340,7 @@ func loadSnapshotFunc(_ *cobra.Command, args []string) error {
13261340

13271341
ctx := getAsyncContext()
13281342

1329-
resp, err := cli.LoadSnapshot(ctx, args[0], opts...)
1343+
resp, err := cli.LoadSnapshot(ctx, args[0], inPlace, opts...)
13301344
if err != nil {
13311345
return err
13321346
}
@@ -1363,24 +1377,24 @@ func removeSnapshotFunc(_ *cobra.Command, args []string) error {
13631377
return nil
13641378
}
13651379

1366-
func newGetSnapshotNamesCommand() *cobra.Command {
1380+
func newListSnapshotsCommand() *cobra.Command {
13671381
return &cobra.Command{
1368-
Use: "get-snapshot-names [options]",
1382+
Use: "list-snapshots [options]",
13691383
Short: "Lists available snapshots.",
1370-
RunE: getSnapshotNamesFunc,
1384+
RunE: listSnapshotsFunc,
13711385
Args: cobra.ExactArgs(0),
13721386
}
13731387
}
13741388

1375-
func getSnapshotNamesFunc(*cobra.Command, []string) error {
1389+
func listSnapshotsFunc(*cobra.Command, []string) error {
13761390
cli, err := newClient()
13771391
if err != nil {
13781392
return err
13791393
}
13801394
defer cli.Close()
13811395

13821396
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
1383-
snapshotNames, err := cli.GetSnapshotNames(ctx)
1397+
snapshotNames, err := cli.ListSnapshots(ctx)
13841398
cancel()
13851399
if err != nil {
13861400
return err

go.mod

+8-9
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ require (
1919
golang.org/x/exp v0.0.0-20231127185646-65229373498e
2020
golang.org/x/mod v0.14.0
2121
golang.org/x/sync v0.6.0
22-
google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80
23-
google.golang.org/grpc v1.62.0
22+
google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237
23+
google.golang.org/grpc v1.64.0
2424
google.golang.org/protobuf v1.33.0
2525
)
2626

@@ -59,7 +59,7 @@ require (
5959
github.com/go-stack/stack v1.8.1 // indirect
6060
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
6161
github.com/gogo/protobuf v1.3.2 // indirect
62-
github.com/golang/protobuf v1.5.3 // indirect
62+
github.com/golang/protobuf v1.5.4 // indirect
6363
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
6464
github.com/google/btree v1.1.2 // indirect
6565
github.com/google/go-cmp v0.6.0 // indirect
@@ -130,16 +130,15 @@ require (
130130
go.opentelemetry.io/otel/trace v1.22.0 // indirect
131131
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
132132
go.uber.org/mock v0.4.0 // indirect
133-
golang.org/x/crypto v0.18.0 // indirect
134-
golang.org/x/net v0.20.0 // indirect
135-
golang.org/x/sys v0.16.0 // indirect
136-
golang.org/x/term v0.16.0 // indirect
133+
golang.org/x/crypto v0.21.0 // indirect
134+
golang.org/x/net v0.22.0 // indirect
135+
golang.org/x/sys v0.18.0 // indirect
136+
golang.org/x/term v0.18.0 // indirect
137137
golang.org/x/text v0.14.0 // indirect
138138
golang.org/x/time v0.3.0 // indirect
139139
golang.org/x/tools v0.16.0 // indirect
140140
gonum.org/v1/gonum v0.11.0 // indirect
141-
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect
142-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
141+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
143142
gopkg.in/ini.v1 v1.67.0 // indirect
144143
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
145144
gopkg.in/yaml.v2 v2.4.0 // indirect

go.sum

+16-18
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,8 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
248248
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
249249
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
250250
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
251-
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
252-
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
251+
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
252+
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
253253
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
254254
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk=
255255
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -626,8 +626,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm
626626
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
627627
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
628628
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
629-
golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
630-
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
629+
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
630+
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
631631
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
632632
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
633633
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -712,8 +712,8 @@ golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qx
712712
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
713713
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
714714
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
715-
golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
716-
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
715+
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
716+
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
717717
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
718718
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
719719
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -801,12 +801,12 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
801801
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
802802
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
803803
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
804-
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
805-
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
804+
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
805+
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
806806
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
807807
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
808-
golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
809-
golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
808+
golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
809+
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
810810
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
811811
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
812812
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -953,12 +953,10 @@ google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6D
953953
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
954954
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
955955
google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
956-
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ=
957-
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
958-
google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU=
959-
google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
960-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
961-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
956+
google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4=
957+
google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE=
958+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc=
959+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
962960
google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
963961
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
964962
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
@@ -977,8 +975,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv
977975
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
978976
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
979977
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
980-
google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk=
981-
google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
978+
google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
979+
google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
982980
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
983981
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
984982
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=

0 commit comments

Comments
 (0)