[ 
https://issues.apache.org/jira/browse/HDDS-12608?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17935763#comment-17935763
 ] 

Tsz-wo Sze edited comment on HDDS-12608 at 3/15/25 6:06 PM:
------------------------------------------------------------

{quote}I think they overwrite each other, but all write the same content.
{quote}
No, it will corrupt the file. The AtomicFileOutputStream did catch such bug.

Let try printing some debug messages:
{code:java}
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/DatanodeVersionFile.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/DatanodeVersionFile.java
index 84400c4f24..75ba99298c 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/DatanodeVersionFile.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/DatanodeVersionFile.java
@@ -74,4 +74,15 @@ public void createVersionFile(File path) throws
   public static Properties readFrom(File versionFile) throws IOException {
     return IOUtils.readPropertiesFromFile(versionFile);
   }
+
+  @Override
+  public String toString() {
+    return "DatanodeVersionFile{" +
+        "storageId='" + storageId + '\'' +
+        ", clusterId='" + clusterId + '\'' +
+        ", datanodeUuid='" + datanodeUuid + '\'' +
+        ", cTime=" + cTime +
+        ", layoutVersion=" + layoutVersion +
+        '}';
+  }
 }
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
index 8225105126..0f617dbc64 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
@@ -329,10 +329,10 @@ private void writeVersionFile() throws IOException {
         "Version File should have the latest LayOutVersion");
 
     File versionFile = getVersionFile();
-    LOG.debug("Writing Version file to disk, {}", versionFile);
 
     DatanodeVersionFile dnVersionFile = new DatanodeVersionFile(this.storageID,
         this.clusterID, this.datanodeUuid, this.cTime, this.layoutVersion);
+    LOG.info("Writing Version file to {}: {}", versionFile, dnVersionFile, new 
Throwable("TRACE"));
     dnVersionFile.createVersionFile(versionFile);
   }
 
{code}


was (Author: szetszwo):
bq. I think they overwrite each other, but all write the same content.

No, it will corrupt the file.  The AtomicFileOutputStream did catch such bug.

I believe it is a bug in the test.  Let try printing some debug messages:
{code}
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/DatanodeVersionFile.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/DatanodeVersionFile.java
index 84400c4f24..75ba99298c 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/DatanodeVersionFile.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/helpers/DatanodeVersionFile.java
@@ -74,4 +74,15 @@ public void createVersionFile(File path) throws
   public static Properties readFrom(File versionFile) throws IOException {
     return IOUtils.readPropertiesFromFile(versionFile);
   }
+
+  @Override
+  public String toString() {
+    return "DatanodeVersionFile{" +
+        "storageId='" + storageId + '\'' +
+        ", clusterId='" + clusterId + '\'' +
+        ", datanodeUuid='" + datanodeUuid + '\'' +
+        ", cTime=" + cTime +
+        ", layoutVersion=" + layoutVersion +
+        '}';
+  }
 }
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
index 8225105126..0f617dbc64 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java
@@ -329,10 +329,10 @@ private void writeVersionFile() throws IOException {
         "Version File should have the latest LayOutVersion");
 
     File versionFile = getVersionFile();
-    LOG.debug("Writing Version file to disk, {}", versionFile);
 
     DatanodeVersionFile dnVersionFile = new DatanodeVersionFile(this.storageID,
         this.clusterID, this.datanodeUuid, this.cTime, this.layoutVersion);
+    LOG.info("Writing Version file to {}: {}", versionFile, dnVersionFile, new 
Throwable("TRACE"));
     dnVersionFile.createVersionFile(versionFile);
   }
 
{code}

> Race condition in datanode version file creation
> ------------------------------------------------
>
>                 Key: HDDS-12608
>                 URL: https://issues.apache.org/jira/browse/HDDS-12608
>             Project: Apache Ozone
>          Issue Type: Bug
>          Components: Ozone Datanode
>    Affects Versions: 2.0.0
>            Reporter: Attila Doroszlai
>            Assignee: Attila Doroszlai
>            Priority: Major
>              Labels: pull-request-available
>
> Multiple threads may create the VERSION file.  After HDDS-12456 they use the 
> same temporary file for {{AtomicFileOutputStream}}.



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