Skip to content

CORE-14251 Client Monitoring: Implement a cluster-wide endpoint for client connections#28137

Merged
michael-redpanda merged 7 commits intoredpanda-data:devfrom
pgellert:cm/cluster-wide-view
Oct 23, 2025
Merged

CORE-14251 Client Monitoring: Implement a cluster-wide endpoint for client connections#28137
michael-redpanda merged 7 commits intoredpanda-data:devfrom
pgellert:cm/cluster-wide-view

Conversation

@pgellert
Copy link
Copy Markdown
Contributor

This endpoint is to provide a cluster-wide aggregated view of the
per-broker ListKafkaConnection endpoint. This is to simplify rpk's logic
for surfacing a cluster-wide view of "top" kafka connections.

See the commits for implementation details.

Fixes https://redpandadata.atlassian.net/browse/CORE-14251

Backports Required

  • none - not a bug fix
  • none - this is a backport
  • none - issue does not exist in previous branches
  • none - papercut/not impactful enough to backport
  • v25.2.x
  • v25.1.x
  • v24.3.x

Release Notes

  • none

@pgellert pgellert added this to the v25.3.1-rc1 milestone Oct 21, 2025
@pgellert pgellert requested a review from a team October 21, 2025 17:24
@pgellert pgellert self-assigned this Oct 21, 2025
@pgellert pgellert requested review from Copilot and michael-redpanda and removed request for a team October 21, 2025 17:24
@pgellert pgellert requested review from BenPope, kbatuigas and rockwotj and removed request for michael-redpanda October 21, 2025 17:24
Copy link
Copy Markdown
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 implements a cluster-wide endpoint for listing Kafka connections by introducing a new ClusterService that aggregates connection data from all brokers. The implementation refactors existing connection gathering logic into a reusable service (kafka_connections_service) and adds new cluster-level protobuf definitions.

Key Changes

  • Introduced kafka_connections_service to centralize connection gathering logic previously embedded in broker_service_impl
  • Added new cluster_service_impl with ListKafkaConnections endpoint for cluster-wide aggregation
  • Refactored protobuf package structure to use namespaces (broker_service, cluster_service) for better organization

Reviewed Changes

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

Show a summary per file
File Description
proto/redpanda/core/admin/v2/cluster.proto New protobuf definition for ClusterService with ListKafkaConnections RPC
proto/redpanda/core/admin/v2/broker.proto Updated package namespace and fixed comment example
proto/redpanda/core/admin/v2/BUILD Restructured build to separate kafka_connections as independent proto library
src/v/redpanda/admin/kafka_connections_service.{h,cc} New service extracting connection gathering logic from broker_service
src/v/redpanda/admin/services/cluster.{h,cc} New cluster service implementing cluster-wide connection aggregation
src/v/redpanda/admin/services/broker.cc Refactored to delegate connection gathering to kafka_connections_service
src/v/redpanda/admin/services/utils.{h,cc} Extracted shared license checking logic
src/v/redpanda/application.{h,cc} Wired up kafka_connections_service and cluster_service
tests/rptest/tests/list_kafka_connections_test.py Added test for cluster-wide endpoint
Generated Python stubs Auto-generated protobuf and connect client code

syntax = "proto3";

package redpanda.core.admin.v2;
package redpanda.core.admin.v2.broker_service;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This should match the directory and version number is supposed to go last.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I opted to back out of the namespacing and use an optional node_id field on the request instead, as discussed.

}
}

message ListKafkaConnectionsRequest {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@rockwotj should all messages also have an overall comment? I realize this one is probably self explanatory, but just asking

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yeah, we want all protobuf to have documentation even if it seems self-explanatory (because it's probably not for users).

Please follow the guide Kat put together: https://redpandadata.slack.com/archives/C09C27KTCPK/p1759766098707339

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I've added a comment here now as part of the first commit.

@pgellert pgellert force-pushed the cm/cluster-wide-view branch from ffef9fe to db607a0 Compare October 22, 2025 11:33
@pgellert pgellert requested a review from a team as a code owner October 22, 2025 11:33
@pgellert pgellert force-pushed the cm/cluster-wide-view branch from db607a0 to 3fc8095 Compare October 22, 2025 11:36
@pgellert
Copy link
Copy Markdown
Contributor Author

force-push:

  • first: address code review feedback
    • back out of the complexity of namespacing the BrokerService + ClusterService, and instead, have a single ClusterService endpoint with an optional int32 node_id parameter
    • add missing doc comment
    • fix test name typo
  • second: rebase to dev to fix merge conflict

@pgellert pgellert requested a review from Copilot October 22, 2025 11:43
Copy link
Copy Markdown
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

Copilot reviewed 28 out of 28 changed files in this pull request and generated 2 comments.

@pgellert pgellert force-pushed the cm/cluster-wide-view branch from 3fc8095 to e16d32e Compare October 22, 2025 11:48
@pgellert
Copy link
Copy Markdown
Contributor Author

force-push: address copilot code review

@pgellert pgellert requested a review from Copilot October 22, 2025 11:49
Copy link
Copy Markdown
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

Copilot reviewed 29 out of 29 changed files in this pull request and generated no new comments.

Comment on lines +121 to +125
auto global_collector = ss::make_shared<unordered_collector>(limit);

auto make_local_collector = [limit](size_t accumulated_count) {
return ss::make_shared<unordered_collector>(
limit - accumulated_count);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

It's not obvious to me why these are shared_ptr; is it to avoid taking/capturing references in a coroutine?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

As discussed, it's to be able to pass around a pointer to a polymorphic connection_collector. I've replaced the ss::make_shared with a std::unique_ptr though as it doesn't need to be shared.

// If specified, the results are returned only for the broker with the
// specified node ID. If set to -1, the broker handling the RPC request
// returns information about itself.
optional int32 node_id = 1;
Copy link
Copy Markdown
Member

@BenPope BenPope Oct 22, 2025

Choose a reason for hiding this comment

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

I prefer this optional as unification of broker/cluster as to what was here previously.

Since I see scope for this being a common pattern (map brokers, reduce) pattern, should there be something even more explicit and used by other endpoints? @rockwotj

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

should there be something even more explicit

What do you have in mind in terms of something more explicit?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I would be up for making the requests use optional instead of -1, however here optional unset means that we want all brokers. TBH, I would rather remove this, rpk and console will always want a cluster wide view and I think we can optimize the filter to target specific nodes later on.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't expect to have many broker service endpoints, we should strongly be pushing for cluster wide endpoints.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

should there be something even more explicit

What do you have in mind in terms of something more explicit?

I'm not really familiar with best practice here, but to me, sentinel values like -1, even with documentation, are just awkward. Perhaps some kind of "node_list OR cluster".

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I've moved to removing the node_id field now. As discussed with @rockwotj, and as the TODO comment I added states, we can optimize later by parsing the filter string and not querying other brokers if we safely determine that that is unnecessary. We can rely on ctx.is_proxied() to implement the scatter-gather logic.

Comment on lines +60 to +72
auto other_node_clients
= _proxy_client
.make_clients_for_other_nodes<proto::admin::cluster_service_client>();
for (auto& [node_id, client] : other_node_clients) {
auto client_resp = co_await client.list_kafka_connections(
ctx, make_broker_req(node_id));

co_await add_to_response(std::move(client_resp));
}

auto local_resp = co_await _kafka_connections_service.local()
.list_kafka_connections_local(make_broker_req(-1));
co_await add_to_response(std::move(local_resp));
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

If there is an unordered limit, does it make sense to gather locally first?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

We would still need to send a request to other nodes to collect the total count, but we could optimize by reducing the limit sent to other nodes. I haven't implemented that yet but we can keep that in mind as a follow up optimization.


namespace admin {

struct connection_collector {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Can't these go into the implementation file instead of the header?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes, I've reworked this now

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

extract_unordered() may be unordered even for the unordered_collector

You mean ordered_collector?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes, updated

// If specified, the results are returned only for the broker with the
// specified node ID. If set to -1, the broker handling the RPC request
// returns information about itself.
optional int32 node_id = 1;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I would be up for making the requests use optional instead of -1, however here optional unset means that we want all brokers. TBH, I would rather remove this, rpk and console will always want a cluster wide view and I think we can optimize the filter to target specific nodes later on.

// If specified, the results are returned only for the broker with the
// specified node ID. If set to -1, the broker handling the RPC request
// returns information about itself.
optional int32 node_id = 1;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't expect to have many broker service endpoints, we should strongly be pushing for cluster wide endpoints.

@vbotbuildovich
Copy link
Copy Markdown
Collaborator

vbotbuildovich commented Oct 22, 2025

CI test results

test results on build#74682
test_class test_method test_arguments test_kind job_url test_status passed reason test_history
ShadowLinkBasicTests test_rapid_shadow_link_toggling null integration https://buildkite.com/redpanda/redpanda/builds/74682#019a0be2-f949-4e10-950a-3b9a1052e624 FLAKY 17/21 upstream reliability is '94.65737514518003'. current run reliability is '80.95238095238095'. drift is 13.70499 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkBasicTests&test_method=test_rapid_shadow_link_toggling
PartitionMovementTest test_empty {"num_to_upgrade": 0} integration https://buildkite.com/redpanda/redpanda/builds/74682#019a0be2-f94c-4916-ac12-a287f1d9365e FLAKY 17/21 upstream reliability is '100.0'. current run reliability is '80.95238095238095'. drift is 19.04762 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=PartitionMovementTest&test_method=test_empty
ShadowLinkingRandomOpsTest test_node_operations {"failures": false} integration https://buildkite.com/redpanda/redpanda/builds/74682#019a0be2-f947-4214-9882-df5f2c8a9ec3 FLAKY 10/21 upstream reliability is '35.66433566433567'. current run reliability is '47.61904761904761'. drift is -11.95471 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
ShadowLinkingRandomOpsTest test_node_operations {"failures": true} integration https://buildkite.com/redpanda/redpanda/builds/74682#019a0be2-f948-47ed-821c-38a6a8771802 FLAKY 4/21 upstream reliability is '54.385964912280706'. current run reliability is '19.047619047619047'. drift is 35.33835 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
ShadowLinkingRandomOpsTest test_node_operations {"failures": true} integration https://buildkite.com/redpanda/redpanda/builds/74682#019a0be6-3fd6-45ee-b398-65bcc5b8e383 FLAKY 6/21 upstream reliability is '54.385964912280706'. current run reliability is '28.57142857142857'. drift is 25.81454 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
test results on build#74704
test_class test_method test_arguments test_kind job_url test_status passed reason test_history
PartitionMovementTest test_static {"num_to_upgrade": 0} integration https://buildkite.com/redpanda/redpanda/builds/74704#019a0d1e-109d-4de9-b1a9-478bbf840d3f FLAKY 18/21 upstream reliability is '99.06542056074767'. current run reliability is '85.71428571428571'. drift is 13.35113 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=PartitionMovementTest&test_method=test_static
RedpandaNodeOperationsSmokeTest test_node_ops_smoke_test {"cloud_storage_type": 1, "mixed_versions": false} integration https://buildkite.com/redpanda/redpanda/builds/74704#019a0d1d-014d-456b-9684-24758277f638 FAIL 0/1 The test has failed across all retries https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=RedpandaNodeOperationsSmokeTest&test_method=test_node_ops_smoke_test
ShadowLinkingRandomOpsTest test_node_operations {"failures": false} integration https://buildkite.com/redpanda/redpanda/builds/74704#019a0d1d-014d-456b-9684-24758277f638 FLAKY 9/21 upstream reliability is '37.301587301587304'. current run reliability is '42.857142857142854'. drift is -5.55556 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
ShadowLinkingRandomOpsTest test_node_operations {"failures": false} integration https://buildkite.com/redpanda/redpanda/builds/74704#019a0d1e-109f-4b2b-90c6-591c49ca6ee2 FAIL 0/21 The test has failed across all retries https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
ShadowLinkingRandomOpsTest test_node_operations {"failures": true} integration https://buildkite.com/redpanda/redpanda/builds/74704#019a0d1d-0145-4f81-94c0-2df6f3ce2417 FAIL 0/21 The test has failed across all retries https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
ShadowLinkingRandomOpsTest test_node_operations {"failures": true} integration https://buildkite.com/redpanda/redpanda/builds/74704#019a0d1e-1096-49da-abc1-2db8802d5ac4 FLAKY 1/21 upstream reliability is '33.5548172757475'. current run reliability is '4.761904761904762'. drift is 28.79291 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
test results on build#74778
test_class test_method test_arguments test_kind job_url test_status passed reason test_history
ShadowLinkingRandomOpsTest test_node_operations {"failures": false} integration https://buildkite.com/redpanda/redpanda/builds/74778#019a10b2-02d2-414c-91e9-7d1d847b822d FLAKY 3/21 upstream reliability is '36.23804463336875'. current run reliability is '14.285714285714285'. drift is 21.95233 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
ShadowLinkingRandomOpsTest test_node_operations {"failures": true} integration https://buildkite.com/redpanda/redpanda/builds/74778#019a10b2-02cd-40bc-a635-d149b144b6b9 FAIL 0/1 https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations
ShadowLinkingRandomOpsTest test_node_operations {"failures": true} integration https://buildkite.com/redpanda/redpanda/builds/74778#019a10b2-02d2-414c-91e9-7d1d847b822d FLAKY 3/21 upstream reliability is '31.11111111111111'. current run reliability is '14.285714285714285'. drift is 16.8254 and the allowed drift is set to 50. The test should PASS https://redpanda.metabaseapp.com/dashboard/87-tests?tab=142-dt-individual-test-history&test_class=ShadowLinkingRandomOpsTest&test_method=test_node_operations

@pgellert
Copy link
Copy Markdown
Contributor Author

force-push: some more minor improvements based on feedback + self-review

@pgellert pgellert requested review from BenPope and rockwotj October 22, 2025 17:40
rockwotj
rockwotj previously approved these changes Oct 22, 2025
wait_until(
valid_response,
timeout_sec=15,
timeout_sec=30,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

little concerning we couldn't do all this within 15 seconds...

BenPope
BenPope previously approved these changes Oct 22, 2025
Copy link
Copy Markdown
Member

@BenPope BenPope left a comment

Choose a reason for hiding this comment

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

Very nice. No need to address the nitpick, it was more a PSA.

Comment on lines +63 to +64
auto insert_range = std::ranges::subrange(
conns.begin(), conns.begin() + to_add_count);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nitpick: As of #28125 you can do:

Suggested change
auto insert_range = std::ranges::subrange(
conns.begin(), conns.begin() + to_add_count);
auto insert_range = conns | std::views::take(to_add_count);

@vbotbuildovich
Copy link
Copy Markdown
Collaborator

vbotbuildovich commented Oct 22, 2025

Retry command for Build#74704

please wait until all jobs are finished before running the slash command

/ci-repeat 1
tests/rptest/tests/random_node_operations_smoke_test.py::RedpandaNodeOperationsSmokeTest.test_node_ops_smoke_test@{"cloud_storage_type":1,"mixed_versions":false}
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":true}
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":false}

@BenPope
Copy link
Copy Markdown
Member

BenPope commented Oct 22, 2025

/ci-repeat 1
tests/rptest/tests/random_node_operations_smoke_test.py::RedpandaNodeOperationsSmokeTest.test_node_ops_smoke_test@{"cloud_storage_type":1,"mixed_versions":false}
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":true}
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":false}

- fix request_count_total field name in doc comment
- add doc comment to request-response messages
- extract the kafka_connections proto into a separate library for easier
  sharing
To encapsulate the logic of konnection gathering.

The code is only moved, the only changes are extracting a
`get_effective_limit` function for later reuse, and some minor fixups to
make the code compile (e.g.; type name adjustments due to moving across
namespaces).
Rename extract --> extract_unordered()
Rename ordered_collector::extract_sorted --> extract()
Define unordered_collector::extract --> same as extract_unordered()

extract() now means extract as per the oredered'ness of the collector,
while extract_unordered() may be unordered even for the
ordered_collector.

This enabled more code reuse across the ordered and unordered paths, and
will also allow more code reuse in the cluster-level endpoint.
This is to allow using the faster `async_push_range` function.
Extract it to a utils file to allow sharing it with other admin
endpoints as well later.
Move the endpoint from the BrokerService to the ClusterService, as we
intend to make this endpoint return cluster-wide data to simplify rpk's
logic of surfacing a cluster-wide view of "top" kafka connections.

As part of this, the node_id field on the request is removed. The
endpoint is always going to return cluster-wide data, and internal
gathering is going to be implemented using `ctx.is_proxied()` in the
next comimt.

The is purely a code-shifting commit. The collection of cluster-wide
data is implemented in the next commit.
This endpoint queries all of the brokers one-by-one and uses the defined
ordering to combine the results.

The ducktape test is made multi-node now that connections are gathered
across the whole cluster. The timeout is bumped to 30s because I saw
some flakiness at the 15s timeout (~1/10 failures).
@pgellert pgellert dismissed stale reviews from BenPope and rockwotj via 743657b October 23, 2025 07:10
@pgellert pgellert force-pushed the cm/cluster-wide-view branch from 54581e6 to 743657b Compare October 23, 2025 07:10
@pgellert
Copy link
Copy Markdown
Contributor Author

force-push: rebase to dev to fix merge conflict on tests/rptest/clients/admin/proto/redpanda/core/admin/v2/shadow_link_pb2.pyi which was stale on dev earlier

@pgellert pgellert requested review from BenPope and rockwotj October 23, 2025 07:12
@pgellert pgellert enabled auto-merge October 23, 2025 07:12
@BenPope
Copy link
Copy Markdown
Member

BenPope commented Oct 23, 2025

force-push: rebase to dev to fix merge conflict on tests/rptest/clients/admin/proto/redpanda/core/admin/v2/shadow_link_pb2.pyi which was stale on dev earlier

This merge conflict seems strange to me, since the commit didn't go near it, as far as I can tell.

@pgellert
Copy link
Copy Markdown
Contributor Author

It did before. That's a generated file, and it was stale on dev because someone must have forgotten to run task rp:generate-ducktape-protos and then my old commit included some generated proto changes when I ran the generator. I guess it got updated on dev in the meantime, which is where the conflict was.

@vbotbuildovich
Copy link
Copy Markdown
Collaborator

vbotbuildovich commented Oct 23, 2025

Retry command for Build#74775

please wait until all jobs are finished before running the slash command

/ci-repeat 1
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":true}
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":false}

@pgellert
Copy link
Copy Markdown
Contributor Author

/ci-repeat 1
skip-unit
skip-redpanda-build
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":true}
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":false}

@vbotbuildovich
Copy link
Copy Markdown
Collaborator

Retry command for Build#74778

please wait until all jobs are finished before running the slash command

/ci-repeat 1
tests/rptest/tests/shadow_linking_rnot_test.py::ShadowLinkingRandomOpsTest.test_node_operations@{"failures":true}

@michael-redpanda michael-redpanda merged commit f5ac0f4 into redpanda-data:dev Oct 23, 2025
16 of 21 checks passed
@pgellert
Copy link
Copy Markdown
Contributor Author

/test-release-pipeline

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants