HDFS-12988. RBF: Mount table entries not properly updated in the local cache. Contributed by Inigo Goiri.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/83b513ac Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/83b513ac Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/83b513ac Branch: refs/heads/YARN-6592 Commit: 83b513ac6d5448f3771b0b95f91e7aa7961ae2cc Parents: 0c75d06 Author: Inigo Goiri <inigo...@apache.org> Authored: Fri Jan 5 09:11:38 2018 -0800 Committer: Inigo Goiri <inigo...@apache.org> Committed: Fri Jan 5 09:11:38 2018 -0800 ---------------------------------------------------------------------- .../federation/resolver/MountTableResolver.java | 4 ++- .../resolver/TestMountTableResolver.java | 32 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/83b513ac/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java index 4457cba..24082d4 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/federation/resolver/MountTableResolver.java @@ -267,7 +267,9 @@ public class MountTableResolver // Node exists, check for updates MountTable existingEntry = this.tree.get(srcPath); if (existingEntry != null && !existingEntry.equals(entry)) { - // Entry has changed + LOG.info("Entry has changed from \"{}\" to \"{}\"", + existingEntry, entry); + this.tree.put(srcPath, entry); invalidateLocationCache(srcPath); LOG.info("Updated mount point {} in resolver"); } http://git-wip-us.apache.org/repos/asf/hadoop/blob/83b513ac/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java index c92e92c..7a596c1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/federation/resolver/TestMountTableResolver.java @@ -24,6 +24,8 @@ import static org.junit.Assert.fail; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -409,4 +411,34 @@ public class TestMountTableResolver { assertEquals(numRootTrees, mountTable.getMountPoints("/").size()); assertEquals(100000, mountTable.getMounts("/").size()); } + + @Test + public void testUpdate() throws IOException { + + // Add entry to update later + Map<String, String> map = getMountTableEntry("1", "/"); + mountTable.addEntry(MountTable.newInstance("/testupdate", map)); + + MountTable entry = mountTable.getMountPoint("/testupdate"); + List<RemoteLocation> dests = entry.getDestinations(); + assertEquals(1, dests.size()); + RemoteLocation dest = dests.get(0); + assertEquals("1", dest.getNameserviceId()); + + // Update entry + Collection<MountTable> entries = Collections.singletonList( + MountTable.newInstance("/testupdate", getMountTableEntry("2", "/"))); + mountTable.refreshEntries(entries); + + MountTable entry1 = mountTable.getMountPoint("/testupdate"); + List<RemoteLocation> dests1 = entry1.getDestinations(); + assertEquals(1, dests1.size()); + RemoteLocation dest1 = dests1.get(0); + assertEquals("2", dest1.getNameserviceId()); + + // Remove the entry to test updates and check + mountTable.removeEntry("/testupdate"); + MountTable entry2 = mountTable.getMountPoint("/testupdate"); + assertNull(entry2); + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-commits-h...@hadoop.apache.org