Browse Source

HDFS-11757. Query StreamCapabilities when creating balancer's lock file. Contributed by SammiChen.

Andrew Wang 8 years ago
parent
commit
83dd14aa84

+ 5 - 2
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);