HDDS-3630: RocksDB in Datanode
Git branch: https://github.com/apache/ozone/tree/HDDS-3630
Currently there will be one RocksDB for each Container on Datanode, which leads to hundreds of thousands of RocksDB instances on one Datanode. It's very challenging to manage this amount of RocksDB instances in one JVM. Please refer to the "problem statement" section of the design document[1] for challenge details. Unlike the current approach, Datanode RocksDB merge feature will use only one RocksDB for each data volume. With far fewer RocksDB instances to manage, the write path performance and DN stability are improved, Refer to the Micro Benchmark Data section of the design document.
To enable the feature, the following configs need to be added to Ozone Manager's ozone-site.xml.
<property>
<name>hdds.datanode.container.schema.v3.enabled</name>
<value>false</value>
</property>
<property>
<name>Hdds.datanode.container.db.dir</name>
<description>Determines where the per-disk rocksdb instances will be
stored. This setting is optional. If unspecified, then rocksdb instances are stored on the same disk as HDDS data.
The directories should be tagged with corresponding storage types ([SSD]/[DISK]/[ARCHIVE]/[RAM_DISK]) for storage policies.
The default storage type will be DISK if the directory does not have a storage typetagged explicitly.
Ideally, this should be mapped to a fast disk like an SSD.</description>
</property>
<property>
<name>Hdds.datanode.failed.db.volumes.tolerated</name>
<value>-1</value>
<description>The number of db volumes that are allowed to fail before a datanode stops offering service.
Default -1 means unlimited, but we should have at least one good volume left.</description>
</property>
1. Builds/intermittent test failures
No additional flaky tests have been introduced by the feature branch.
2. Documentation
Documentation is being added by HDDS-6790