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