Skip to content

Commit 9924fc6

Browse files
authored
semaphore: add leased Redis semaphore
Add a Redis-backed leased semaphore package for fleet-wide concurrency limits, document it, refresh dependencies, and ensure CI runs the new package tests.
1 parent 4dd6a29 commit 9924fc6

8 files changed

Lines changed: 933 additions & 103 deletions

File tree

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,15 @@ flowchart LR
102102

103103
See the [pool package README](pool/README.md) for more details.
104104

105+
## Leased Semaphores
106+
107+
Pulse semaphores provide Redis-backed concurrency limits shared across many
108+
processes. A caller waits for a slot, receives a lease when admitted, and
109+
releases the lease when the protected work is complete. If a process dies while
110+
holding a slot, the lease expires so another caller can make progress.
111+
112+
See the [semaphore package README](semaphore/README.md) for more details.
113+
105114
## Examples
106115

107116
See the [examples](examples) directory for examples of how to use the packages

go.mod

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,54 +6,53 @@ require (
66
github.com/google/uuid v1.6.0
77
github.com/gorilla/websocket v1.5.3
88
github.com/oklog/ulid/v2 v2.1.1
9-
github.com/redis/go-redis/v9 v9.18.0
9+
github.com/redis/go-redis/v9 v9.20.0
1010
github.com/stretchr/testify v1.11.1
11-
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.65.0
12-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0
13-
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.40.0
14-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0
15-
goa.design/clue v1.2.4
16-
goa.design/goa/v3 v3.25.3
11+
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.69.0
12+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0
13+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.44.0
14+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0
15+
goa.design/clue v1.2.6
16+
goa.design/goa/v3 v3.28.0
1717
goa.design/model v1.14.2
18-
google.golang.org/grpc v1.79.1
18+
google.golang.org/grpc v1.81.1
1919
)
2020

2121
require (
22-
github.com/aws/smithy-go v1.24.0 // indirect
22+
github.com/aws/smithy-go v1.27.0 // indirect
2323
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
2424
github.com/cespare/xxhash/v2 v2.3.0 // indirect
2525
github.com/davecgh/go-spew v1.1.1 // indirect
26-
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
2726
github.com/dimfeld/httppath v0.0.0-20170720192232-ee938bf73598 // indirect
2827
github.com/felixge/httpsnoop v1.0.4 // indirect
29-
github.com/go-chi/chi/v5 v5.2.5 // indirect
28+
github.com/go-chi/chi/v5 v5.3.0 // indirect
3029
github.com/go-logr/logr v1.4.3 // indirect
3130
github.com/go-logr/stdr v1.2.2 // indirect
3231
github.com/gohugoio/hashstructure v0.6.0 // indirect
33-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect
32+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect
3433
github.com/manveru/faker v0.0.0-20171103152722-9fbc68a78c4d // indirect
3534
github.com/pmezard/go-difflib v1.0.0 // indirect
3635
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
37-
go.opentelemetry.io/otel v1.40.0 // indirect
38-
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.40.0 // indirect
39-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect
40-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 // indirect
41-
go.opentelemetry.io/otel/metric v1.40.0 // indirect
42-
go.opentelemetry.io/otel/sdk v1.40.0 // indirect
43-
go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect
44-
go.opentelemetry.io/otel/trace v1.40.0 // indirect
45-
go.opentelemetry.io/proto/otlp v1.9.0 // indirect
36+
go.opentelemetry.io/otel v1.44.0 // indirect
37+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.44.0 // indirect
38+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 // indirect
39+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0 // indirect
40+
go.opentelemetry.io/otel/metric v1.44.0 // indirect
41+
go.opentelemetry.io/otel/sdk v1.44.0 // indirect
42+
go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect
43+
go.opentelemetry.io/otel/trace v1.44.0 // indirect
44+
go.opentelemetry.io/proto/otlp v1.10.0 // indirect
4645
go.uber.org/atomic v1.11.0 // indirect
47-
golang.org/x/mod v0.33.0 // indirect
48-
golang.org/x/net v0.50.0 // indirect
49-
golang.org/x/sync v0.19.0 // indirect
50-
golang.org/x/sys v0.41.0 // indirect
51-
golang.org/x/term v0.40.0 // indirect
52-
golang.org/x/text v0.34.0 // indirect
53-
golang.org/x/tools v0.42.0 // indirect
54-
google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d // indirect
55-
google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d // indirect
56-
google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect
46+
golang.org/x/mod v0.36.0 // indirect
47+
golang.org/x/net v0.55.0 // indirect
48+
golang.org/x/sync v0.20.0 // indirect
49+
golang.org/x/sys v0.45.0 // indirect
50+
golang.org/x/term v0.43.0 // indirect
51+
golang.org/x/text v0.37.0 // indirect
52+
golang.org/x/tools v0.45.0 // indirect
53+
google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa // indirect
54+
google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect
55+
google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect
5756
google.golang.org/protobuf v1.36.11 // indirect
5857
gopkg.in/yaml.v3 v3.0.1 // indirect
5958
)

0 commit comments

Comments
 (0)