Skip to content

feat: sync upstream#33

Merged
timcovar merged 168 commits into
mainfrom
sync/v2
Jun 10, 2026
Merged

feat: sync upstream#33
timcovar merged 168 commits into
mainfrom
sync/v2

Conversation

@timcovar

Copy link
Copy Markdown

Summary

  • Rebases fork customizations onto upstream/main (154 upstream commits)
  • Preserves token bucket rate limiting (Lua script), zap logger, GOAT stats namespace, and operational changes
  • Gains upstream's radix v4 upgrade, Redis Sentinel TLS/auth, pipeline parallelism bounds, wildcard share thresholds, and numerous bug fixes
  • All 17 test packages pass, build is clean

Key changes

  • src/redis/fixed_cache_impl.go: Token bucket Lua script adapted to upstream's uint64 types and new interfaces
  • src/redis/driver.go/driver_impl.go: Simplified pipeline interface with PipeScriptAppend for Lua EVAL
  • src/limiter/cache_key.go: Fixed cache keys (no time component) for token bucket
  • src/log/logger.go: Custom zap logger replacing logrus across all source files
  • src/stats/manager_impl.go: GOAT stats namespace via GOATENV_APP/GOATENV_ENVIRONMENT
  • Tests rewritten to validate token bucket behavior against miniredis

Test plan

  • go build ./... passes
  • go test ./... — all 17 packages pass
  • Load test in staging to validate token bucket behavior matches pre-sync fork

akondapuram and others added 30 commits February 7, 2024 08:08
Signed-off-by: alekhya.kondapuram <alekhya.kondapuram@salesforce.com>
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 2.2.0 to 5.0.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](actions/setup-go@v2.2.0...0c52d54)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: alekhya.kondapuram <alekhya.kondapuram@salesforce.com>
Default gostats store flood messages on stderr except if statd or
if GOSTATS_LOGGING_SINK_DISABLED is set to "true".
This commit init store in a unambiguous way.

Signed-off-by: Guilhem Lettron <guilhem@barpilot.io>
fix envoyproxy#520 trailing line

Signed-off-by: Guilhem Lettron <guilhem@barpilot.io>
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.2.4 to 3.24.9.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@v2.2.4...1b1aada)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 2.7.0 to 4.1.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v2.7.0...9bb5618)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1.7.0 to 3.2.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](docker/setup-buildx-action@f211e3e...2b51285)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

only the last descriptor uses the provided descriptor value in case of
detailed metrics. when traversing the list of descriptors, the code
"loses" the previous keys. this leads to metrics like:
"test-domain.first-key_.second-key_second-value", where the last
descriptor properly uses the detailed metric descriptor value, but all
other descriptors (the first one here) are missing the value.

this patch introduces a new string builder, that builds the detailed
metric as the iteration of the input descriptor is happening.
a unit test is attached to show the behavior. it fails without the new
code, and successfully preserves all descriptor keys with the patched
code.

Signed-off-by: Johannes Brüderl <johannes.bruederl@gmail.com>
…onfigured with env vars (envoyproxy#549)

Signed-off-by: Zak Henry <zak@cloudnc.com>
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.8.4 to 1.9.0.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](stretchr/testify@v1.8.4...v1.9.0)

---
updated-dependencies:
- dependency-name: github.com/stretchr/testify
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](actions/setup-python@0a5c615...82c7e63)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) from 1.21.0 to 1.24.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-go@v1.21.0...v1.24.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel/sdk
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…yproxy#537)

Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.59.0 to 1.62.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.59.0...v1.62.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps golang from 1.21.5 to 1.22.1.

---
updated-dependencies:
- dependency-name: golang
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…envoyproxy#534)

Bumps golang from 1.21.5 to 1.22.1.

---
updated-dependencies:
- dependency-name: golang
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.59.0 to 1.63.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.59.0...v1.63.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

