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 we...@apache.org on 2019/12/06 23:10:55 UTC
[hadoop] 02/02: HDFS-14751. Synchronize on diffs in
DirectoryScanner. Contributed by Lisheng Sun.
This is an automated email from the ASF dual-hosted git repository.
weichiu pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit ecd461f940efcd8c75f4833cf09bc7a52cc0b559
Author: Wei-Chiu Chuang <we...@apache.org>
AuthorDate: Fri Dec 6 11:40:03 2019 -0800
HDFS-14751. Synchronize on diffs in DirectoryScanner. Contributed by Lisheng Sun.
---
.../hdfs/server/datanode/DirectoryScanner.java | 28 +++++++++++++---------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DirectoryScanner.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DirectoryScanner.java
index aa5cdb8..35625ce 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DirectoryScanner.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DirectoryScanner.java
@@ -349,7 +349,9 @@ public class DirectoryScanner implements Runnable {
* Clear the current cache of diffs and statistics.
*/
private void clear() {
- diffs.clear();
+ synchronized (diffs) {
+ diffs.clear();
+ }
stats.clear();
}
@@ -430,17 +432,19 @@ public class DirectoryScanner implements Runnable {
// HDFS-14476: run checkAndUpadte with batch to avoid holding the lock too
// long
int loopCount = 0;
- for (final Map.Entry<String, ScanInfo> entry : diffs.getEntries()) {
- dataset.checkAndUpdate(entry.getKey(), entry.getValue());
-
- if (loopCount % RECONCILE_BLOCKS_BATCH_SIZE == 0) {
- try {
- Thread.sleep(2000);
- } catch (InterruptedException e) {
- // do nothing
+ synchronized (diffs) {
+ for (final Map.Entry<String, ScanInfo> entry : diffs.getEntries()) {
+ dataset.checkAndUpdate(entry.getKey(), entry.getValue());
+
+ if (loopCount % RECONCILE_BLOCKS_BATCH_SIZE == 0) {
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ // do nothing
+ }
}
+ loopCount++;
}
- loopCount++;
}
if (!retainDiffs) {
@@ -545,7 +549,9 @@ public class DirectoryScanner implements Runnable {
}
d++;
}
- diffs.addAll(bpid, diffRecord);
+ synchronized (diffs) {
+ diffs.addAll(bpid, diffRecord);
+ }
LOG.info("Scan Results: {}", statsRecord);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org