Skip to content

feat: add aws and azure support with localstack and azurite integration#8

Open
erenaslandev wants to merge 6 commits into
mainfrom
feature/aws-azure-support
Open

feat: add aws and azure support with localstack and azurite integration#8
erenaslandev wants to merge 6 commits into
mainfrom
feature/aws-azure-support

Conversation

@erenaslandev

@erenaslandev erenaslandev commented Jun 10, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • New Features

    • Added many new performance and correctness benchmarks (S3, Azure Blob, SQS, SNS, Kinesis, CloudWatch, TCP) plus generator/receiver cloud modes and an azure-init helper.
    • Integrated local cloud emulator support (LocalStack, Azurite) and emulator wiring for end-to-end runs.
  • Tests

    • CI now runs Go unit tests and an emulator-smoke job executing emulator-based end-to-end correctness tests.
  • Documentation

    • Expanded README benchmark matrix and added a Cloud emulator section.

@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c8fa5f6f-252c-41fc-ab66-f8f693686bed

📥 Commits

Reviewing files that changed from the base of the PR and between b2bc9c7 and 5303814.

📒 Files selected for processing (3)
  • containers/generator/main.go
  • internal/config/case.go
  • internal/runner/runner.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • containers/generator/main.go
  • internal/runner/runner.go

Walkthrough

Adds LocalStack and Azurite emulator support: case schema, orchestrator wiring, generator S3/Azure Blob upload modes, receivers for S3/SQS/Kinesis/CloudWatch/Azure Blob, ~20+ new benchmark cases and subject configs, CI emulator-smoke jobs, and docs updates.

Changes

Cloud Emulator Integration for Benchmark Testing

