Skip to content

Commit e13f8ba

Browse files
committed
add max count.
1 parent 5c12bfa commit e13f8ba

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSStripedOutputStream.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@
7575

7676
import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CLIENT_EC_WRITE_ALLOW_END_BLOCKGROUP_INADVANCE;
7777
import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CLIENT_EC_WRITE_ALLOW_END_BLOCKGROUP_INADVANCE_DEFAULT;
78+
import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CLIENT_EC_WRITE_MAX_END_BLOCKGROUP_INADVANCE_COUNT;
79+
import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.DFS_CLIENT_EC_WRITE_MAX_END_BLOCKGROUP_INADVANCE_COUNT_DEFAULT;
7880
import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.Write.ECRedundancy.DFS_CLIENT_EC_WRITE_FAILED_BLOCKS_TOLERATED;
7981
import static org.apache.hadoop.hdfs.client.HdfsClientConfigKeys.Write.ECRedundancy.DFS_CLIENT_EC_WRITE_FAILED_BLOCKS_TOLERATED_DEFAILT;
8082

@@ -289,6 +291,8 @@ private void flipDataBuffers() {
289291
private int blockGroupIndex;
290292
private long datanodeRestartTimeout;
291293
private final int failedBlocksTolerated;
294+
private final int maxEndBlockGroupInAdvanceCount;
295+
private int curEndBlockGroupInAdvanceCount;
292296
private final boolean allowEndBlockGroupInAdvance;
293297
private boolean endBlockGroupInAdvance;
294298

@@ -342,6 +346,9 @@ private void flipDataBuffers() {
342346
allowEndBlockGroupInAdvance = dfsClient.getConfiguration().getBoolean(
343347
DFS_CLIENT_EC_WRITE_ALLOW_END_BLOCKGROUP_INADVANCE,
344348
DFS_CLIENT_EC_WRITE_ALLOW_END_BLOCKGROUP_INADVANCE_DEFAULT);
349+
maxEndBlockGroupInAdvanceCount = dfsClient.getConfiguration().getInt(
350+
DFS_CLIENT_EC_WRITE_MAX_END_BLOCKGROUP_INADVANCE_COUNT,
351+
DFS_CLIENT_EC_WRITE_MAX_END_BLOCKGROUP_INADVANCE_COUNT_DEFAULT);
345352
}
346353

347354
/** Construct a new output stream for appending to a file. */
@@ -577,12 +584,14 @@ private boolean shouldEndBlockGroup() {
577584
}
578585

579586
private boolean shouldEndBlockGroupInAdvance() {
580-
if (!allowEndBlockGroupInAdvance) {
587+
if (!allowEndBlockGroupInAdvance ||
588+
curEndBlockGroupInAdvanceCount > maxEndBlockGroupInAdvanceCount) {
581589
return false;
582590
}
583591
if (DFSClientFaultInjector.get().mockEndBlockGroupInAdvance()) {
584592
LOG.info("Block group {} ends in advance.", currentBlockGroup);
585593
this.endBlockGroupInAdvance = true;
594+
curEndBlockGroupInAdvanceCount++;
586595
return true;
587596
}
588597

@@ -594,6 +603,7 @@ private boolean shouldEndBlockGroupInAdvance() {
594603
if (overFailedStreamer && stripeFull) {
595604
LOG.info("Block group {} ends in advance.", currentBlockGroup);
596605
this.endBlockGroupInAdvance = true;
606+
curEndBlockGroupInAdvanceCount++;
597607
return true;
598608
}
599609
return false;

hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/client/HdfsClientConfigKeys.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,10 @@ public interface HdfsClientConfigKeys {
300300
"dfs.client.ec.write.allow.end.blockgroup.inadvance";
301301
boolean DFS_CLIENT_EC_WRITE_ALLOW_END_BLOCKGROUP_INADVANCE_DEFAULT = false;
302302

303+
String DFS_CLIENT_EC_WRITE_MAX_END_BLOCKGROUP_INADVANCE_COUNT =
304+
"dfs.client.ec.write.max.end.blockgroup.inadvance.count";
305+
int DFS_CLIENT_EC_WRITE_MAX_END_BLOCKGROUP_INADVANCE_COUNT_DEFAULT = 10;
306+
303307
/**
304308
* These are deprecated config keys to client code.
305309
*/

hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6708,4 +6708,12 @@
67086708
Whether allow client ends non-full block group in advance or not.
67096709
</description>
67106710
</property>
6711+
<property>
6712+
<name>dfs.client.ec.write.max.end.blockgroup.inadvance.count</name>
6713+
<value>10</value>
6714+
<description>
6715+
Max count of ending block group in advance allowed.
6716+
This prevents the creation of large amounts of metadata in NameNode.
6717+
</description>
6718+
</property>
67116719
</configuration>

0 commit comments

Comments
 (0)