diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/NameNodeConnector.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/NameNodeConnector.java index 88e40ee0f9a..e1b100531f9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/NameNodeConnector.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/balancer/NameNodeConnector.java @@ -41,6 +41,7 @@ import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FsServerDefaults; import org.apache.hadoop.fs.Path; +import org.apache.hadoop.fs.StreamCapabilities.StreamCapability; import org.apache.hadoop.hdfs.DistributedFileSystem; import org.apache.hadoop.hdfs.NameNodeProxies; import org.apache.hadoop.hdfs.protocol.AlreadyBeingCreatedException; @@ -250,8 +251,10 @@ public class NameNodeConnector implements Closeable { .setFlags(EnumSet.of(CreateFlag.CREATE)) .build(); - Preconditions.checkState(!fs.getFileStatus(idPath).isErasureCoded(), - "Id File should be a replicate file"); + Preconditions.checkState( + fsout.hasCapability(StreamCapability.HFLUSH.getValue()) + && fsout.hasCapability(StreamCapability.HSYNC.getValue()), + "Id lock file should support hflush and hsync"); // mark balancer idPath to be deleted during filesystem closure fs.deleteOnExit(idPath);