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 in...@apache.org on 2023/04/05 21:06:59 UTC
[hadoop] branch trunk updated: HDFS-16973. RBF: MountTableResolver cache size lookup should take read lock (#5533)
This is an automated email from the ASF dual-hosted git repository.
inigoiri 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 422bf3b24c8 HDFS-16973. RBF: MountTableResolver cache size lookup should take read lock (#5533)
422bf3b24c8 is described below
commit 422bf3b24c82803cb0e8ed25fa0b12b5f5cccc1b
Author: Viraj Jasani <vj...@apache.org>
AuthorDate: Wed Apr 5 14:06:38 2023 -0700
HDFS-16973. RBF: MountTableResolver cache size lookup should take read lock (#5533)
---
.../hdfs/server/federation/resolver/MountTableResolver.java | 13 +++++++++----
.../server/federation/resolver/TestMountTableResolver.java | 10 ++++++++++
2 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java
index 4b21ec0aa63..adb0f91d042 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java
@@ -678,11 +678,16 @@ public class MountTableResolver
* @return Size of the cache.
* @throws IOException If the cache is not initialized.
*/
- protected long getCacheSize() throws IOException{
- if (this.locationCache != null) {
- return this.locationCache.size();
+ protected long getCacheSize() throws IOException {
+ this.readLock.lock();
+ try {
+ if (this.locationCache != null) {
+ return this.locationCache.size();
+ }
+ throw new IOException("localCache is null");
+ } finally {
+ this.readLock.unlock();
}
- throw new IOException("localCache is null");
}
@VisibleForTesting
diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java
index 15d3caa5e4e..998b79782de 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java
@@ -552,6 +552,16 @@ public class TestMountTableResolver {
assertEquals(100000, mountTable.getMountPoints("/").size());
assertEquals(100000, mountTable.getMounts("/").size());
+ // test concurrency for mount table cache size when it gets updated frequently
+ for (int i = 0; i < 20; i++) {
+ mountTable.getDestinationForPath("/" + i);
+ if (i >= 10) {
+ assertEquals(TEST_MAX_CACHE_SIZE, mountTable.getCacheSize());
+ } else {
+ assertEquals(i + 1, mountTable.getCacheSize());
+ }
+ }
+ assertEquals(TEST_MAX_CACHE_SIZE, mountTable.getCacheSize());
// Add 1000 entries in deep list
mountTable.refreshEntries(emptyList);
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org