This is an automated email from the ASF dual-hosted git repository. nic pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
commit f815c4ff1c4aa86692adbbbdfb93e4979f9cd49a Author: Zhong, Yanghong <nju_y...@apache.org> AuthorDate: Wed May 20 17:11:20 2020 +0800 KYLIN-4506 Remove unresolved memcached servers before initialize MemcachedClient --- .../org/apache/kylin/cache/memcached/MemcachedCache.java | 16 +++++++++++++++- .../apache/kylin/cache/memcached/MemcachedCacheTest.java | 9 +++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/cache/src/main/java/org/apache/kylin/cache/memcached/MemcachedCache.java b/cache/src/main/java/org/apache/kylin/cache/memcached/MemcachedCache.java index e7ff75f..784665e 100644 --- a/cache/src/main/java/org/apache/kylin/cache/memcached/MemcachedCache.java +++ b/cache/src/main/java/org/apache/kylin/cache/memcached/MemcachedCache.java @@ -20,8 +20,11 @@ package org.apache.kylin.cache.memcached; import java.io.IOException; import java.io.Serializable; +import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.util.Arrays; +import java.util.Iterator; +import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -136,13 +139,24 @@ public class MemcachedCache { .setOpQueueMaxBlockTime(config.getTimeout()).setOpTimeout(config.getTimeout()) .setReadBufferSize(config.getReadBufferSize()).setOpQueueFactory(opQueueFactory).build(); return new MemcachedCache(new MemcachedClient(new MemcachedConnectionFactory(connectionFactory), - AddrUtil.getAddresses(hostsStr)), config, memcachedPrefix, timeToLive); + getResolvedAddrList(hostsStr)), config, memcachedPrefix, timeToLive); } catch (IOException e) { logger.error("Unable to create MemcachedCache instance.", e); throw Throwables.propagate(e); } } + public static List<InetSocketAddress> getResolvedAddrList(String hostsStr) { + List<InetSocketAddress> addrs = AddrUtil.getAddresses(hostsStr); + Iterator<InetSocketAddress> addrIterator = addrs.iterator(); + while (addrIterator.hasNext()) { + if (addrIterator.next().isUnresolved()) { + addrIterator.remove(); + } + } + return addrs; + } + public String getName() { return memcachedPrefix; } diff --git a/cache/src/test/java/org/apache/kylin/cache/memcached/MemcachedCacheTest.java b/cache/src/test/java/org/apache/kylin/cache/memcached/MemcachedCacheTest.java index 4fcbc5e..a4f8fc0 100644 --- a/cache/src/test/java/org/apache/kylin/cache/memcached/MemcachedCacheTest.java +++ b/cache/src/test/java/org/apache/kylin/cache/memcached/MemcachedCacheTest.java @@ -21,6 +21,8 @@ package org.apache.kylin.cache.memcached; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.net.InetSocketAddress; +import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -81,4 +83,11 @@ public class MemcachedCacheTest extends LocalFileMetadataTestCase { Assert.assertEquals("The value should not change", keyValueMap.get(key), memCachedAdaptor.get(key).get()); } } + + @Test + public void testGetResolvedAddrList() { + String hostsStr = "localhost:11211,fafddafaf:11211,fadfafaerqr:11211"; + List<InetSocketAddress> addrList = MemcachedCache.getResolvedAddrList(hostsStr); + Assert.assertEquals(1, addrList.size()); + } } \ No newline at end of file