You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by he...@apache.org on 2021/07/29 11:04:53 UTC
[hadoop] branch branch-3.3 updated: HDFS-15175. Multiple CloseOp
shared block instance causes the standby namenode to crash when rolling
editlog. Contributed by Wan Chang.
This is an automated email from the ASF dual-hosted git repository.
hexiaoqiao pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/branch-3.3 by this push:
new 797c595 HDFS-15175. Multiple CloseOp shared block instance causes the standby namenode to crash when rolling editlog. Contributed by Wan Chang.
797c595 is described below
commit 797c595ba5ccb8850bd9c934cd2d7a706f070091
Author: He Xiaoqiao <he...@apache.org>
AuthorDate: Thu Jul 29 11:18:39 2021 +0800
HDFS-15175. Multiple CloseOp shared block instance causes the standby namenode to crash when rolling editlog. Contributed by Wan Chang.
Reviewed-by: He Xiaoqiao <he...@apache.org>
Reviewed-by: Stephen O'Donnell <so...@apache.org>
(cherry picked from commit 683feaa1d4863499207733a9f4c8c3cd2ec9c9d2)
---
.../hadoop/hdfs/server/namenode/FSEditLogOp.java | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java
index 69c95b0..03ea236 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogOp.java
@@ -412,6 +412,17 @@ public abstract class FSEditLogOp {
return PBHelperClient.convertXAttrs(proto.getXAttrsList());
}
+ private static Block[] deepCopy(Block[] blocks) {
+ if (blocks == null || blocks.length == 0) {
+ return blocks;
+ }
+ Block[] copy = new Block[blocks.length];
+ for (int i = 0; i < blocks.length; ++i) {
+ copy[i] = blocks[i] == null ? null : new Block(blocks[i]);
+ }
+ return copy;
+ }
+
@SuppressWarnings("unchecked")
static abstract class AddCloseOp
extends FSEditLogOp
@@ -500,7 +511,7 @@ public abstract class FSEditLogOp {
throw new RuntimeException("Can't have more than " + MAX_BLOCKS +
" in an AddCloseOp.");
}
- this.blocks = blocks;
+ this.blocks = FSEditLogOp.deepCopy(blocks);
return (T)this;
}
@@ -978,7 +989,7 @@ public abstract class FSEditLogOp {
}
AddBlockOp setPenultimateBlock(Block pBlock) {
- this.penultimateBlock = pBlock;
+ this.penultimateBlock = pBlock == null ? null : new Block(pBlock);
return this;
}
@@ -987,7 +998,7 @@ public abstract class FSEditLogOp {
}
AddBlockOp setLastBlock(Block lastBlock) {
- this.lastBlock = lastBlock;
+ this.lastBlock = lastBlock == null ? null : new Block(lastBlock);
return this;
}
@@ -1090,7 +1101,7 @@ public abstract class FSEditLogOp {
}
UpdateBlocksOp setBlocks(Block[] blocks) {
- this.blocks = blocks;
+ this.blocks = FSEditLogOp.deepCopy(blocks);
return this;
}
@@ -2881,7 +2892,8 @@ public abstract class FSEditLogOp {
}
TruncateOp setTruncateBlock(Block truncateBlock) {
- this.truncateBlock = truncateBlock;
+ this.truncateBlock = truncateBlock == null ?
+ null : new Block(truncateBlock);
return this;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org