Skip to content

Add streaming load test backend#590

Draft
aditya1702 wants to merge 22 commits into
mainfrom
feature/add-load-test-backend
Draft

Add streaming load test backend#590
aditya1702 wants to merge 22 commits into
mainfrom
feature/add-load-test-backend

Conversation

@aditya1702

Copy link
Copy Markdown
Contributor

No description provided.

aditya1702 and others added 12 commits April 21, 2026 14:39
…treaming-loadtest backend

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…streaming-loadtest backend option

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…m constructor

NewStreamingLoadtestLedgerBackend now, when ArchiveURL is set, opens the
meta FIFO and drains frames until the history archive reports a non-zero
currentLedger (AND we've consumed a frame with seq >= that checkpoint).
This resolves a startup deadlock where apply-load blocks on FIFO writes
before publishing the first archive checkpoint, and wallet-backend's
PopulateAccountTokens path can't proceed without a valid checkpoint.

The drain happens in the constructor (before PrepareRange) because
startLiveIngestion calls GetLatestLedgerSequence + PopulateAccountTokens
before PrepareRange.

Also: lint/errcheck cleanup — errors.Is for io.EOF, wrapped external errors,
removed unnecessary uint32 casts on xdr.LedgerCloseMeta.LedgerSequence
(which is already uint32).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@aditya1702
aditya1702 force-pushed the feature/add-load-test-backend branch from c91d02d to a701d10 Compare April 22, 2026 15:08
aditya1702 and others added 10 commits April 22, 2026 11:24
Bump github.com/stellar/go-stellar-sdk from v0.1.0 to v0.5.0. The new
SDK requires Go 1.25, so the Go toolchain moves to 1.25.9 (latest
patch) across go.mod, the Dockerfile base image (also migrating from
Debian bullseye to bookworm), and the CI workflow.

Transitive effect: github.com/stellar/go-xdr advances alongside the
SDK, and several golang.org/x/* modules move to patch releases
compatible with Go 1.25. No application code changes required -- the
SDK's public surface remained backwards-compatible across v0.1 to
v0.5.
…vulncheck

- x/tools cluster (goimports, shadow, deadcode): v0.31.0 -> v0.43.0
- gqlgen: v0.17.76 -> v0.17.88 (requires Go 1.25)
- gotestsum (CI): v1.11.0 -> v1.13.0
- gofumpt: add a pinned auto-install guard at v0.9.2 to match the
  pattern used by the other tools in the Makefile
- Remove the govulncheck target and its entry in the `check`
  aggregator. Vulnerability scanning can be reintroduced via
  Dependabot or osv-scanner in a separate change if desired.

exhaustive (v0.12.0) and golangci-lint (v2.1.2) are already current
and remain unchanged.
Replace builder.WriteString(fmt.Sprintf(...)) with fmt.Fprintf(&builder, ...)
across internal/data SQL query builders and the integrationtests
useCase summary formatter. strings.Builder implements io.Writer, so
Fprintf writes directly without an intermediate string allocation.

These lint findings appeared after the Go toolchain bump to 1.25.9.
Autofixed via `golangci-lint run --fix`.
The standalone github.com/nishanths/exhaustive/cmd/exhaustive@v0.12.0
binary transitively requires golang.org/x/tools@v0.15.0, which fails
to compile under Go 1.25 (a stricter constant-evaluation rule rejects
an older pattern in x/tools/internal/tokeninternal). The exhaustive
project has had no new release in ~2 years and its master branch has
the same problem.

golangci-lint v2.1.2 ships its own vendored exhaustive analyzer and
builds cleanly under Go 1.25, so move the enforcement there:

- Remove the standalone exhaustive Makefile target and its entry in
  the `check` aggregator.
- Remove the standalone exhaustive step in the GitHub Actions go.yaml
  workflow.
- Enable the exhaustive linter in .golangci.yml with the same
  `default-signifies-exhaustive: true` setting the standalone tool
  used.

Coverage is preserved -- the golangci-lint pass at `make check` now
reports zero exhaustive findings, matching the previous state.
Regenerated via `make gql-generate` after bumping gqlgen from v0.17.76
to v0.17.88. The new version produces substantially smaller output
(~7800 deletions, ~3500 insertions in generated.go) and also applies
gofumpt v0.9's type-block consolidation to the resolver stubs. No
behaviour changes -- schema and resolver signatures are unchanged.

Regeneration is idempotent: a second `make gql-generate` produces no
diff.
When the `exhaustive` step was removed in an earlier commit, the
leading whitespace of the following `deadcode` step's `- name:` line
was trimmed to column 1, breaking the YAML at parse time. GitHub
Actions treated the entire `Go` workflow as invalid and skipped it on
this PR (the two checks that appeared were from a separate CodeQL
workflow).

Restore the 6-space indentation so the step nests correctly under
`jobs.check.steps`.
gqlgen's raw output groups all imports in one block, which violates
the repo's `github.com/stellar/wallet-backend` local-prefix
convention. The `make tidy` target runs goimports with the local
prefix to split the imports into third-party / local groups, but the
CI workflow runs goimports as a standalone check step (not via `make
tidy`), so it catches any post-regen imports that were not
normalized.

Apply `goimports -local github.com/stellar/wallet-backend -w` to the
three regenerated files (generated.go, account.resolvers.go,
queries.resolvers.go).
…hive checkpoint

The constructor drains the pipe to unstick apply-load until the history
archive publishes a checkpoint. Previously those drained frames were
discarded, and the ingest loop then started at the archive checkpoint
and hit a sequence mismatch because the pipe had already advanced past
that ledger. Now the drain retains every frame it reads, trims the
retained slice to start at the archive checkpoint once published, and
GetLedger replays the buffered frames before resuming pipe reads.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.

1 participant