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

ASF GitHub Bot updated HDDS-16378:
----------------------------------
    Labels: pull-request-available  (was: )

> ozone repair datanode upgrade-container-schema --dry-run writes 
> upgrade.complete, so the real run skips the volume
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: HDDS-16378
>                 URL: https://issues.apache.org/jira/browse/HDDS-16378
>             Project: Apache Ozone
>          Issue Type: Bug
>            Reporter: Meng-Shuan Tsai
>            Assignee: Meng-Shuan Tsai
>            Priority: Major
>              Labels: pull-request-available
>
> This is a bug in the offline schema-upgrade repair tool.
> {{ozone repair datanode upgrade-container-schema --dry-run}} does not migrate 
> container metadata (correct), but it still writes the permanent 
> {{upgrade.complete}} marker under each successful volume's 
> {{{}hddsRootDir{}}}. The next real run treats every marked volume as already 
> upgraded, prints {{{}is already upgraded, skip it.{}}}, and exits 0. 
> Containers stay on schema V2.
> h2. Root cause
> The migration body has three {{isDryRun()}} guards (read-only DB, no V3 
> {{{}put{}}}, no schema-file rewrite):
> [UpgradeContainerSchema.java 
> L279|https://github.com/apache/ozone/blob/341b76d655aa01978a33d34fd8dce3d8d9003394/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java#L279],
>  
> [L433|https://github.com/apache/ozone/blob/341b76d655aa01978a33d34fd8dce3d8d9003394/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java#L433],
>  
> [L463|https://github.com/apache/ozone/blob/341b76d655aa01978a33d34fd8dce3d8d9003394/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java#L463]
> The completion marker does not. Dry-run still calls {{{}result.success(){}}}, 
> then {{whenComplete}} creates the flag whenever {{{}e == null && 
> r.isSuccess(){}}}:
> [UpgradeContainerSchema.java 
> L307–L327|https://github.com/apache/ozone/blob/341b76d655aa01978a33d34fd8dce3d8d9003394/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java#L307-L327]
> {code:java}
>         result.setResultList(resultList);
>         result.success();
>         return result;
>       }).whenComplete((r, e) -> {
>         final File file =
>             UpgradeUtils.getVolumeUpgradeCompleteFile(r.getHddsVolume());
>         if (e == null && r.isSuccess()) {   // missing && !isDryRun()
>           try {
>             UpgradeUtils.createFile(file);
>           } catch (IOException ioe) {
>             error(ioe, "Failed to create upgrade complete file %s.", file);
>           }
>         }
>         ...
>       });
> {code}
> {{isAlreadyUpgraded}} only checks that the file exists:
> [UpgradeUtils.java 
> L125–L129|https://github.com/apache/ozone/blob/341b76d655aa01978a33d34fd8dce3d8d9003394/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeUtils.java#L125-L129]
> That check removes the volume in {{{}execute(){}}}:
> [UpgradeContainerSchema.java 
> L174–L188|https://github.com/apache/ozone/blob/341b76d655aa01978a33d34fd8dce3d8d9003394/hadoop-ozone/cli-repair/src/main/java/org/apache/hadoop/ozone/repair/datanode/schemaupgrade/UpgradeContainerSchema.java#L174-L188]
> h2. Impact
>  * The one-time V2→V3 migration never happens on volumes that dry-run marked 
> complete. Later real runs keep skipping them (exit 0, {{info}} only).
>  * Scope is the datanode that ran {{{}--dry-run{}}}, for volumes that 
> {{{}success(){}}}-ed.



--
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