Skip to content

Commit a4b52f8

Browse files
committed
Merge branch '3318-RavenDB-state-store-new' of github.com-n-personal:nmalocic/components-contrib into 3318-RavenDB-state-store-new
2 parents e53e0b4 + 3b0f134 commit a4b52f8

File tree

20 files changed

+503
-53
lines changed

20 files changed

+503
-53
lines changed

.build-tools/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ require (
1212
)
1313

1414
require (
15-
github.com/dapr/kit v0.15.3-0.20250710140356-9d4f384c5763 // indirect
15+
github.com/dapr/kit v0.15.3-0.20250717140748-8b780b4d81c5 // indirect
1616
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
1717
github.com/gogo/protobuf v1.3.2 // indirect
1818
github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 // indirect

.build-tools/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
2-
github.com/dapr/kit v0.15.3-0.20250710140356-9d4f384c5763 h1:9H0+baON+6+x4A/nQ2Lj+1JNk8MSlNv6sik6zfxdvsE=
3-
github.com/dapr/kit v0.15.3-0.20250710140356-9d4f384c5763/go.mod h1:40ZWs5P6xfYf7O59XgwqZkIyDldTIXlhTQhGop8QoSM=
2+
github.com/dapr/kit v0.15.3-0.20250717140748-8b780b4d81c5 h1:Q26gmPxs6WnnBYoudOlznPHsmrbTawcYEpHg4VoB7v8=
3+
github.com/dapr/kit v0.15.3-0.20250717140748-8b780b4d81c5/go.mod h1:40ZWs5P6xfYf7O59XgwqZkIyDldTIXlhTQhGop8QoSM=
44
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
55
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
66
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

bindings/redis/metadata.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ metadata:
104104
required: false
105105
description: |
106106
The Redis sentinel master name. Required when "failover" is enabled.
107-
example: "127.0.0.1:6379"
107+
example: "mymaster"
108108
url:
109109
title: "Redis Sentinel documentation"
110110
url: "https://redis.io/docs/manual/sentinel/"

common/component/kafka/subscriber.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import (
1717
"context"
1818
"errors"
1919
"time"
20+
21+
"github.com/dapr/components-contrib/pubsub"
2022
)
2123

2224
// Subscribe adds a handler and configuration for a topic, and subscribes.
@@ -35,9 +37,26 @@ func (k *Kafka) Subscribe(ctx context.Context, handlerConfig SubscriptionHandler
3537
k.wg.Add(1)
3638
go func() {
3739
defer k.wg.Done()
40+
postAction := func() {}
41+
3842
select {
3943
case <-ctx.Done():
44+
err := context.Cause(ctx)
45+
if errors.Is(err, pubsub.ErrGracefulShutdown) {
46+
k.logger.Debugf("Kafka component is closing. Context is done due to shutdown process.")
47+
postAction = func() {
48+
if k.clients != nil && k.clients.consumerGroup != nil {
49+
k.logger.Debugf("Kafka component is closing. Closing consumer group.")
50+
err := k.clients.consumerGroup.Close()
51+
if err != nil {
52+
k.logger.Errorf("failed to close consumer group: %w", err)
53+
}
54+
}
55+
}
56+
}
57+
4058
case <-k.closeCh:
59+
k.logger.Debugf("Kafka component is closing. Channel is closed.")
4160
}
4261

4362
k.subscribeLock.Lock()
@@ -50,6 +69,7 @@ func (k *Kafka) Subscribe(ctx context.Context, handlerConfig SubscriptionHandler
5069
}
5170

5271
k.reloadConsumerGroup()
72+
postAction()
5373
}()
5474
}
5575

@@ -87,9 +107,11 @@ func (k *Kafka) consume(ctx context.Context, topics []string, consumer *consumer
87107
clients, err := k.latestClients()
88108
if err != nil || clients == nil {
89109
k.logger.Errorf("failed to get latest Kafka clients: %w", err)
110+
return
90111
}
91112
if clients.consumerGroup == nil {
92113
k.logger.Errorf("component is closed")
114+
return
93115
}
94116
err = clients.consumerGroup.Consume(ctx, topics, consumer)
95117
if errors.Is(err, context.Canceled) {

common/component/kafka/subscriber_test.go

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package kafka
1616
import (
1717
"context"
1818
"errors"
19+
"fmt"
1920
"strconv"
2021
"sync/atomic"
2122
"testing"
@@ -26,6 +27,7 @@ import (
2627
"github.com/stretchr/testify/require"
2728

2829
"github.com/dapr/components-contrib/common/component/kafka/mocks"
30+
"github.com/dapr/components-contrib/pubsub"
2931
"github.com/dapr/kit/logger"
3032
)
3133

@@ -234,6 +236,115 @@ func Test_reloadConsumerGroup(t *testing.T) {
234236
assert.Equal(t, int64(2), cancelCalled.Load())
235237
assert.Equal(t, int64(2), consumeCalled.Load())
236238
})
239+
240+
t.Run("Cancel context whit shutdown error closes consumer group with one subscriber", func(t *testing.T) {
241+
var consumeCalled atomic.Int64
242+
var cancelCalled atomic.Int64
243+
var closeCalled atomic.Int64
244+
waitCh := make(chan struct{})
245+
cg := mocks.NewConsumerGroup().
246+
WithConsumeFn(func(ctx context.Context, _ []string, _ sarama.ConsumerGroupHandler) error {
247+
consumeCalled.Add(1)
248+
<-ctx.Done()
249+
cancelCalled.Add(1)
250+
return nil
251+
}).WithCloseFn(func() error {
252+
closeCalled.Add(1)
253+
waitCh <- struct{}{}
254+
return nil
255+
})
256+
257+
k := &Kafka{
258+
logger: logger.NewLogger("test"),
259+
mockConsumerGroup: cg,
260+
consumerCancel: nil,
261+
closeCh: make(chan struct{}),
262+
subscribeTopics: map[string]SubscriptionHandlerConfig{"foo": {}},
263+
consumeRetryInterval: time.Millisecond,
264+
}
265+
c, err := k.latestClients()
266+
require.NoError(t, err)
267+
268+
k.clients = c
269+
ctx, cancel := context.WithCancelCause(t.Context())
270+
k.Subscribe(ctx, SubscriptionHandlerConfig{}, "foo")
271+
assert.Eventually(t, func() bool {
272+
return consumeCalled.Load() == 1
273+
}, time.Second, time.Millisecond)
274+
assert.Equal(t, int64(0), cancelCalled.Load())
275+
cancel(pubsub.ErrGracefulShutdown)
276+
<-waitCh
277+
assert.Equal(t, int64(1), closeCalled.Load())
278+
})
279+
280+
t.Run("Cancel context whit shutdown error closes consumer group with multiple subscriber", func(t *testing.T) {
281+
var closeCalled atomic.Int64
282+
waitCh := make(chan struct{})
283+
cg := mocks.NewConsumerGroup().WithCloseFn(func() error {
284+
closeCalled.Add(1)
285+
waitCh <- struct{}{}
286+
return nil
287+
})
288+
289+
k := &Kafka{
290+
logger: logger.NewLogger("test"),
291+
mockConsumerGroup: cg,
292+
consumerCancel: nil,
293+
closeCh: make(chan struct{}),
294+
subscribeTopics: map[string]SubscriptionHandlerConfig{"foo": {}},
295+
consumeRetryInterval: time.Millisecond,
296+
}
297+
c, err := k.latestClients()
298+
require.NoError(t, err)
299+
300+
k.clients = c
301+
302+
cancelFns := make([]context.CancelCauseFunc, 0, 100)
303+
for i := range 100 {
304+
ctx, cancel := context.WithCancelCause(t.Context())
305+
cancelFns = append(cancelFns, cancel)
306+
k.Subscribe(ctx, SubscriptionHandlerConfig{}, fmt.Sprintf("foo%d", i))
307+
}
308+
cancelFns[0](pubsub.ErrGracefulShutdown)
309+
<-waitCh
310+
assert.Equal(t, int64(1), closeCalled.Load())
311+
})
312+
313+
t.Run("Closing subscriptions with no error or no ErrGracefulShutdown does not close consumer group", func(t *testing.T) {
314+
var closeCalled atomic.Int64
315+
waitCh := make(chan struct{})
316+
cg := mocks.NewConsumerGroup().WithCloseFn(func() error {
317+
closeCalled.Add(1)
318+
waitCh <- struct{}{}
319+
return nil
320+
})
321+
322+
k := &Kafka{
323+
logger: logger.NewLogger("test"),
324+
mockConsumerGroup: cg,
325+
consumerCancel: nil,
326+
closeCh: make(chan struct{}),
327+
subscribeTopics: map[string]SubscriptionHandlerConfig{"foo": {}},
328+
consumeRetryInterval: time.Millisecond,
329+
}
330+
c, err := k.latestClients()
331+
require.NoError(t, err)
332+
333+
k.clients = c
334+
cancelFns := make([]context.CancelCauseFunc, 0, 100)
335+
for i := range 100 {
336+
ctx, cancel := context.WithCancelCause(t.Context())
337+
cancelFns = append(cancelFns, cancel)
338+
k.Subscribe(ctx, SubscriptionHandlerConfig{}, fmt.Sprintf("foo%d", i))
339+
}
340+
cancelFns[0](errors.New("some error"))
341+
time.Sleep(1 * time.Second)
342+
assert.Equal(t, int64(0), closeCalled.Load())
343+
344+
cancelFns[4](nil)
345+
time.Sleep(1 * time.Second)
346+
assert.Equal(t, int64(0), closeCalled.Load())
347+
})
237348
}
238349

239350
func Test_Subscribe(t *testing.T) {

configuration/redis/metadata.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ metadata:
9292
required: false
9393
description: |
9494
The Redis sentinel master name. Required when "failover" is enabled.
95-
example: "127.0.0.1:6379"
95+
example: "mymaster"
9696
url:
9797
title: "Redis Sentinel documentation"
9898
url: "https://redis.io/docs/manual/sentinel/"

go.mod

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ require (
6565
github.com/cloudwego/kitex-examples v0.1.1
6666
github.com/cyphar/filepath-securejoin v0.2.4
6767
github.com/dancannon/gorethink v4.0.0+incompatible
68-
github.com/dapr/kit v0.15.3-0.20250710140356-9d4f384c5763
68+
github.com/dapr/kit v0.15.3-0.20250717140748-8b780b4d81c5
6969
github.com/didip/tollbooth/v7 v7.0.1
7070
github.com/eclipse/paho.mqtt.golang v1.4.3
7171
github.com/fasthttp-contrib/sessions v0.0.0-20160905201309-74f6ac73d5d5
@@ -285,14 +285,15 @@ require (
285285
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
286286
github.com/golang/protobuf v1.5.4 // indirect
287287
github.com/golang/snappy v1.0.0 // indirect
288-
github.com/google/btree v1.1.2 // indirect
288+
github.com/google/btree v1.1.3 // indirect
289289
github.com/google/flatbuffers v25.2.10+incompatible // indirect
290290
github.com/google/generative-ai-go v0.15.1 // indirect
291291
github.com/google/gnostic-models v0.6.9 // indirect
292292
github.com/google/go-cmp v0.7.0 // indirect
293293
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect
294294
github.com/google/s2a-go v0.1.9 // indirect
295295
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
296+
github.com/gorilla/css v1.0.1 // indirect
296297
github.com/gorilla/websocket v1.5.3 // indirect
297298
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
298299
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
@@ -363,7 +364,7 @@ require (
363364
github.com/panjf2000/ants/v2 v2.8.1 // indirect
364365
github.com/pelletier/go-toml v1.9.5 // indirect
365366
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
366-
github.com/pierrec/lz4 v2.6.0+incompatible // indirect
367+
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
367368
github.com/pierrec/lz4/v4 v4.1.22 // indirect
368369
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
369370
github.com/pkg/errors v0.9.1 // indirect
@@ -431,15 +432,15 @@ require (
431432
go.uber.org/atomic v1.10.0 // indirect
432433
go.uber.org/zap v1.27.0 // indirect
433434
golang.org/x/arch v0.10.0 // indirect
434-
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
435+
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
435436
golang.org/x/sync v0.15.0 // indirect
436437
golang.org/x/sys v0.33.0 // indirect
437438
golang.org/x/term v0.32.0 // indirect
438439
golang.org/x/text v0.26.0 // indirect
439440
golang.org/x/time v0.11.0 // indirect
440441
golang.org/x/tools v0.33.0 // indirect
441-
google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect
442-
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect
442+
google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9 // indirect
443+
google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9 // indirect
443444
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
444445
google.golang.org/grpc/examples v0.0.0-20230224211313-3775f633ce20 // indirect
445446
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect

go.sum

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ cloud.google.com/go/datastore v1.20.0/go.mod h1:uFo3e+aEpRfHgtp5pp0+6M0o147KoPaY
4040
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
4141
cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8=
4242
cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE=
43-
cloud.google.com/go/kms v1.21.1 h1:r1Auo+jlfJSf8B7mUnVw5K0fI7jWyoUy65bV53VjKyk=
44-
cloud.google.com/go/kms v1.21.1/go.mod h1:s0wCyByc9LjTdCjG88toVs70U9W+cc6RKFc8zAqX7nE=
43+
cloud.google.com/go/kms v1.21.2 h1:c/PRUSMNQ8zXrc1sdAUnsenWWaNXN+PzTXfXOcSFdoE=
44+
cloud.google.com/go/kms v1.21.2/go.mod h1:8wkMtHV/9Z8mLXEXr1GK7xPSBdi6knuLXIhqjuWcI6w=
4545
cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc=
4646
cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA=
4747
cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE=
@@ -63,8 +63,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
6363
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
6464
cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6QJs=
6565
cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY=
66-
cloud.google.com/go/trace v1.11.3 h1:c+I4YFjxRQjvAhRmSsmjpASUKq88chOX854ied0K/pE=
67-
cloud.google.com/go/trace v1.11.3/go.mod h1:pt7zCYiDSQjC9Y2oqCsh9jF4GStB/hmjrYLsxRR27q8=
66+
cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4=
67+
cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI=
6868
cloud.google.com/go/vertexai v0.12.0 h1:zTadEo/CtsoyRXNx3uGCncoWAP1H2HakGqwznt+iMo8=
6969
cloud.google.com/go/vertexai v0.12.0/go.mod h1:8u+d0TsvBfAAd2x5R6GMgbYhsLgo3J7lmP4bR8g2ig8=
7070
contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZsuFq26mDGid/JwCEXp+gTG/9U=
@@ -530,8 +530,8 @@ github.com/dancannon/gorethink v4.0.0+incompatible h1:KFV7Gha3AuqT+gr0B/eKvGhbjm
530530
github.com/dancannon/gorethink v4.0.0+incompatible/go.mod h1:BLvkat9KmZc1efyYwhz3WnybhRZtgF1K929FD8z1avU=
531531
github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0=
532532
github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0=
533-
github.com/dapr/kit v0.15.3-0.20250710140356-9d4f384c5763 h1:9H0+baON+6+x4A/nQ2Lj+1JNk8MSlNv6sik6zfxdvsE=
534-
github.com/dapr/kit v0.15.3-0.20250710140356-9d4f384c5763/go.mod h1:40ZWs5P6xfYf7O59XgwqZkIyDldTIXlhTQhGop8QoSM=
533+
github.com/dapr/kit v0.15.3-0.20250717140748-8b780b4d81c5 h1:Q26gmPxs6WnnBYoudOlznPHsmrbTawcYEpHg4VoB7v8=
534+
github.com/dapr/kit v0.15.3-0.20250717140748-8b780b4d81c5/go.mod h1:40ZWs5P6xfYf7O59XgwqZkIyDldTIXlhTQhGop8QoSM=
535535
github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg=
536536
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
537537
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -849,8 +849,8 @@ github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP
849849
github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs=
850850
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
851851
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
852-
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
853-
github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
852+
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
853+
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
854854
github.com/google/flatbuffers v1.11.0/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
855855
github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q=
856856
github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
@@ -918,8 +918,8 @@ github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3
918918
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
919919
github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU=
920920
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
921-
github.com/gorilla/css v1.0.0 h1:BQqNyPTi50JCFMTw/b67hByjMVXZRwGha6wxVGkeihY=
922-
github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c=
921+
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
922+
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
923923
github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
924924
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
925925
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
@@ -1443,8 +1443,9 @@ github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk
14431443
github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc=
14441444
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
14451445
github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
1446-
github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A=
14471446
github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
1447+
github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
1448+
github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
14481449
github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
14491450
github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
14501451
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
@@ -1952,8 +1953,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
19521953
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
19531954
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
19541955
golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
1955-
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
1956-
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
1956+
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM=
1957+
golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8=
19571958
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
19581959
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
19591960
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -2418,10 +2419,10 @@ google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQ
24182419
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
24192420
google.golang.org/genproto v0.0.0-20211104193956-4c6863e31247/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
24202421
google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
2421-
google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2ZraNSzMDk3I95nmQln2fuPstKwFDE=
2422-
google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE=
2423-
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 h1:vPV0tzlsK6EzEDHNNH5sa7Hs9bd7iXR7B1tSiPepkV0=
2424-
google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:pKLAc5OolXC3ViWGI62vvC0n10CpwAtRcTNCFwTKBEw=
2422+
google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9 h1:0DnDgelxbooHLt0nyiPeCP0zrH/RL+UG558i1oNU1xE=
2423+
google.golang.org/genproto v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:IuQRZAKkz+Mhos3ZZ0+hcGaTmLuuTuGw344uzwztGl8=
2424+
google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9 h1:WvBuA5rjZx9SNIzgcU53OohgZy6lKSus++uY4xLaWKc=
2425+
google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:W3S/3np0/dPWsWLi1h/UymYctGXaGBM2StwzD0y140U=
24252426
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE=
24262427
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
24272428
google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=

0 commit comments

Comments
 (0)