Skip to content

HDDS-12599. Create an ozone debug CLI command to list all the containers based on final state #8282

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Apr 28, 2025

Conversation

sreejasahithi
Copy link
Contributor

@sreejasahithi sreejasahithi commented Apr 14, 2025

What changes were proposed in this pull request?

This update introduces a new command to list containers filtered by their final state.
The command retrieves and displays the following details for each container in the specified state:

  • Datanode ID
  • BCSID
  • Timestamp – The most recent timestamp associated with the container state
  • Error Message (if present)
  • index value

The output is written to stdout , unless explicitly redirected to a file.

The command options used are:

List containers by state:
ozone debug log container --db=<path to db> list --state=<state>

List containers by state with a specified row limit:
ozone debug log container --db=<path to db> list --state=<state> --length=<limit>

List all containers by state, overriding the row limit:
ozone debug log container --db=<path to db> list --state=<state> --all

Sample output:

Timestamp                 | Datanode ID  | Container ID | BCSID    | Message       | Index Value 
---------------------------------------------------------------------------------------------------------------
2025-01-22 19:51:25,074   | 12           | 149428       | 6776609  | No error      | 0           
2025-01-22 16:50:11,126   | 7            | 239569       | 9876976  | No error      | 0           
2025-01-22 13:55:53,991   | 19           | 252928       | 11174252 | No error      | 0           
2025-01-22 19:48:31,740   | 4            | 344195       | 178135   | No error      | 0           
2025-01-22 19:24:25,628   | 13           | 423950       | 238861   | No error      | 0           
2025-01-22 18:17:27,816   | 1            | 498335       | 437639   | No error      | 0           
2025-01-22 15:15:32,499   | 10           | 528250       | 479360   | No error      | 0           
2025-01-22 13:58:56,467   | 17           | 611397       | 628756   | No error      | 0           
2025-01-22 20:59:16,470   | 3            | 615387       | 625508   | No error      | 0           
2025-01-22 15:15:13,765   | 5            | 621623       | 626186   | No error      | 0           
2025-01-22 15:15:30,965   | 9            | 622324       | 636295   | No error      | 0

What is the link to the Apache JIRA

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

How was this patch tested?

https://github.com/sreejasahithi/ozone/actions/runs/14443815058

@sreejasahithi sreejasahithi marked this pull request as ready for review April 14, 2025 12:10
Comment on lines 31 to 32
name = "list_containers",
description = "list containers"
Copy link
Contributor

Choose a reason for hiding this comment

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

Let's use kebab case for our subcommands (list-containers) and add a more robust description here. This description becomes the help message for the user.

@sreejasahithi sreejasahithi requested a review from errose28 April 15, 2025 06:10
Copy link
Contributor

@aryangupta1998 aryangupta1998 left a comment

Choose a reason for hiding this comment

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

Thanks for the patch @sreejasahithi, can you please attach a sample output of your command as well?
Also, I was thinking, should we introduce a limit option to the command to restrict the number of rows we parse?
Right now, it reads the entire table, which could result in very large output files if the dataset is huge.
Adding a limit could help with performance and make the output more manageable.

aryangupta1998
aryangupta1998 previously approved these changes Apr 16, 2025
Copy link
Contributor

@aryangupta1998 aryangupta1998 left a comment

Choose a reason for hiding this comment

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

Thanks for addressing the comments, @sreejasahithi! LGTM!

Copy link
Contributor

@adoroszlai adoroszlai left a comment

Choose a reason for hiding this comment

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

Thanks @sreejasahithi for the patch.

*/

@CommandLine.Command(
name = "list-containers",
Copy link
Contributor

Choose a reason for hiding this comment

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

ozone debug container list-containers seems redundant, how about ozone debug container list?

Suggested change
name = "list-containers",
name = "list",

Comment on lines 50 to 52
@CommandLine.Option(names = {"--limit", "-l"},
description = "number of rows to display in the output , by default it would be 100 rows")
private Integer limit;
Copy link
Contributor

Choose a reason for hiding this comment

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

Can we use ListOptions mixin for consistency with other list commands?

@CommandLine.Mixin
private ListOptions listOptions;

OPEN, CLOSED, QUASI_CLOSED, CLOSING, DELETED, UNHEALTHY
}

@CommandLine.Option(names = {"--state", "-s"},
Copy link
Contributor

@adoroszlai adoroszlai Apr 16, 2025

Choose a reason for hiding this comment

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

Please don't add -s, since it would conflict with short option of --start (from ListOptions).

Comment on lines 54 to 56
@CommandLine.Option(names = {"--file-path", "-p"},
description = "path to the output file")
private String path;
Copy link
Contributor

Choose a reason for hiding this comment

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

How about printing to stdout and let user redirect it to file if needed? This would reduce options and simplify error handling.

Comment on lines 76 to 78
System.out.println("Error while retrieving containers with state: " + state + e.getMessage());
} catch (Exception e) {
System.out.println("Unexpected error while processing state: " + state + e.getMessage());
Copy link
Contributor

Choose a reason for hiding this comment

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

  • Error/warning messages should go to stderr (System.err).
  • Add space between state and message.
  • Do we really need different messages for SQLException and Exception?

Comment on lines 42 to 44
public enum ContainerState {
OPEN, CLOSED, QUASI_CLOSED, CLOSING, DELETED, UNHEALTHY
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we need a new enum? ozone admin container list uses HddsProtos.LifeCycleState.

*
*/

public void listContainersByState(String state, String path, Integer limit) throws SQLException {
Copy link
Contributor

Choose a reason for hiding this comment

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

Simplify this method by accepting a PrintWriter instead of a path.

}
}
} catch (SQLException e) {
LOG.error("Error while retrieving containers with state: {}", state, e);
Copy link
Contributor

Choose a reason for hiding this comment

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

Write errors to stderr, not log.

Copy link
Contributor

@adoroszlai adoroszlai left a comment

Choose a reason for hiding this comment

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

Thanks @sreejasahithi for improving the patch. Minor clarification about some of my previous comments.

Comment on lines 55 to 56
} catch (SQLException e) {
System.err.println("Error while retrieving containers with state: " + state + " " + e.getMessage());
Copy link
Contributor

Choose a reason for hiding this comment

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

  • Do we really need different messages for SQLException and Exception?

Clarification: if message is the same, separate catch is not needed either.

Suggested change
} catch (SQLException e) {
System.err.println("Error while retrieving containers with state: " + state + " " + e.getMessage());

Copy link
Contributor Author

@sreejasahithi sreejasahithi Apr 16, 2025

Choose a reason for hiding this comment

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

your right , we can just keep a generic catch.

System.err.println("Error while retrieving containers with state: " + state + " " + e.getMessage());
}
} else {
System.out.println("state not provided");
Copy link
Contributor

Choose a reason for hiding this comment

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

Clarification: this is also an error message.

Also, if state is required, I think we should add required = true to make picocli handle error if option is omitted.

https://picocli.info/#_required_options

@adoroszlai adoroszlai dismissed their stale review April 16, 2025 14:52

patch updated

@adoroszlai
Copy link
Contributor

Thanks @sreejasahithi for updating the patch, LGTM. @errose28 would you like to take another look?

@errose28
Copy link
Contributor

Thanks for working on this @sreejasahithi I have some high level comments about the CLI for this tool. Only some of them are directly related to this patch. I would recommend defining the whole plan for the CLI in a comment in HDDS-12579 so that PRs can just focus on implementation.

  • I think ozone debug container is too generic of a name. The command should indicate that it only operates on container log files.
  • I'm thinking we may want a separate subcommand for log parsing commands, including this audit log parser, and any other parsing tools we add in the future. Something like ozone debug logs or ozone debug log-parse.
    • IMO grouping log parsing commands together makes sense because they are not tied to a specific component and require logs to be extracted first.
    • I propose ozone debug logs container for this command. We can later move audit log parser to ozone debug logs audit and add subcommands for other log parsers we may add based on log type.
      • The parsing command can then just be ozone debug logs container parse.
  • The command needs an option for where to create create the DB, and how to use it for subsequent commands. I'm not following how this works in the current implementation.
  • The Properties file should be loaded automatically without the user needing to add it to the classpath. With this requirement, would it not be better to just put those constants in a regular Java class?

Also here are some best practices when adding CLIs. We should update these changes to follow these, and it would be helpful if other reviewers could also keep an eye out for these things too:

  • All CLI commands and options should be kebab case.
  • All PicoCLI description fields need to have robust usage instructions, since these are used to generate help messages.
    • For example this description needs a lot more info to tell an end user what this tool actually does.
  • All output for tools should go to stdout or stderr. Don't depend on log4j since it is a toss-up how the client side is configured across clusters and the output is often lost. It is ok for logging stack traces, but make sure that a message shows up in stderr in this case too.
  • All fatal errors need to cause the command to exit non-zero. This is usually done by propogating an exception and letting picocli filter out the stack trace and just print the resulting message and set the error code.
    • Cases like this for example will print an error, but the command will still exit 0.

Copy link
Contributor

@ashishkumar50 ashishkumar50 left a comment

Choose a reason for hiding this comment

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

Thanks for the patch @sreejasahithi, Please find the comments.
Also can you update PR details based on the fix.

try (Connection connection = getConnection();
Statement dropStmt = connection.createStatement();
Statement createStmt = connection.createStatement()) {
dropTable(DBConsts.DATANODE_CONTAINER_LOG_TABLE_NAME, dropStmt);
createStmt.execute(createTableSQL);
createDatanodeContainerIndex(createStmt);
} catch (SQLException e) {
System.err.println("Error while creating the table: " + e.getMessage());
LOG.error("Error while creating the table: {}", e.getMessage());
Copy link
Contributor

Choose a reason for hiding this comment

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

No need for LOG.error already printing in System.err

LOG.error("Error while creating the table: {}", e.getMessage());
throw e;
} catch (Exception e) {
System.err.println("Unexpected error: " + e.getMessage());
LOG.error(e.getMessage());
Copy link
Contributor

Choose a reason for hiding this comment

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

Same here no need of extra LOG.error, check in other places as well.

@Override
public Void call() throws Exception {
if (parent.getDbPath() == null) {
System.err.println("No database path provided.Please provide a valid database path.");
Copy link
Contributor

Choose a reason for hiding this comment

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

When path is not provided, can you check if the current path has db, if not throw the error to provide path.


cdd.createDatanodeContainerLogTable();
if (parent.getDbPath() == null) {
System.err.println("No database path provided.Please provide a valid database path.");
Copy link
Contributor

Choose a reason for hiding this comment

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

If path is not provided, generate db in the current path where CLI command is executed.

Copy link
Contributor

@ashishkumar50 ashishkumar50 left a comment

Choose a reason for hiding this comment

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

Thanks @sreejasahithi for updating patch, LGTM.

@adoroszlai adoroszlai added the tools Tools that helps with debugging label Apr 28, 2025
@ashishkumar50 ashishkumar50 merged commit c68308d into apache:master Apr 28, 2025
42 checks passed
Copy link
Contributor

@Tejaskriya Tejaskriya left a comment

Choose a reason for hiding this comment

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

Thanks for the contribution @sreejasahithi ,
Sorry, got to the review a bit late. I have left a few improvement suggestions below from tools POV. We can take care of it in a follow-up jira or as a part of the other jiras you are working on related to the parsing debug command.

Comment on lines +34 to +35
description = "This serves as a common entry point for all commands that parse and analyze logs," +
"regardless of their source or type and require logs to be extracted first."
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
description = "This serves as a common entry point for all commands that parse and analyze logs," +
"regardless of their source or type and require logs to be extracted first."
description = "Command to parse and analyze logs," +
"regardless of their source or type. It require logs to be extracted first."

description = "parse the container logs"
name = "parse",
description = "Parse container logs and extract key details such as datanode ID, container ID, state, " +
"BCSID, timestamp, log level, index value, and messages (if any)."
)
public class ContainerLogParser implements Callable<Void> {
Copy link
Contributor

Choose a reason for hiding this comment

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

Extending AbstractSubcommand and then replacing System.out.println or System.err.println with out() and err() respectively will be cleaner

name = "list",
description = "Finds containers from the database based on the option provided."
)
public class ListContainers implements Callable<Void> {
Copy link
Contributor

Choose a reason for hiding this comment

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

Similarly for this, extending the AbstractSubcommand will provide the helper methods for printing any message to the console.

Copy link
Contributor

Choose a reason for hiding this comment

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

It would be better to rename this to SQLDBConstants to avoid confusing it with rocksDB constants.
Also, moving this to hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/utils would make more sense.

Copy link
Contributor

Choose a reason for hiding this comment

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

If I understand correctly, all the classes under the containerlog.parser are util methods used for the debug.logs.container classes. It doesn't make sense to keep containerlog.parser in another package unrelated to debug.logs.container. (As each package here seems to be corresponding to a parent command).

I suggest moving it under the utils package in tools (like mentioned in a below comment for DBConsts). Or we can also keep it under the debug.logs.container by calling it a utils package instead of containerlog.parser

vtutrinov pushed a commit to vtutrinov/ozone that referenced this pull request May 13, 2025
aswinshakil added a commit to aswinshakil/ozone that referenced this pull request May 16, 2025
…239-container-reconciliation

Commits: 113 commits

8ceb5c3 Revert "HDDS-11232. Spare InfoBucket RPC call for the FileSystem#getFileStatus calls for the general case. (apache#6988)" (apache#8358)
8ecf4a8 HDDS-12993. Use DatanodeID in ReconNodeManager. (apache#8456)
3e09a11 HDDS-13024. HTTP connect to 0.0.0.0 failed (apache#8439)
c3cb14f HDDS-12914. Bump awssdk to 2.31.40, test ResumableFileDownload (apache#8455)
c6b47e9 HDDS-4677. Document Ozone Ports and Connection End Points (apache#8226)
ae0d757 HDDS-13044. Remove DatanodeDetails#getUuid usages from hdds-common/client/container-service (apache#8462)
2bf3f16 HDDS-12568. Implement MiniOzoneCluster.Service for Recon (apache#8452)
e59d251 HDDS-13046. Add .vscode to .gitignore (apache#8461)
50e6d61 HDDS-13022. Split up exclusive size tracking for key and directory cleanup in SnapshotInfo (apache#8433)
6db647d HDDS-12966. DBDefinitionFactory should not throw InvalidArnException (apache#8454)
fe2875c HDDS-12948. [Snapshot] Increase `ozone.om.fs.snapshot.max.limit` default value to 10k (apache#8376)
215bdc2 HDDS-11904. Fix HealthyPipelineSafeModeRule logic. (apache#8386)
dba7557 HDDS-12989. Throw CodecException for the Codec byte[] methods (apache#8444)
d9c73f0 HDDS-11298. Support owner field in the S3 listBuckets request (apache#8315)
7a5129d HDDS-12810. Check and reserve space atomically in VolumeChoosingPolicy (apache#8360)
d51ccf7 HDDS-13016. Add a getAllNodeCount() method to NodeManager. (apache#8445)
8b27fb9 HDDS-12299. Merge OzoneAclConfig into OmConfig (apache#8383)
96f4f79 HDDS-12501. Remove OMKeyInfo from SST files in backup directory. (apache#8214)
8adb500 HDDS-13021. Make callId unique for each request in AbstractKeyDeletingService (apache#8432)
faeadd6 HDDS-13000. [Snapshot] listSnapshotDiffJobs throws NPE. (apache#8418)
7c957cc HDDS-11954. List keys command gets wrong info from BasicOmKeyInfo (apache#8401)
0697383 HDDS-13027. Workaround for GitHub connection failures (apache#8443)
0d5f933 HDDS-12919. Remove redundant FileLock from ChunkWrite (apache#8435)
395892a HDDS-13012. [Snapshot] Add audit logs for listSnapshotDiffJobs, snapshotDiff and cancelSnapshotDiff. (apache#8425)
d92f0ed HDDS-12653. Add option in `ozone debug log container list` to filter by Health State (apache#8415)
78f8a02 HDDS-12645. Improve output of `ozone debug replicas chunk-info` (apache#8146)
f32470c HDDS-12995. Split ListOptions for better reuse (apache#8413)
cdd1b13 HDDS-13019. Bump jline to 3.30.0 (apache#8428)
1651408 HDDS-13018. Bump common-custom-user-data-maven-extension to 2.0.2 (apache#8429)
8f6222e HDDS-12949. Cleanup SCMSafeModeManager (apache#8390)
adb385f HDDS-13002. Use DatanodeID in ContainerBalancerTask (apache#8421)
2b2a796 HDDS-12969. Use DatanodeID in XceiverClientGrpc (apache#8430)
3c0bafa HDDS-13001. Use DatanodeID in SCMBlockDeletingService. (apache#8420)
8448bc2 HDDS-12187. Use hadoop-dependency-client as parent, not dependency (apache#8416)
582fd03 HDDS-13015. Bump zstd-jni to 1.5.7-3 (apache#8426)
ec12f98 HDDS-12970. Use DatanodeID in Pipeline (apache#8414)
3f48a18 HDDS-12179. Improve Container Log to also capture the Volume Information (apache#7858)
034b497 HDDS-12964. Add minimum required version of Docker Compose to RunningViaDocker page (apache#8385)
c0a6b42 HDDS-12947. Add CodecException (apache#8411)
70949c5 HDDS-11603. Reclaimable Key Filter for Snapshots garbage reclaimation (apache#8392)
08283f3 HDDS-12087. TransactionToDNCommitMap too large causes GC to pause for a long time (apache#8347)
f47df78 HDDS-12958. [Snapshot] Add ACL check regression tests for snapshot operations. (apache#8419)
1cc8445 HDDS-12207. Unify output of ozone debug replicas verify checks (apache#8248)
f087d0b HDDS-12994. Use DatanodeID in ReconSCMDBDefinition. (apache#8417)
d6a7723 HDDS-12776. ozone debug CLI command to list all Duplicate open containers (apache#8409)
c78aeb0 HDDS-12951. EC: Log when falling back to reconstruction read (apache#8408)
412f22d HDDS-12959. Eliminate hdds-hadoop-dependency-server (apache#8384)
df701dc HDDS-12996. Workaround for Docker Compose concurrent map writes (apache#8412)
e6daae4 HDDS-12972. Use DatanodeID in ContainerReplica. (apache#8396)
c1103ae HDDS-12877. Support StorageClass field in the S3 HeadObject request (apache#8351)
4135384 HDDS-12973. Add javadoc for CompactionNode() and make getCompactionNodeGraph return ConcurrentMap (apache#8395)
4f2e13c HDDS-12954. Do not throw IOException for checksum. (apache#8387)
49b8fbd HDDS-12971. Use DatanodeID in Node2PipelineMap (apache#8403)
d2da18f HDDS-12346. Reduce code duplication among TestNSSummaryTask classes (apache#8287)
82b73e3 HDDS-11856. Set DN state machine thread priority higher than command handler thread. (apache#8253)
d4f2734 HDDS-12689. Import BOM for AWS SDK, declare dependencies (apache#8406)
4775e76 HDDS-12975. Fix percentage of blocks deleted in grafana dashboard (apache#8398)
ac0d696 HDDS-12968. [Recon] Fix column visibility issue in Derby during schema upgrade finalization. (apache#8393)
e71dcf6 HDDS-11981. Add annotation for registering feature validator based on a generic version (apache#7603)
254297c HDDS-12562. Reclaimable Directory entry filter for reclaiming deleted directory entries (apache#8055)
4f467c8 HDDS-12978. Remove TestMultipartObjectGet (apache#8400)
a99f207 HDDS-12967. Skip CommonChunkManagerTestCases.testFinishWrite if fuser cannot be started (apache#8389)
d29d76b HDDS-12697. Ozone debug CLI to display details of a single container (apache#8264)
1d1bc88 HDDS-12974. Docker could not parse extra host IP (apache#8397)
7e675d7 HDDS-12053. Make print-log-dag command run locally and offline (apache#8016)
d3faab3 HDDS-12561. Reclaimable Rename entry filter for reclaiming renaming entries (apache#8054)
af1f98c HDDS-10822. Tool to omit raft log in OM. (apache#8154)
3201ca4 HDDS-12952. Make OmSnapshotManager#snapshotLimitCheck thread-safe and consistent (apache#8381)
522c88d HDDS-12963. Clean up io.grpc dependencies (apache#8382)
fa8bd9d HDDS-12916. Support ETag in listObjects response (apache#8356)
fdc77db HDDS-12300. Merge OmUpgradeConfig into OmConfig (apache#8378)
623e144 HDDS-12956. Bump vite to 4.5.14 (apache#8375)
8c8eaf1 HDDS-12944. Reduce timeout for integration check (apache#8374)
40d2e00 HDDS-11141. Avoid log flood due due pipeline close in XceiverServerRatis (apache#8325)
9fe1dba HDDS-12942. Init layout version config should not be public (apache#8373)
452e7aa HDDS-12596. OM fs snapshot max limit is not enforced (apache#8377)
8b095d5 HDDS-12795. Rename heartbeat and first election configuration name (apache#8249)
bee8164 HDDS-12920. Configure log4j to gzip rolled over service log files (apache#8357)
e16a50f HDDS-12934. Split submodule for Freon. (apache#8367)
b1e9511 HDDS-12925. Update datanode volume used space on container deletion (apache#8364)
440bc82 Revert "HDDS-12596. OM fs snapshot max limit is not enforced (apache#8157)"
f345492 HDDS-12596. OM fs snapshot max limit is not enforced (apache#8157)
ee7b1dc HDDS-12901. Introduce EventExecutorMetrics instead of setting the metrics props unsafely (apache#8371)
810e148 HDDS-12939. Remove UnknownPipelineStateException. (apache#8372)
560fcdf HDDS-12728. Add Ozone 2.0.0 to compatibility acceptance tests (apache#8361)
5815a47 HDDS-12933. Remove the table names declared in OmMetadataManagerImpl (apache#8370)
ee32fa5 HDDS-12560. Reclaimable Filter for Snaphost Garbage Collections (apache#8053)
45374ea HDDS-12932. Rewrite OMDBDefinition (apache#8362)
5cb6dd8 HDDS-12575. Set default JUnit5 timeout via property (apache#8348)
8efc0cd HDDS-11633. Delete message body too large, causing SCM to fail writing raft log (apache#8354)
ac9d9fd HDDS-12915. Intermittent failure in testCreatePipelineThrowErrorWithDataNodeLimit (apache#8359)
86039e8 HDDS-12848. Create new submodule for ozone admin (apache#8292)
2d0f8cb HDDS-12833. Remove the CodecRegistry field from DBStoreBuilder (apache#8327)
c71b393 HDDS-12921. UnusedPrivateField violations in tests (apache#8353)
9f3dd01 HDDS-12917. cp: option '--update' doesn't allow an argument (apache#8346)
a14b395 HDDS-12922. Use OMDBDefinition in GeneratorOm and FSORepairTool (apache#8355)
c8a98d6 HDDS-12892. OM Tagging Request incorrectly sets full path as key name for FSO (apache#8345)
ade69e3 HDDS-12649. Include name of volume or bucket in length validation error (apache#8322)
c68308d HDDS-12599. Create an ozone debug CLI command to list all the containers based on final state (apache#8282)
319d5a4 HDDS-12773. bad substitution in bats test (apache#8290)
6f5e02a HDDS-12900. (addendum: fix pmd) Use OMDBDefinition in OmMetadataManagerImpl (apache#8337)
2a7000d HDDS-12900. Use OMDBDefinition in OmMetadataManagerImpl (apache#8337)
9c0c66c HDDS-12915. Mark testCreatePipelineThrowErrorWithDataNodeLimit as flaky
a73e052 HDDS-12907. Enable FieldDeclarationsShouldBeAtStartOfClass PMD rule (apache#8344)
d083f82 HDDS-12905. Move field declarations to start of class in ozone-common (apache#8342)
3f90e1c HDDS-12906. Move field declarations to start of class in ozone-manager module (apache#8343)
403fb97 HDDS-12878. Move field declarations to start of class in tests (apache#8308)
63d5c73 HDDS-12912. Remove deprecated `PipelineManager#closePipeline(Pipeline, boolean)` (apache#8340)
cf1fb88 HDDS-12902. Shutdown executor in CloseContainerCommandHandler and ECReconstructionCoordinator (apache#8341)
825ba02 HDDS-9585. Improve import/export log in ContainerLogger (apache#8330)
b70d35a HDDS-12889. Enable AppendCharacterWithChar PMD rule (apache#8324)
cd308ea HDDS-12904. Move field declarations to start of class in other hdds modules (apache#8336)
4905286 HDDS-12899. Move field declarations to start of class in hdds-server-scm (apache#8332)

Conflicts:
	hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerLogger.java
	hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestKeyValueHandler.java
	hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/ContainerReplica.java
	hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/container/ReconcileSubcommand.java
	hadoop-ozone/recon-codegen/src/main/java/org/apache/ozone/recon/schema/ContainerSchemaDefinition.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
tools Tools that helps with debugging
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants