Skip to content

HDDS-14771. Split server-side load testers from freon#9874

Open
adoroszlai wants to merge 3 commits intoapache:masterfrom
adoroszlai:HDDS-14771
Open

HDDS-14771. Split server-side load testers from freon#9874
adoroszlai wants to merge 3 commits intoapache:masterfrom
adoroszlai:HDDS-14771

Conversation

@adoroszlai
Copy link
Contributor

@adoroszlai adoroszlai commented Mar 6, 2026

What changes were proposed in this pull request?

Freon is a multi-purpose utility for load-testing Ozone. Most subcommands exercise public API, but some use server-side code (e.g. to simulate some component). Thus ozone-freon has dependency on multiple Ozone server components.

In HDDS-14439 we are moving to Java 17 for server components, but keeping Java 8 for client components. The goal of this change is to make Freon a client component, thereby keep it usable with Java 8 in the future. It eliminates Freon's dependency on server components by splitting some of its generators into a new module ozone-vapor, making Freon a pure client-side tool.

We cannot use the top-level command ozone freon for both sets of commands, because subcommands share the same classpath. Therefore we also have to introduce a new top-level command (ozone vapor). These subcommands are rather obscure, so I think only mentioning this change in the release notes is OK.

Package name is kept to reduce change.

https://issues.apache.org/jira/browse/HDDS-14771

How was this patch tested?

$ ozone vapor --help
Usage: ozone vapor [-hV] [--server] [--verbose] [-conf=<configurationPath>]
                   [-D=<String=String>]... [COMMAND]
Load generator using Ozone server components
...
Commands:
  cgdn                                 Offline container metadata generator for
                                         Ozone Datanodes.
  cgom                                 Offline container metadata generator for
                                         Ozone Manager
  cgscm                                Offline container metadata generator for
                                         Storage Container Manager
  cmdw, chunk-manager-disk-write       Write chunks as fast as possible.
  cr, container-replicator             Replicate / download closed containers.
  falg, follower-append-log-generator  Generate append log entries to a
                                         follower server
  lalg, leader-append-log-generator    Generate append log entries to a leader
                                         server
  scm-throughput-benchmark, stb        Benchmark for scm throughput.
  simulate-datanode                    Simulate one or many datanodes and
                                         register them to SCM.This is used to
                                         stress test SCM handling a massive
                                         cluster.
  strmg, streaming-generator           Create directory structure and stream
                                         them multiple times.

Existing tests cover Freon.

https://github.com/adoroszlai/ozone/actions/runs/22756767625

@adoroszlai adoroszlai self-assigned this Mar 6, 2026
@adoroszlai adoroszlai added the build Pull request that modifies the build process label Mar 6, 2026
@adoroszlai adoroszlai marked this pull request as ready for review March 6, 2026 10:14
@yandrey321
Copy link

I think we should consider freon as a server component since its a part of Ozone deployment.

IMHO the client components should be built using separate target and be published as a separate set of artifacts that can be used by different products.

Copy link

@yandrey321 yandrey321 left a comment

Choose a reason for hiding this comment

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

what is the intended Freon usage outside of Ozone deployment?

@adoroszlai
Copy link
Contributor Author

client components should be built using separate target and be published as a separate set of artifacts that can be used by different products

They are separate artifacts, which other products can depend on.

Client components can also be used from "edge" nodes, where only client-side artifacts are present.

Parts of Ozone CLI (ozone sh, ozone fs, ozone admin, etc.) are also considered client components.

what is the intended Freon usage outside of Ozone deployment?

Freon is used in tests for at least 3 reasons:

  • exercise code paths currently only available via Java API, not via regular CLI (this is the hsync scenario I ran into)
  • as a shortcut for multiple statements (create volume, create bucket, create key in one step)
  • exercise Freon itself

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

Labels

build Pull request that modifies the build process

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants