[ 
https://issues.apache.org/jira/browse/HDDS-15770?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Siyao Meng updated HDDS-15770:
------------------------------
    Description: 
HDDS-14225 pins the RocksDB format_version to 5 
(ManagedBlockBasedTableConfig.FORMAT_VERSION), applied unconditionally in 
DBProfile.SSD.getBlockBasedTableConfig() (OM/SCM/DN all route through it) and 
in RDBSstFileWriter. This is deliberate: RocksDB 9+ defaults to 
format_version=6 (RocksDB >= 10.4.0 
[supports|https://github.com/facebook/rocksdb/blob/v10.10.1/include/rocksdb/table.h#L581-L596]
 format_version=7, but the default is still 6), which cannot be read by RocksDB 
< 8.6.0, so pinning to 5 keeps files readable if Ozone is downgraded before 
finalization.

Once a cluster is finalized, downgrade across the layout boundary is no longer 
supported, so newer files would be safe. This ticket tracks the option of 
writing a newer format_version after finalization instead of staying at 5 
forever.

Scope would include:
 - Introduce an HDDS and OM layout feature for the RocksDB format upgrade, so 
there is a real downgrade barrier protecting the newer files.
 - Thread finalization/layout state into RocksDB option construction. DBProfile 
is currently a static enum with no access to upgrade state, and DBs open early 
in startup, so this is non-trivial plumbing rather than a flag flip.
 - Choose format_version at DB open: pinned value when pre-finalized, newer 
value when finalized.

Testing:
 - Mixed-format DBs: files written at the old and new versions coexisting and 
readable after compaction.
 - Pre-finalized downgrade path still works with the pinned version.
 - Non-rolling-upgrade coverage for the new layout feature.

  was:
HDDS-14225 pins the RocksDB format_version to 5 
(ManagedBlockBasedTableConfig.FORMAT_VERSION), applied unconditionally in 
DBProfile.SSD.getBlockBasedTableConfig() (OM/SCM/DN all route through it) and 
in RDBSstFileWriter. This is deliberate: RocksDB 9+ defaults to 
format_version=6, which cannot be read by RocksDB < 8.6.0, so pinning to 5 
keeps files readable if Ozone is downgraded before finalization.

Once a cluster is finalized, downgrade across the layout boundary is no longer 
supported, so newer files would be safe. This ticket tracks the option of 
writing a newer format_version after finalization instead of staying at 5 
forever.

Scope would include:
- Introduce an HDDS and OM layout feature for the RocksDB format upgrade, so 
there is a real downgrade barrier protecting the newer files.
- Thread finalization/layout state into RocksDB option construction. DBProfile 
is currently a static enum with no access to upgrade state, and DBs open early 
in startup, so this is non-trivial plumbing rather than a flag flip.
- Choose format_version at DB open: pinned value when pre-finalized, newer 
value when finalized.



Testing:
- Mixed-format DBs: files written at the old and new versions coexisting and 
readable after compaction.
- Pre-finalized downgrade path still works with the pinned version.
- Non-rolling-upgrade coverage for the new layout feature.


> Allow writing newer RocksDB format_version once the cluster is finalized
> ------------------------------------------------------------------------
>
>                 Key: HDDS-15770
>                 URL: https://issues.apache.org/jira/browse/HDDS-15770
>             Project: Apache Ozone
>          Issue Type: Sub-task
>          Components: upgrade
>    Affects Versions: 2.3.0
>            Reporter: Siyao Meng
>            Priority: Major
>
> HDDS-14225 pins the RocksDB format_version to 5 
> (ManagedBlockBasedTableConfig.FORMAT_VERSION), applied unconditionally in 
> DBProfile.SSD.getBlockBasedTableConfig() (OM/SCM/DN all route through it) and 
> in RDBSstFileWriter. This is deliberate: RocksDB 9+ defaults to 
> format_version=6 (RocksDB >= 10.4.0 
> [supports|https://github.com/facebook/rocksdb/blob/v10.10.1/include/rocksdb/table.h#L581-L596]
>  format_version=7, but the default is still 6), which cannot be read by 
> RocksDB < 8.6.0, so pinning to 5 keeps files readable if Ozone is downgraded 
> before finalization.
> Once a cluster is finalized, downgrade across the layout boundary is no 
> longer supported, so newer files would be safe. This ticket tracks the option 
> of writing a newer format_version after finalization instead of staying at 5 
> forever.
> Scope would include:
>  - Introduce an HDDS and OM layout feature for the RocksDB format upgrade, so 
> there is a real downgrade barrier protecting the newer files.
>  - Thread finalization/layout state into RocksDB option construction. 
> DBProfile is currently a static enum with no access to upgrade state, and DBs 
> open early in startup, so this is non-trivial plumbing rather than a flag 
> flip.
>  - Choose format_version at DB open: pinned value when pre-finalized, newer 
> value when finalized.
> Testing:
>  - Mixed-format DBs: files written at the old and new versions coexisting and 
> readable after compaction.
>  - Pre-finalized downgrade path still works with the pinned version.
>  - Non-rolling-upgrade coverage for the new layout feature.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to