From 8daa541891da320910f195efc9d6ba7207ab88af Mon Sep 17 00:00:00 2001 From: Yiming Zang Date: Mon, 18 Jul 2016 14:49:59 -0700 Subject: [PATCH] Validate bk read timeout in configuration RB_ID=852868 --- .../DistributedLogConfiguration.java | 9 +++++++ .../distributedlog/impl/BKDLUtils.java | 2 ++ .../TestDistributedLogConfiguration.java | 26 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/distributedlog-core/src/main/java/com/twitter/distributedlog/DistributedLogConfiguration.java b/distributedlog-core/src/main/java/com/twitter/distributedlog/DistributedLogConfiguration.java index 639de210e..0d69f4a1d 100644 --- a/distributedlog-core/src/main/java/com/twitter/distributedlog/DistributedLogConfiguration.java +++ b/distributedlog-core/src/main/java/com/twitter/distributedlog/DistributedLogConfiguration.java @@ -3336,5 +3336,14 @@ public DistributedLogConfiguration setEIInjectReadAheadDelayPercent(int percent) return this; } + /** + * Validate the configuration + */ + public void validate() { + Preconditions.checkArgument(getBKClientReadTimeout() * 1000 > getReadLACLongPollTimeout(), + "Invalid timeout configuration : bkcReadTimeoutSeconds ("+getBKClientReadTimeout()+ + ") should be longer than readLACLongPollTimeout ("+getReadLACLongPollTimeout()+")"); + } + } diff --git a/distributedlog-core/src/main/java/com/twitter/distributedlog/impl/BKDLUtils.java b/distributedlog-core/src/main/java/com/twitter/distributedlog/impl/BKDLUtils.java index b599dc668..dd78a4e7e 100644 --- a/distributedlog-core/src/main/java/com/twitter/distributedlog/impl/BKDLUtils.java +++ b/distributedlog-core/src/main/java/com/twitter/distributedlog/impl/BKDLUtils.java @@ -51,6 +51,8 @@ public static void validateConfAndURI(DistributedLogConfiguration conf, URI uri) throws IllegalArgumentException { if (null == conf) { throw new IllegalArgumentException("Incorrect Configuration"); + } else { + conf.validate(); } if ((null == uri) || (null == uri.getAuthority()) || (null == uri.getPath())) { throw new IllegalArgumentException("Incorrect ZK URI"); diff --git a/distributedlog-core/src/test/java/com/twitter/distributedlog/TestDistributedLogConfiguration.java b/distributedlog-core/src/test/java/com/twitter/distributedlog/TestDistributedLogConfiguration.java index f0c8e9699..8dcb05305 100644 --- a/distributedlog-core/src/test/java/com/twitter/distributedlog/TestDistributedLogConfiguration.java +++ b/distributedlog-core/src/test/java/com/twitter/distributedlog/TestDistributedLogConfiguration.java @@ -102,4 +102,30 @@ public void getEnsemblePlacementResolverClass() throws Exception { .setEnsemblePlacementDnsResolverClass(TestDNSResolver.class); assertEquals(TestDNSResolver.class, conf3.getEnsemblePlacementDnsResolverClass()); } + + @Test(timeout = 200000) + public void validateConfiguration(){ + boolean exceptionThrown=false; + DistributedLogConfiguration conf = new DistributedLogConfiguration(); + // validate default configuration + conf.validate(); + // test invalid timeout, should throw exception + conf.setReadLACLongPollTimeout(conf.getBKClientReadTimeout() * 1000); + try { + conf.validate(); + } catch (IllegalArgumentException e){ + exceptionThrown=true; + } + assertTrue(exceptionThrown); + exceptionThrown=false; + conf.setReadLACLongPollTimeout(conf.getBKClientReadTimeout() * 1000 * 2); + try { + conf.validate(); + } catch (IllegalArgumentException e){ + exceptionThrown=true; + } + assertTrue(exceptionThrown); + } + + }