} else { resolver = new CachedResolver(SystemClock.getInstance(), nodeIpCacheTimeout); addIfService(resolver);
@Override public void handle(NodesListManagerEvent event) { RMNode eventNode = event.getNode(); switch (event.getType()) { case NODE_UNUSABLE: LOG.debug(eventNode + " reported unusable"); sendRMAppNodeUpdateEventToNonFinalizedApps(eventNode, RMAppNodeUpdateType.NODE_UNUSABLE); break; case NODE_USABLE: LOG.debug(eventNode + " reported usable"); sendRMAppNodeUpdateEventToNonFinalizedApps(eventNode, RMAppNodeUpdateType.NODE_USABLE); break; case NODE_DECOMMISSIONING: LOG.debug(eventNode + " reported decommissioning"); sendRMAppNodeUpdateEventToNonFinalizedApps( eventNode, RMAppNodeUpdateType.NODE_DECOMMISSIONING); break; default: LOG.error("Ignoring invalid eventtype " + event.getType()); } // remove the cache of normalized hostname if enabled if (resolver instanceof CachedResolver) { ((CachedResolver)resolver).removeFromCache( eventNode.getNodeID().getHost()); } }
@Override public String resolve(String hostName) { CacheEntry e = cache.get(hostName); if (e != null) { return e.ip; } return reload(hostName); }
(NodesListManager.CachedResolver)nodesListManager.getResolver(); resolver.addToCache("testCachedResolverHost1", "1.1.1.1"); resolver.addToCache("testCachedResolverHost2", "1.1.1.2"); Assert.assertEquals("1.1.1.1", resolver.resolve("testCachedResolverHost1")); Assert.assertEquals("1.1.1.2", resolver.resolve("testCachedResolverHost2")); rmnode1)); Assert.assertNotEquals("1.1.1.1", resolver.resolve("testCachedResolverHost1")); Assert.assertEquals("1.1.1.2", resolver.resolve("testCachedResolverHost2")); rmnode2)); Assert.assertNotEquals("1.1.1.1", resolver.resolve("testCachedResolverHost1")); Assert.assertNotEquals("1.1.1.2", resolver.resolve("testCachedResolverHost2"));
final int CACHE_EXPIRY_INTERVAL_SECS = 30; NodesListManager.CachedResolver resolver = new NodesListManager.CachedResolver(clock, CACHE_EXPIRY_INTERVAL_SECS); resolver.init(new YarnConfiguration()); resolver.start(); resolver.addToCache("testCachedResolverHost1", "1.1.1.1"); Assert.assertEquals("1.1.1.1", resolver.resolve("testCachedResolverHost1")); resolver.addToCache("testCachedResolverHost2", "1.1.1.2"); Assert.assertEquals("1.1.1.1", resolver.resolve("testCachedResolverHost1")); Assert.assertEquals("1.1.1.2", resolver.resolve("testCachedResolverHost2")); resolver.removeFromCache("testCachedResolverHost1"); Assert.assertNotEquals("1.1.1.1", resolver.resolve("testCachedResolverHost1")); Assert.assertEquals("1.1.1.2", resolver.resolve("testCachedResolverHost2")); resolver.getExpireChecker().run(); Assert.assertNotEquals("1.1.1.1", resolver.resolve("testCachedResolverHost1")); Assert.assertNotEquals("1.1.1.2", resolver.resolve("testCachedResolverHost2"));
private String reload(String hostName) { String ip = NetUtils.normalizeHostName(hostName); addToCache(hostName, ip); return ip; }