Skip to content

Conversation

@rustatian
Copy link
Member

@rustatian rustatian commented Aug 30, 2025

Reason for This PR

closes: roadrunner-server/roadrunner#2219

Description of Changes

  • Add two additional producer options: partitioning_strategy: Manual|Uniform|RoundRobin|LeastBackup|Sticky
  • TBD: before release - add docs: Uniform is used by default.

License Acceptance

By submitting this pull request, I confirm that my contribution is made under
the terms of the MIT license.

PR Checklist

[Author TODO: Meet these criteria.]
[Reviewer TODO: Verify that these criteria are met. Request changes if not]

  • All commits in this PR are signed (git commit -s).
  • The reason for this PR is clearly provided (issue no. or explanation).
  • The description of changes is clear and encompassing.
  • Any required documentation changes (code and docs) are included in this PR.
  • Any user-facing changes are mentioned in CHANGELOG.md.
  • All added/changed functionality is tested.

Summary by CodeRabbit

  • New Features
    • Added a producer setting "partitioning_strategy" with five options: Manual, Uniform (default), RoundRobin, LeastBackup, and Sticky to control record partitioning.
  • Bug Fixes
    • Unknown/invalid partitioning values now return a clear error.
  • Documentation
    • Configuration schema updated with enum, default, and description for partitioning_strategy; minor schema formatting tweaks (no behavior changes).
  • Chores
    • Bumped multiple dependency versions (AWS SDK, OpenTelemetry, testing and instrumentation libs).

Signed-off-by: Valery Piashchynski <[email protected]>
@rustatian rustatian requested a review from Copilot August 30, 2025 20:46
@rustatian rustatian self-assigned this Aug 30, 2025
@coderabbitai
Copy link

coderabbitai bot commented Aug 30, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Adds a PartitioningStrategy type and constants, exposes ProducerOpts.PartitioningStrategy, updates schema.json to include the enum and default, and maps non-empty strategy strings in kafkajobs/config.go to corresponding kgo.RecordPartitioner options (Manual, RoundRobin, LeastBackup, Sticky) or errors on unknown values. No string normalization or new imports added.

Changes

Cohort / File(s) Summary
Producer partitioning logic
kafkajobs/config.go
When ProducerOpts.PartitioningStrategy is non-empty, maps its exact string value to a kgo.RecordPartitioner: Manual -> kgo.ManualPartitioner(), RoundRobin -> kgo.RoundRobinPartitioner(), LeastBackup -> kgo.LeastBackupPartitioner(), Sticky -> kgo.StickyPartitioner(). Uniform/empty leaves default; unknown value returns an error. No strings normalization or new imports.
Public API: options and types
kafkajobs/opts.go
Adds type PartitioningStrategy string and constants: PartitionManual, PartitionUniform, PartitionRoundRobin, PartitionLeastBackup, PartitionSticky. Adds PartitioningStrategy PartitioningStrategy to ProducerOpts with mapstructure/json tags.
Configuration schema
schema.json
Adds producer_options.partitioning_strategy enum ["Manual","Uniform","RoundRobin","LeastBackup","Sticky"] with default "Uniform" and description. Reformats several enum/required arrays (formatting-only).
Dependency updates
go.mod, tests/go.mod
Bumps multiple dependencies (AWS SDK v2 modules, OpenTelemetry v1.37→v1.38, others) — version upgrades only, no API changes.

Sequence Diagram(s)