Signed-off-by: alexhwcheng <121998721+alexhwcheng@users.noreply.github.com>
…uf` (envoyproxy#553)

Signed-off-by: Matthieu MOREL <matthieu.morel35@gmail.com>
…oxy#542)

* Add support for unix domain sockets

Signed-off-by: Alex Reid <areid@akamai.com>

* Add documentation

Signed-off-by: Alex Reid <areid@akamai.com>

---------

Signed-off-by: Alex Reid <areid@akamai.com>
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.9 to 3.24.10.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@1b1aada...4355270)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps golang from 1.22.1 to 1.22.2.

---
updated-dependencies:
- dependency-name: golang
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…yproxy#562)

Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.62.1 to 1.63.0.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.62.1...v1.63.0)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [github.com/lyft/gostats](https://github.com/lyft/gostats) from 0.4.12 to 0.4.13.
- [Release notes](https://github.com/lyft/gostats/releases)
- [Commits](lyft/gostats@v0.4.12...v0.4.13)

---
updated-dependencies:
- dependency-name: github.com/lyft/gostats
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…envoyproxy#561)

Bumps golang from 1.22.1 to 1.22.2.

---
updated-dependencies:
- dependency-name: golang
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3.1.0 to 4.3.3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](actions/upload-artifact@3cea537...6546280)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [github.com/lyft/gostats](https://github.com/lyft/gostats) from 0.4.13 to 0.4.14.
- [Release notes](https://github.com/lyft/gostats/releases)
- [Commits](lyft/gostats@v0.4.13...v0.4.14)

---
updated-dependencies:
- dependency-name: github.com/lyft/gostats
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.10 to 3.25.7.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@4355270...f079b84)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…nvoyproxy#604)

Bumps [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go) from 1.21.0 to 1.27.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md)
- [Commits](open-telemetry/opentelemetry-go@v1.21.0...v1.27.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…oxy#600)

Bumps alpine from `51b6726` to `77726ef`.

---
updated-dependencies:
- dependency-name: alpine
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
jpereiramp and others added 28 commits April 17, 2026 11:59
…oyproxy#1111)

Signed-off by: João Pereira <joao@jpereira.me>

Upgrades the gRPC dependency from v1.74.2 to v1.80.0, along with its
transitive dependency updates (golang.org/x/net, google.golang.org/protobuf,
genproto, go-control-plane, etc.).

Signed-off-by: João Pereira <joao.pereira@zwift.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: Yan Avlasov <yavlasov@google.com>
Make the docker image easier to consume.

Signed-off-by: Ian Kerins <git@isk.haus>
…oxy#1124)

Signed-off-by: collin-lee <collin.lee@salesforce.com>
Co-authored-by: collin-lee <collin.lee@salesforce.com>
PR envoyproxy#1124 updated the golang base image from 1.26.1 to 1.26.2, but the
new digest sha256:7095ad02810845fa35d1fb090b8e57dd20dce4ca36b29b42951
802350d2ec90e is a single-arch (linux/amd64) image manifest rather
than a multi-arch index. The previous 1.26.1 digest sha256:e2ddb153f7
86ee6210bf8c40f7f35490b3ff7d38be70d1a0d358ba64225f6428 is an OCI image
index covering linux/amd64, arm64/v8, arm/v7, 386, ppc64le, riscv64,
s390x and windows/amd64.

When buildx is asked to produce a non-amd64 variant of the published
envoyproxy/ratelimit image, the FROM line resolves to the amd64 base
on every platform, so the resulting binary is amd64 regardless of the
target. The multi-arch publish then stamps that amd64 binary into the
arm64 layer of the released index, producing an image that fails on
arm64 nodes with:

  exec /bin/ratelimit: exec format error

Swap to the corresponding multi-arch index digest sha256:b54cbf583d39
0341599d7bcbc062425c081105cc5ef6d170ced98ef9d047c716, which contains
the existing 7095ad02... amd64 manifest as one of its children plus
the arm64/v8 and other platform variants. The amd64 image is
unchanged; arm64 builds now produce arm64 binaries.

Signed-off-by: Harrison Harris <harrison.harris@xapien.com>
Co-authored-by: Harrison Harris <harrison.harris@xapien.com>
)

Signed-off-by: Yan Avlasov <yavlasov@google.com>
)

* feat: add retry in init phase instead of panic directly

Signed-off-by: zirain <zirain2009@gmail.com>

* respect signal handling for graceful shutdown

Signed-off-by: zirain <zirain2009@gmail.com>

* fix test

Signed-off-by: zirain <zirain2009@gmail.com>

---------

Signed-off-by: zirain <zirain2009@gmail.com>
Co-authored-by: collin-lee <collin.lee@salesforce.com>
…yproxy#1150)

Signed-off-by: Immanuel Tikhonov <pchpr.00@list.ru>
Signed-off-by: immanuwell <pchpr.00@list.ru>
* redis: bound cluster pipeline parallelism

Signed-off-by: dthuynh <dthuynh@axon.com>

* Refactor to address comment: use gRPC request context in PipeDo, cap the parallelism to RedisPoolSize

Signed-off-by: dthuynh <dthuynh@axon.com>

---------

Signed-off-by: dthuynh <dthuynh@axon.com>
Co-authored-by: dthuynh <dthuynh@axon.com>
…roxy#1154)

Signed-off-by: Fred Dafunk <bloomenergyguy@gmail.com>

Co-authored-by: collin-lee <collin.lee@salesforce.com>
Rebase fork customizations onto upstream/main (154 commits ahead),
preserving token bucket algorithm, zap logger, GOAT stats namespace,
and operational changes while gaining upstream's radix v4 upgrade,
Sentinel TLS support, pipeline parallelism bounds, and bug fixes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This merge records origin/main as a parent so the PR can merge
cleanly. All conflicts are resolved in favor of sync/v2 which
contains the complete upstream sync with fork customizations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* origin/main:
  Delete .github/workflows/main.yaml
  Revert "Update DCO (#13)" (#14)
  Update DCO (#13)
  feat: token bucket rate limit (#12)
  make cache keys fixed (#11)
  feat: replace logrus logger with goat logger (#10)
  feat: add support for goat statsd (#9)
  fix health check (#8)
  fix log keys (#7)
  fix server exit (#6)
  [ratelimit] chore: remove http/debug server (#5)
  Update go.mod (#4)
  [ratelimit] fix: lua script rate limit consistency (#3)
  feat: upgrade radix to v4 (#2)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Run goimports (with -local "github.com/goatapp/ratelimit") and gofumpt
across all Go files to satisfy pre-commit CI checks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Without this, Run() returns immediately after srv.Start(ctx) because
Start launches goroutines and returns. The deferred cancel() then fires,
triggering graceful shutdown before the server can accept connections.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The fork's stats manager uses `app.{GOATENV_APP}.{GOATENV_ENVIRONMENT}`
as the scope prefix instead of hardcoded "ratelimit". Update integration
tests to use stats.GetStatsScope() for the service stats prefix.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Redis Cluster routes EVAL commands based on declared keys. The token
bucket Lua script was passing keys as ARGV (invisible to cluster
routing), causing commands to land on wrong nodes.

- Move key and key:expires to KEYS[1]/KEYS[2] in the Lua script
- Pass keys parameter to radix EvalScript.FlatCmd for proper routing
- Wrap keys with {hashtag} to ensure both hash to the same slot

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The pre-check GET logic for stopCacheKeyIncrementWhenOverlimit was not
compatible with the token bucket model:

1. Changed GET receiver to string to distinguish "key doesn't exist"
   (empty string = full bucket) from "key has value 0" (empty bucket)
2. When any descriptor is over limit, ALL descriptors use hitsAddend=0
   (not just the over-limit one) to prevent any token consumption
3. Response generation uses hitsAddendForRedis (the value actually sent
   to Redis) instead of the original hitsAddend
4. Fixed getLimitAfterIncrease for hitsAddend=0 case to correctly report
   unchanged state vs over-limit state

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ackground()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@timcovar timcovar merged commit 95e672c into main Jun 10, 2026
3 checks passed
timcovar added a commit that referenced this pull request Jun 10, 2026
The fork content was already synced via squash-merge in 95e672c (PR #33).
This merge commit links the histories so GitHub no longer reports
the fork as 100+ commits behind upstream.

* upstream/main: (154 commits)
  Update to golang-1.26.4 and update golang.org/x/net to 0.55.0 (envoyproxy#1154)
  feat: bound cluster pipeline parallelism (envoyproxy#1149)
  fix: correct typos in memcache error messages and variable name (envoyproxy#1150)
  Update to golang 1.26.3 (envoyproxy#1152)
  Add quota mode to rate limit descriptor proto (envoyproxy#1148)
  feat: add retry in init phase instead of panic directly (envoyproxy#1144)
  Add integration test for quota based service selection. (envoyproxy#1114)
  build: pin golang:1.26.2 to multi-arch index digest (envoyproxy#1131)
  Update third party libraries flagged for vulnerability scans (envoyproxy#1124)
  feat: add zipkin b3 header propagation (envoyproxy#1110)
  Fix Prometheus response time units (envoyproxy#1104)
  Dockerfile: add ENTRYPOINT (envoyproxy#1095)
  Send user defined metadata to the client (envoyproxy#1112)
  build(deps): bump google.golang.org/grpc from v1.74.2 to v1.80.0 (envoyproxy#1111)
  Fix quota result when all limits were exceeded (envoyproxy#1059)
  Update golang references to 1.26.1 (envoyproxy#1091)
  Add integration test for token based quota (envoyproxy#1092)
  Add quota integration test (envoyproxy#1090)
  Add debug logging for quota values (envoyproxy#1089)
  Wait for sevices to be up before running tests (envoyproxy#1088)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.