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 2023/09/06 02:28:03 UTC
[hadoop] branch trunk updated: HDFS-16933. A race in SerialNumberMap will cause wrong owner, group and XATTR. (#5430). Contributed by ZanderXu.
This is an automated email from the ASF dual-hosted git repository.
hexiaoqiao pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
The following commit(s) were added to refs/heads/trunk by this push:
new 7c941e00b45 HDFS-16933. A race in SerialNumberMap will cause wrong owner, group and XATTR. (#5430). Contributed by ZanderXu.
7c941e00b45 is described below
commit 7c941e00b45ce1ccc02d7a5d7ec575a04c8bfb1e
Author: ZanderXu <za...@apache.org>
AuthorDate: Wed Sep 6 10:27:52 2023 +0800
HDFS-16933. A race in SerialNumberMap will cause wrong owner, group and XATTR. (#5430). Contributed by ZanderXu.
Signed-off-by: He Xiaoqiao <he...@apache.org>
---
.../hdfs/server/namenode/SerialNumberMap.java | 25 +++++++++++++---------
1 file changed, 15 insertions(+), 10 deletions(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SerialNumberMap.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SerialNumberMap.java
index ff116b51188..453844ec951 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SerialNumberMap.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/SerialNumberMap.java
@@ -61,17 +61,22 @@ public class SerialNumberMap<T> {
}
Integer sn = t2i.get(t);
if (sn == null) {
- sn = current.getAndIncrement();
- if (sn > max) {
- current.getAndDecrement();
- throw new IllegalStateException(name + ": serial number map is full");
+ synchronized (this) {
+ sn = t2i.get(t);
+ if (sn == null) {
+ sn = current.getAndIncrement();
+ if (sn > max) {
+ current.getAndDecrement();
+ throw new IllegalStateException(name + ": serial number map is full");
+ }
+ Integer old = t2i.putIfAbsent(t, sn);
+ if (old != null) {
+ current.getAndDecrement();
+ return old;
+ }
+ i2t.put(sn, t);
+ }
}
- Integer old = t2i.putIfAbsent(t, sn);
- if (old != null) {
- current.getAndDecrement();
- return old;
- }
- i2t.put(sn, t);
}
return sn;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org