Layer / File(s) Summary
Cloud config schema & validation
internal/config/cloud.go, internal/config/case.go, internal/config/cloud_test.go, internal/config/subject.go
Adds AWS/Azure emulator types, helpers, validation rules, TestCase schema fields (aws, azure, requires), and tests.
Compose rendering & emulator wiring
internal/orchestrator/docker.go, internal/orchestrator/awsinit.go, internal/orchestrator/compose_render_test.go
Generates conditional LocalStack/Azurite services, merges emulator env into subject/generator/receiver env, writes aws-init script, and adds compose-render tests.
Generator S3 & Azure Blob modes
containers/generator/s3.go, containers/generator/azureblob.go, containers/generator/main.go, containers/generator/go.mod
Implements S3 object packing/upload and Azure Blob uploads (optional BlobCreated queue events), worker fan-out, and mode dispatch changes; updates go.mod pins.
Receiver cloud polling & drain
containers/receiver/cloudpoll.go, containers/receiver/s3.go, containers/receiver/azureblob.go, containers/receiver/sqs.go, containers/receiver/kinesis.go, containers/receiver/cloudwatch.go, containers/receiver/main.go, containers/receiver/go.mod, containers/receiver/cloudpoll_test.go
Adds shared poll helpers (gzip detection, line counting), poll loop, receiver implementations for cloud drains, azure-init, and unit tests.
Runner capability & correctness rules
internal/runner/runner.go
Pre-run capability checks (requires), extended cleanup targets for emulator containers, and generalized over-delivery gating via Correctness.AllowOverDelivery.
Benchmark cases & subject configs
cases/*, README.md, .github/workflows/ci.yml
Adds many new performance and correctness cases (S3/Azure/SQS/SNS/Kinesis/CloudWatch paths), subject config files, README updates, and CI emulator-smoke job.

Estimated code review effort:
🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • namles
  • yusufozturk

"🐰 I hopped through clouds of LocalStack and Azurite,
Buckets and blobs in a benchmark carrot diet,
TCP lines and queues all play —
Containers hum, tests run, hooray!"

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/aws-azure-support

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
README.md (1)

32-63: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix the stale total-case count in the project tree snippet.

Lines 32 and 62 update the matrix to 25 performance and 17 correctness, but Line 130 still says 31 test cases (17 performance + 14 correctness).

Suggested patch
-  cases/                 31 test cases (17 performance + 14 correctness), each with per-subject configs
+  cases/                 42 test cases (25 performance + 17 correctness), each with per-subject configs
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 32 - 63, Update the stale summary sentence that
currently reads "31 test cases (17 performance + 14 correctness)" to reflect the
new totals after you expanded the matrices: replace it with "42 test cases (25
performance + 17 correctness)"; locate the string in README.md (the summary line
referencing total test cases) and change the numbers accordingly so the
breakdown matches the updated performance and correctness sections.
🧹 Nitpick comments (1)
containers/receiver/azureblob.go (1)

115-116: Use typed azqueue error detection for “queue already exists” instead of strings.Contains
In containers/receiver/azureblob.go (lines 115-116), replace strings.Contains(err.Error(), "QueueAlreadyExists") with queueerror.HasCode(err, <queue-already-exists code>) to match the blob-side typed pattern (bloberror.HasCode) and avoid brittle error-message matching.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@containers/receiver/azureblob.go` around lines 115 - 116, Replace the brittle
string-match in the retry branch for queue creation: instead of checking
strings.Contains(err.Error(), "QueueAlreadyExists") in azureblob.go, use the
azqueue typed helper queueerror.HasCode(err, <queue-already-exists code>) (e.g.,
queueerror.HasCode(err, queueerror.QueueAlreadyExists)) so the condition mirrors
the bloberror.HasCode pattern and reliably detects the "queue already exists"
error.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 96-103: In the emulator-smoke job replace mutable action tags and
disable checkout credential persistence: change the uses entries "uses:
actions/checkout@v5", "uses: actions/setup-go@v6", and "uses:
docker/setup-buildx-action@v3" to pinned commit SHAs (replace the `@vX` tags with
the corresponding full commit SHA for each action) and add persist-credentials:
false to the actions/checkout step; ensure you edit the emulator-smoke job's
checkout step to include persist-credentials: false and swap the three uses
lines to their respective commit SHA pins.

In `@cases/s3_to_tcp_performance/case.yaml`:
- Around line 30-40: The case declares a TCP receiver (receiver.mode and
receiver.listen = ":9001") but the Filebeat subject is configured to send to
:9002, so update the Filebeat subject configuration to target the case receiver
port: change the Filebeat output/receiver target in the filebeat.yml used by the
"filebeat" subject to point to the case receiver (listen) at :9001, or
alternatively change receiver.listen to ":9002" so both match; ensure the symbol
names to adjust are receiver.listen and the Filebeat subject's output/receiver
setting.

In `@cases/tcp_to_s3_correctness/configs/vector.toml`:
- Around line 1-2: Update the header comment in the Vector config to reference
the correct case name: replace the string "tcp_to_s3_performance" with
"tcp_to_s3_correctness" so the comment matches the file's case directory; ensure
the rest of the comment (e.g., mention of LocalStack and batch timeout) remains
unchanged.

In `@containers/receiver/go.mod`:
- Line 34: The indirect dependency github.com/aws/aws-sdk-go-v2/service/signin
appears unused; run go mod why github.com/aws/aws-sdk-go-v2/service/signin and
then go mod tidy to confirm and remove it if not required, then commit the
tidy-updated module files; after removal, rebuild and run tests (go build / go
test) to ensure nothing breaks and re-add only if go mod why shows a valid
consumer.

In `@internal/config/subject.go`:
- Around line 168-183: The comment next to the vmetric entry is misleading: the
struct sets Version: "2.0.2" while the comment states cloud capabilities require
a director build “newer than 2.0.2”; update the source of truth by either (A)
changing the Version field in the vmetric map to the actual minimum version that
supports emulator-specific fields (e.g., bump Version to the correct semver) or
(B) adjust the comment to explicitly state that although Capabilities (the
Capabilities slice) enables cloud flags, emulator endpoint fields (awss3
endpoint/use_path_style, azblob connection_string) require a newer build and
list the exact minimum version; modify the block containing the vmetric entry
(inspect the Version and Capabilities symbols) accordingly so the comment and
Version value are consistent.

---

Outside diff comments:
In `@README.md`:
- Around line 32-63: Update the stale summary sentence that currently reads "31
test cases (17 performance + 14 correctness)" to reflect the new totals after
you expanded the matrices: replace it with "42 test cases (25 performance + 17
correctness)"; locate the string in README.md (the summary line referencing
total test cases) and change the numbers accordingly so the breakdown matches
the updated performance and correctness sections.

---

Nitpick comments:
In `@containers/receiver/azureblob.go`:
- Around line 115-116: Replace the brittle string-match in the retry branch for
queue creation: instead of checking strings.Contains(err.Error(),
"QueueAlreadyExists") in azureblob.go, use the azqueue typed helper
queueerror.HasCode(err, <queue-already-exists code>) (e.g.,
queueerror.HasCode(err, queueerror.QueueAlreadyExists)) so the condition mirrors
the bloberror.HasCode pattern and reliably detects the "queue already exists"
error.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 478b1e8c-c2bc-4d4d-9064-a294c2319479

📥 Commits

Reviewing files that changed from the base of the PR and between 4cdfcf9 and 948535a.

⛔ Files ignored due to path filters (2)
  • containers/generator/go.sum is excluded by !**/*.sum
  • containers/receiver/go.sum is excluded by !**/*.sum
📒 Files selected for processing (68)
  • .github/workflows/ci.yml
  • README.md
  • cases/azure_blob_to_tcp_performance/case.yaml
  • cases/azure_blob_to_tcp_performance/configs/vmetric.yml
  • cases/s3_to_tcp_correctness/case.yaml
  • cases/s3_to_tcp_correctness/configs/logstash.conf
  • cases/s3_to_tcp_correctness/configs/vector.toml
  • cases/s3_to_tcp_correctness/configs/vmetric.yml
  • cases/s3_to_tcp_performance/case.yaml
  • cases/s3_to_tcp_performance/configs/filebeat.yml
  • cases/s3_to_tcp_performance/configs/logstash.conf
  • cases/s3_to_tcp_performance/configs/vector.toml
  • cases/s3_to_tcp_performance/configs/vmetric.yml
  • cases/tcp_to_azure_blob_correctness/case.yaml
  • cases/tcp_to_azure_blob_correctness/configs/fluent-bit.conf
  • cases/tcp_to_azure_blob_correctness/configs/vector.toml
  • cases/tcp_to_azure_blob_correctness/configs/vmetric.yml
  • cases/tcp_to_azure_blob_performance/case.yaml
  • cases/tcp_to_azure_blob_performance/configs/fluent-bit.conf
  • cases/tcp_to_azure_blob_performance/configs/vector.toml
  • cases/tcp_to_azure_blob_performance/configs/vmetric.yml
  • cases/tcp_to_cloudwatch_performance/case.yaml
  • cases/tcp_to_cloudwatch_performance/configs/fluent-bit.conf
  • cases/tcp_to_cloudwatch_performance/configs/vector.toml
  • cases/tcp_to_cloudwatch_performance/configs/vmetric.yml
  • cases/tcp_to_kinesis_performance/case.yaml
  • cases/tcp_to_kinesis_performance/configs/fluent-bit.conf
  • cases/tcp_to_kinesis_performance/configs/vector.toml
  • cases/tcp_to_kinesis_performance/configs/vmetric.yml
  • cases/tcp_to_s3_correctness/case.yaml
  • cases/tcp_to_s3_correctness/configs/fluent-bit.conf
  • cases/tcp_to_s3_correctness/configs/logstash.conf
  • cases/tcp_to_s3_correctness/configs/vector.toml
  • cases/tcp_to_s3_correctness/configs/vmetric.yml
  • cases/tcp_to_s3_performance/case.yaml
  • cases/tcp_to_s3_performance/configs/fluent-bit.conf
  • cases/tcp_to_s3_performance/configs/logstash.conf
  • cases/tcp_to_s3_performance/configs/vector.toml
  • cases/tcp_to_s3_performance/configs/vmetric.yml
  • cases/tcp_to_sns_performance/case.yaml
  • cases/tcp_to_sns_performance/configs/logstash.conf
  • cases/tcp_to_sns_performance/configs/vector.toml
  • cases/tcp_to_sns_performance/configs/vmetric.yml
  • cases/tcp_to_sqs_performance/case.yaml
  • cases/tcp_to_sqs_performance/configs/logstash.conf
  • cases/tcp_to_sqs_performance/configs/vector.toml
  • cases/tcp_to_sqs_performance/configs/vmetric.yml
  • containers/generator/azureblob.go
  • containers/generator/go.mod
  • containers/generator/main.go
  • containers/generator/s3.go
  • containers/receiver/azureblob.go
  • containers/receiver/cloudpoll.go
  • containers/receiver/cloudpoll_test.go
  • containers/receiver/cloudwatch.go
  • containers/receiver/go.mod
  • containers/receiver/kinesis.go
  • containers/receiver/main.go
  • containers/receiver/s3.go
  • containers/receiver/sqs.go
  • internal/config/case.go
  • internal/config/cloud.go
  • internal/config/cloud_test.go
  • internal/config/subject.go
  • internal/orchestrator/awsinit.go
  • internal/orchestrator/compose_render_test.go
  • internal/orchestrator/docker.go
  • internal/runner/runner.go

Comment thread .github/workflows/ci.yml
Comment thread cases/s3_to_tcp_performance/case.yaml
Comment thread cases/tcp_to_s3_correctness/configs/vector.toml Outdated
Comment thread containers/receiver/go.mod
Comment thread internal/config/subject.go
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 10, 2026

Copy link
Copy Markdown

Deploying pipebench with  Cloudflare Pages  Cloudflare Pages

Latest commit: 5303814
Status: ✅  Deploy successful!
Preview URL: https://9bfadd42.pipebench.pages.dev
Branch Preview URL: https://feature-aws-azure-support.pipebench.pages.dev

View logs

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