sequenceDiagram
  participant UserConfig as User config (schema.json)
  participant Jobs as Jobs Plugin
  participant KafkaInit as kafkajobs.InitDefault
  participant kgo as franz-go (kgo)

  UserConfig->>Jobs: Provide producer_options.partitioning_strategy
  Jobs->>KafkaInit: Build ProducerOpts
  KafkaInit->>KafkaInit: Check strategy string (exact match)
  alt strategy == "Manual"
    KafkaInit->>kgo: Apply ManualPartitioner()
  else strategy == "RoundRobin"
    KafkaInit->>kgo: Apply RoundRobinPartitioner()
  else strategy == "LeastBackup"
    KafkaInit->>kgo: Apply LeastBackupPartitioner()
  else strategy == "Sticky"
    KafkaInit->>kgo: Apply StickyPartitioner()
  else strategy == "Uniform" or empty
    KafkaInit->>kgo: Use default partitioner (uniform)
  else unknown
    KafkaInit-->>Jobs: return error "unknown partitioning strategy: <value>"
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Assessment against linked issues

Objective Addressed Explanation
Add producer option partitioning_strategy with enum Manual/Uniform in config schema (#2219)
Use ManualPartitioner when partitioning_strategy is Manual (#2219)
Default behavior remains uniform partitioning when strategy is Uniform or unset (#2219)
Validate/err on unknown partitioning_strategy values (#2219)

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
Added additional partitioning strategies RoundRobin, LeastBackup, Sticky (kafkajobs/opts.go, kafkajobs/config.go, schema.json) Linked issue requested Manual

Possibly related issues

Poem

I hop through configs, nibble at the scheme,
Manual, Uniform, and friends join the dream.
RoundRobin, Sticky, LeastBackup in play,
I ferry each record the partitioned way. 🥕🐇

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/partition-strategy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore or @coderabbit ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@rustatian rustatian added the enhancement New feature or request label Aug 30, 2025
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR adds a new partitioning strategy feature to the Kafka producer configuration, allowing users to choose between manual and uniform partitioning strategies. It addresses issue #2219 by introducing two new producer options.

Key changes:

  • Added partitioning_strategy configuration option with "Manual" and "Uniform" values
  • Updated JSON schema to include the new partitioning strategy field with appropriate validation
  • Implemented partitioning strategy logic in the Kafka configuration initialization

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
schema.json Added partitioning_strategy field to producer options with enum validation and formatting cleanup
kafkajobs/opts.go Defined PartitioningStrategy type and constants for manual/uniform partitioning
kafkajobs/config.go Implemented partitioning strategy configuration logic with case-insensitive handling
go.work.sum Updated dependency checksums

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (2)
kafkajobs/opts.go (1)

117-123: Public enum added — consider documenting and aligning casing with schema.

Add a short doc comment on PartitioningStrategy and constants. Also, schema uses "Manual"/"Uniform" while code constants are lower-case; case-insensitive handling exists downstream, but consider canonicalizing to a single representation across docs/schema for consistency.

kafkajobs/config.go (1)

218-229: Manual partitioner selection correctly fixes the bug; add small safety/UX tweaks.

  • Optional: explicitly set the uniform partitioner when chosen to guard against upstream default changes.
  • Recommend logging the selected partitioning strategy at INFO/DEBUG to ease support.
  • Heads-up: with Manual, franz-go requires Record.Partition to be set; producing without it will error. Ensure Jobs sets partition when strategy=manual, or document this clearly.

Apply if you prefer explicit uniform:

       switch PartitioningStrategy(strategy) {
       case PartitionManual:
         opts = append(opts, kgo.RecordPartitioner(kgo.ManualPartitioner()))
       case PartitionUniform:
-        // already used by default
+        // be explicit to avoid surprises if franz-go defaults ever change
+        opts = append(opts, kgo.RecordPartitioner(kgo.UniformBytesPartitioner()))
       default:
         return nil, errors.Errorf("unknown partitioning strategy: %s", c.ProducerOpts.PartitioningStrategy)
       }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7f6ce1e and 23aeaba.

⛔ Files ignored due to path filters (1)
  • go.work.sum is excluded by !**/*.sum
📒 Files selected for processing (3)
  • kafkajobs/config.go (2 hunks)
  • kafkajobs/opts.go (1 hunks)
  • schema.json (8 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
kafkajobs/config.go (1)
kafkajobs/opts.go (4)
  • ProducerOpts (106-115)
  • PartitioningStrategy (117-117)
  • PartitionManual (120-120)
  • PartitionUniform (121-121)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Kafka durability plugin (Go stable, PHP 8.4, OS ubuntu-latest)
  • GitHub Check: Kafka plugin (Go stable, PHP 8.4, OS ubuntu-latest)
🔇 Additional comments (3)
kafkajobs/opts.go (1)

106-115: LGTM: adds partitioning_strategy to ProducerOpts.

Field wiring and tags look correct.

kafkajobs/config.go (1)

9-9: Import for strings — OK.

schema.json (1)

239-239: SASL enum alignment — OK.

Values match the implementation.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (2)
schema.json (2)

39-50: Enum casing mismatch vs. case-insensitive runtime; accept both casings.

Runtime normalizes input to lowercase, but the schema only allows TitleCase. Expand enum to include lowercase variants to prevent valid configs from being rejected.

   "partitioning_strategy": {
     "description": "The partitioning strategy to use for produced records.",
     "type": "string",
-    "enum": [
-      "Manual",
-      "Uniform",
-      "RoundRobin",
-      "LeastBackup",
-      "Sticky"
-    ],
+    "enum": [
+      "Manual", "Uniform", "RoundRobin", "LeastBackup", "Sticky",
+      "manual", "uniform", "roundrobin", "leastbackup", "sticky"
+    ],
     "default": "Uniform"
   },

201-202: TLS schema blocks Root CA–only setups; align with code’s enableTLS().

Code enables TLS when (key && cert) OR root_ca is provided. The schema currently requires key+cert and will reject valid root_ca-only configs. Switch to anyOf.

-  "required": ["key", "cert"]
+  "anyOf": [
+    { "required": ["key", "cert"] },
+    { "required": ["root_ca"] }
+  ]
🧹 Nitpick comments (1)
kafkajobs/opts.go (1)

117-126: Make parsing case-insensitive at the type level to centralize validation.

Implement encoding.TextUnmarshaler on PartitioningStrategy so mapstructure/json decode normalizes values. This removes the need for ad-hoc lowercasing in config.go.

Example (additional code outside this hunk):

// Optional: centralize normalization
func (p *PartitioningStrategy) UnmarshalText(b []byte) error {
	switch strings.ToLower(string(b)) {
	case "manual":
		*p = PartitionManual
	case "uniform", "":
		*p = PartitionUniform
	case "roundrobin":
		*p = PartitionRoundRobin
	case "leastbackup":
		*p = PartitionLeastBackup
	case "sticky":
		*p = PartitionSticky
	default:
		return fmt.Errorf("unknown partitioning strategy: %s", b)
	}
	return nil
}
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 23aeaba and 7953150.

📒 Files selected for processing (3)
  • kafkajobs/config.go (2 hunks)
  • kafkajobs/opts.go (1 hunks)
  • schema.json (8 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
kafkajobs/config.go (1)
kafkajobs/opts.go (7)
  • ProducerOpts (106-115)
  • PartitioningStrategy (117-117)
  • PartitionManual (120-120)
  • PartitionUniform (121-121)
  • PartitionRoundRobin (122-122)
  • PartitionLeastBackup (123-123)
  • PartitionSticky (124-124)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Kafka durability plugin (Go stable, PHP 8.4, OS ubuntu-latest)
  • GitHub Check: Kafka plugin (Go stable, PHP 8.4, OS ubuntu-latest)
🔇 Additional comments (2)
kafkajobs/opts.go (1)

106-115: Public API extension looks good.

Field and tags for PartitioningStrategy are consistent with the schema location and naming.

kafkajobs/config.go (1)

218-235: Bug: lowercasing then switching on TitleCase constants makes all cases fall through to error.

You convert to lowercase, then compare against constants with TitleCase values; none will ever match, so any non-empty strategy returns “unknown partitioning strategy”. Fix by switching on the lowercased string literals (or remove lowercasing and compare against constants).

-        if c.ProducerOpts.PartitioningStrategy != "" {
-            // lowercase to prevent user errors, like Manual vs manual
-            strategy := strings.ToLower(string(c.ProducerOpts.PartitioningStrategy))
-            switch PartitioningStrategy(strategy) {
-            case PartitionManual:
-                opts = append(opts, kgo.RecordPartitioner(kgo.ManualPartitioner()))
-            case PartitionUniform:
-                // already used by default
-            case PartitionRoundRobin:
-                opts = append(opts, kgo.RecordPartitioner(kgo.RoundRobinPartitioner()))
-            case PartitionLeastBackup:
-                opts = append(opts, kgo.RecordPartitioner(kgo.LeastBackupPartitioner()))
-            case PartitionSticky:
-                opts = append(opts, kgo.RecordPartitioner(kgo.StickyPartitioner()))
-            default:
-                return nil, errors.Errorf("unknown partitioning strategy: %s", c.ProducerOpts.PartitioningStrategy)
-            }
-        }
+        if s := strings.ToLower(string(c.ProducerOpts.PartitioningStrategy)); s != "" {
+            switch s {
+            case "manual":
+                opts = append(opts, kgo.RecordPartitioner(kgo.ManualPartitioner()))
+            case "uniform":
+                // default behavior; no option needed
+            case "roundrobin":
+                opts = append(opts, kgo.RecordPartitioner(kgo.RoundRobinPartitioner()))
+            case "leastbackup":
+                opts = append(opts, kgo.RecordPartitioner(kgo.LeastBackupPartitioner()))
+            case "sticky":
+                opts = append(opts, kgo.RecordPartitioner(kgo.StickyPartitioner()))
+            default:
+                return nil, errors.Errorf("unknown partitioning strategy: %s", c.ProducerOpts.PartitioningStrategy)
+            }
+        }

Likely an incorrect or invalid review comment.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (1)
schema.json (1)

201-204: TLS schema now matches runtime (key+cert OR root_ca).
This addresses the earlier review note about blocking root-CA–only configs.

🧹 Nitpick comments (2)
schema.json (2)

39-50: New partitioning_strategy option looks good; clarify casing in the description.
If runtime parsing is case-sensitive, make that explicit to avoid user confusion. If it’s case-insensitive, align the schema accordingly.

Apply one of the following:

Option A — document case sensitivity (safe regardless of runtime behavior):

-                  "description": "The partitioning strategy to use for produced records.",
+                  "description": "The partitioning strategy to use for produced records. Values are case-sensitive.",

Option B — if runtime accepts case-insensitive values, broaden the enum:

-                  "enum": [
-                    "Manual",
-                    "Uniform",
-                    "RoundRobin",
-                    "LeastBackup",
-                    "Sticky"
-                  ],
+                  "enum": [
+                    "Manual","Uniform","RoundRobin","LeastBackup","Sticky",
+                    "manual","uniform","roundrobin","leastbackup","sticky"
+                  ],

248-248: Extend SASL enum with OAUTHBEARER
franz-go v1.19.5 supports SASL OAUTHBEARER (pkg/sasl/oauth); if you intend to enable it, import and map the OAuth mechanism in your Go code and add "oauthbearer" (matching your casing) to the schema.json enum.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 7953150 and cfaae70.

📒 Files selected for processing (2)
  • kafkajobs/config.go (1 hunks)
  • schema.json (8 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • kafkajobs/config.go
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Kafka durability plugin (Go stable, PHP 8.4, OS ubuntu-latest)
  • GitHub Check: Kafka plugin (Go stable, PHP 8.4, OS ubuntu-latest)
🔇 Additional comments (7)
schema.json (7)

9-9: LGTM: keep driver required at pipeline level.
Matches existing config expectations.


14-14: LGTM: constrain driver enum to "kafka".
Prevents misconfiguration.


56-56: LGTM: required_acks enum normalization.
Consistent with existing option names and default.


70-70: LGTM: compression_codec enum.
Clear, explicit set; leaving “no compression” as absence is fine.


85-85: LGTM: group_options requires group_id.
Matches the doc string that other group options depend on it.


174-174: LGTM: brokers examples updated.
Helpful, keeps examples realistic.


217-217: LGTM: Offset requires type.
Prevents ambiguous offset objects.

Signed-off-by: Valery Piashchynski <[email protected]>
Signed-off-by: Valery Piashchynski <[email protected]>
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
go.mod (1)

20-20: Verified gRPC/protobuf alignment
The genproto pseudo-version v0.0.0-20250826171959-ef028d996bc1 depends on google.golang.org/protobuf v1.36.8, matching your pinned protobuf version and the resolved gRPC modules. Consider pinning to a stable genproto release for better reproducibility.

tests/go.mod (1)

63-63: Pre-release dependency (golang/mock v1.7.0-rc.1).

RC versions can be volatile. Prefer a stable tag unless you need RC fixes.

-	github.com/golang/mock v1.7.0-rc.1 // indirect
+	// Prefer a stable release unless RC is required
+	github.com/golang/mock v1.7.0 // indirect

If v1.7.0 is not viable, consider the latest stable 1.6.x that satisfies your needs.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between cfaae70 and 494e54a.

⛔ Files ignored due to path filters (3)
  • go.sum is excluded by !**/*.sum
  • go.work.sum is excluded by !**/*.sum
  • tests/go.sum is excluded by !**/*.sum
📒 Files selected for processing (2)
  • go.mod (1 hunks)
  • tests/go.mod (4 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Kafka plugin (Go stable, PHP 8.4, OS ubuntu-latest)
  • GitHub Check: Kafka durability plugin (Go stable, PHP 8.4, OS ubuntu-latest)
🔇 Additional comments (7)
go.mod (3)

15-18: OTel 1.38.x upgrades are consistent.

Core, sdk, trace, and metric versions align at 1.38.0. No cross-version drift detected in root module.

Also applies to: 45-45


8-8: AWS SDK v2 patch bumps look safe.

All AWS leaf modules are bumped in lockstep; no mixed minor versions observed.

Also applies to: 24-35, 30-35


3-5: CI already installs Go ≥1.21 (actions/setup-go@v5 with go-version-file/go-version/matrix), so the Go 1.25 toolchain directive is supported—no CI changes needed. Ensure local dev environments use Go 1.25+.

tests/go.mod (4)

20-20: OTel/test stack aligns with root (1.38.0 + otelhttp 0.63.0).

Good consistency between root and tests; reduces surprise in integration runs.

Also applies to: 111-121


32-37: AWS SDK v2 patches mirrored in tests module.

Mirrors root versions; avoids test-only drift. LGTM.

Also applies to: 39-45


24-24: Testify patch bump.

Non-breaking; fine to proceed.


133-135: genproto pseudo-versions in tests mirror root — double-check lockstep.

Matching the root is good; still advisable to validate resolved graph is single-version to avoid subtle ABI mismatches.

You can reuse the genproto/protobuf verification script from the root comment (it checks both modules).

@rustatian rustatian merged commit c7e2e03 into master Aug 31, 2025
9 checks passed
@rustatian rustatian deleted the feature/partition-strategy branch August 31, 2025 09:39
@codecov
Copy link

codecov bot commented Aug 31, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 0.00%. Comparing base (7f6ce1e) to head (494e54a).
⚠️ Report is 6 commits behind head on master.

Additional details and impacted files
@@      Coverage Diff      @@
##   master   #520   +/-   ##
=============================
=============================

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[🐛 BUG]: Specifying a partition for a Kafka job has no effect

2 participants