Commit f30ab9c9 by nobodyiam

misc changes

1. add log output to console for config and admin service 2. remove dev, lpt, tooling logic 3. add default 2 seconds of initial delay to long polling
parent 58bd26e3
......@@ -4,7 +4,9 @@
<property name="LOG_FILE"
value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}apollo-adminservice.log}" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
......@@ -103,9 +103,18 @@ public class RemoteConfigLongPollService {
final String appId = m_configUtil.getAppId();
final String cluster = m_configUtil.getCluster();
final String dataCenter = m_configUtil.getDataCenter();
final long longPollingInitialDelayInMills = m_configUtil.getLongPollingInitialDelayInMills();
m_longPollingService.submit(new Runnable() {
@Override
public void run() {
if (longPollingInitialDelayInMills > 0) {
try {
logger.debug("Long polling will start in {} ms.", longPollingInitialDelayInMills);
TimeUnit.MILLISECONDS.sleep(longPollingInitialDelayInMills);
} catch (InterruptedException e) {
//ignore
}
}
doLongPollingRefresh(appId, cluster, dataCenter);
}
});
......
......@@ -18,7 +18,6 @@ import com.google.common.base.Strings;
*/
public class ConfigUtil {
private static final Logger logger = LoggerFactory.getLogger(ConfigUtil.class);
private static final String TOOLING_CLUSTER = "tooling";
private int refreshInterval = 5;
private TimeUnit refreshIntervalTimeUnit = TimeUnit.MINUTES;
private int connectTimeout = 1000; //1 second
......@@ -33,6 +32,7 @@ public class ConfigUtil {
private long maxConfigCacheSize = 500;//500 cache key
private long configCacheExpireTime = 1;//1 minute
private TimeUnit configCacheExpireTimeUnit = TimeUnit.MINUTES;//1 minute
private long longPollingInitialDelayInMills = 2000;//2 seconds
public ConfigUtil() {
initRefreshInterval();
......@@ -41,6 +41,7 @@ public class ConfigUtil {
initCluster();
initQPS();
initMaxConfigCacheSize();
initLongPollingInitialDelayInMills();
}
/**
......@@ -71,19 +72,6 @@ public class ConfigUtil {
//Load data center from system property
cluster = System.getProperty(ConfigConsts.APOLLO_CLUSTER_KEY);
String env = Foundation.server().getEnvType();
//LPT and DEV will be treated as a cluster(lower case)
if (Strings.isNullOrEmpty(cluster) &&
(Env.DEV.name().equalsIgnoreCase(env) || Env.LPT.name().equalsIgnoreCase(env))
) {
cluster = env.toLowerCase();
}
//Use TOOLING cluster if tooling=true in server.properties
if (Strings.isNullOrEmpty(cluster) && isToolingZone()) {
cluster = TOOLING_CLUSTER;
}
//Use data center as cluster
if (Strings.isNullOrEmpty(cluster)) {
cluster = getDataCenter();
......@@ -95,11 +83,6 @@ public class ConfigUtil {
}
}
private boolean isToolingZone() {
//do not use the new isTooling method since it might not be available in the client side
return "true".equalsIgnoreCase(Foundation.server().getProperty("tooling", "false").trim());
}
/**
* Get the cluster name for the current application.
*
......@@ -265,4 +248,19 @@ public class ConfigUtil {
public TimeUnit getConfigCacheExpireTimeUnit() {
return configCacheExpireTimeUnit;
}
private void initLongPollingInitialDelayInMills() {
String customizedLongPollingInitialDelay = System.getProperty("apollo.longPollingInitialDelayInMills");
if (!Strings.isNullOrEmpty(customizedLongPollingInitialDelay)) {
try {
longPollingInitialDelayInMills = Long.valueOf(customizedLongPollingInitialDelay);
} catch (Throwable ex) {
logger.error("Config for apollo.longPollingInitialDelayInMills is invalid: {}", customizedLongPollingInitialDelay);
}
}
}
public long getLongPollingInitialDelayInMills() {
return longPollingInitialDelayInMills;
}
}
......@@ -22,6 +22,7 @@ import com.ctrip.framework.apollo.spring.JavaConfigAnnotationTest;
import com.ctrip.framework.apollo.spring.JavaConfigPlaceholderTest;
import com.ctrip.framework.apollo.spring.XMLConfigAnnotationTest;
import com.ctrip.framework.apollo.spring.XmlConfigPlaceholderTest;
import com.ctrip.framework.apollo.util.ConfigUtilTest;
import com.ctrip.framework.apollo.util.ExceptionUtilTest;
import com.ctrip.framework.apollo.util.parser.DateParserTest;
import com.ctrip.framework.apollo.util.parser.DurationParserTest;
......@@ -34,7 +35,7 @@ import com.ctrip.framework.apollo.util.parser.DurationParserTest;
ConfigIntegrationTest.class, ExceptionUtilTest.class, XmlConfigFileTest.class, PropertiesConfigFileTest.class,
RemoteConfigLongPollServiceTest.class, DateParserTest.class, DurationParserTest.class, JsonConfigFileTest.class,
XmlConfigPlaceholderTest.class, JavaConfigPlaceholderTest.class, XMLConfigAnnotationTest.class,
JavaConfigAnnotationTest.class
JavaConfigAnnotationTest.class, ConfigUtilTest.class
})
public class AllTests {
......
......@@ -191,6 +191,11 @@ public abstract class BaseIntegrationTest{
public TimeUnit getOnErrorRetryIntervalTimeUnit() {
return TimeUnit.MILLISECONDS;
}
@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
}
/**
......
......@@ -62,6 +62,7 @@ public class RemoteConfigLongPollServiceTest {
MockInjector.setInstance(HttpUtil.class, httpUtil);
someServerUrl = "http://someServer";
ServiceDTO serviceDTO = mock(ServiceDTO.class);
when(serviceDTO.getHomepageUrl()).thenReturn(someServerUrl);
when(configServiceLocator.getConfigServices()).thenReturn(Lists.newArrayList(serviceDTO));
......@@ -74,7 +75,6 @@ public class RemoteConfigLongPollServiceTest {
responseType =
(Type) ReflectionTestUtils.getField(remoteConfigLongPollService, "m_responseType");
someServerUrl = "http://someServer";
someAppId = "someAppId";
someCluster = "someCluster";
}
......@@ -367,6 +367,11 @@ public class RemoteConfigLongPollServiceTest {
public int getLongPollQPS() {
return 200;
}
@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
}
}
......@@ -250,6 +250,11 @@ public class RemoteConfigRepositoryTest {
public TimeUnit getOnErrorRetryIntervalTimeUnit() {
return TimeUnit.MILLISECONDS;
}
@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
}
public static class MockHttpUtil extends HttpUtil {
......
package com.ctrip.framework.apollo.util;
import com.ctrip.framework.apollo.core.ConfigConsts;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public class ConfigUtilTest {
@After
public void tearDown() throws Exception {
System.clearProperty(ConfigConsts.APOLLO_CLUSTER_KEY);
System.clearProperty("apollo.connectTimeout");
System.clearProperty("apollo.readTimeout");
System.clearProperty("apollo.refreshInterval");
System.clearProperty("apollo.loadConfigQPS");
System.clearProperty("apollo.longPollQPS");
System.clearProperty("apollo.configCacheSize");
System.clearProperty("apollo.longPollingInitialDelayInMills");
}
@Test
public void testApolloCluster() throws Exception {
String someCluster = "someCluster";
System.setProperty(ConfigConsts.APOLLO_CLUSTER_KEY, someCluster);
ConfigUtil configUtil = new ConfigUtil();
assertEquals(someCluster, configUtil.getCluster());
}
@Test
public void testCustomizeConnectTimeout() throws Exception {
int someConnectTimeout = 1;
System.setProperty("apollo.connectTimeout", String.valueOf(someConnectTimeout));
ConfigUtil configUtil = new ConfigUtil();
assertEquals(someConnectTimeout, configUtil.getConnectTimeout());
}
@Test
public void testCustomizeInvalidConnectTimeout() throws Exception {
String someInvalidConnectTimeout = "a";
System.setProperty("apollo.connectTimeout", someInvalidConnectTimeout);
ConfigUtil configUtil = new ConfigUtil();
assertTrue(configUtil.getConnectTimeout() > 0);
}
@Test
public void testCustomizeReadTimeout() throws Exception {
int someReadTimeout = 1;
System.setProperty("apollo.readTimeout", String.valueOf(someReadTimeout));
ConfigUtil configUtil = new ConfigUtil();
assertEquals(someReadTimeout, configUtil.getReadTimeout());
}
@Test
public void testCustomizeInvalidReadTimeout() throws Exception {
String someInvalidReadTimeout = "a";
System.setProperty("apollo.readTimeout", someInvalidReadTimeout);
ConfigUtil configUtil = new ConfigUtil();
assertTrue(configUtil.getReadTimeout() > 0);
}
@Test
public void testCustomizeRefreshInterval() throws Exception {
int someRefreshInterval = 1;
System.setProperty("apollo.refreshInterval", String.valueOf(someRefreshInterval));
ConfigUtil configUtil = new ConfigUtil();
assertEquals(someRefreshInterval, configUtil.getRefreshInterval());
}
@Test
public void testCustomizeInvalidRefreshInterval() throws Exception {
String someInvalidRefreshInterval = "a";
System.setProperty("apollo.refreshInterval", someInvalidRefreshInterval);
ConfigUtil configUtil = new ConfigUtil();
assertTrue(configUtil.getRefreshInterval() > 0);
}
@Test
public void testCustomizeLoadConfigQPS() throws Exception {
int someQPS = 1;
System.setProperty("apollo.loadConfigQPS", String.valueOf(someQPS));
ConfigUtil configUtil = new ConfigUtil();
assertEquals(someQPS, configUtil.getLoadConfigQPS());
}
@Test
public void testCustomizeInvalidLoadConfigQPS() throws Exception {
String someInvalidQPS = "a";
System.setProperty("apollo.loadConfigQPS", someInvalidQPS);
ConfigUtil configUtil = new ConfigUtil();
assertTrue(configUtil.getLoadConfigQPS() > 0);
}
@Test
public void testCustomizeLongPollQPS() throws Exception {
int someQPS = 1;
System.setProperty("apollo.longPollQPS", String.valueOf(someQPS));
ConfigUtil configUtil = new ConfigUtil();
assertEquals(someQPS, configUtil.getLongPollQPS());
}
@Test
public void testCustomizeInvalidLongPollQPS() throws Exception {
String someInvalidQPS = "a";
System.setProperty("apollo.longPollQPS", someInvalidQPS);
ConfigUtil configUtil = new ConfigUtil();
assertTrue(configUtil.getLongPollQPS() > 0);
}
@Test
public void testCustomizeMaxConfigCacheSize() throws Exception {
long someCacheSize = 1;
System.setProperty("apollo.configCacheSize", String.valueOf(someCacheSize));
ConfigUtil configUtil = new ConfigUtil();
assertEquals(someCacheSize, configUtil.getMaxConfigCacheSize());
}
@Test
public void testCustomizeInvalidMaxConfigCacheSize() throws Exception {
String someInvalidCacheSize = "a";
System.setProperty("apollo.configCacheSize", someInvalidCacheSize);
ConfigUtil configUtil = new ConfigUtil();
assertTrue(configUtil.getMaxConfigCacheSize() > 0);
}
@Test
public void testCustomizeLongPollingInitialDelayInMills() throws Exception {
long someLongPollingDelayInMills = 1;
System.setProperty("apollo.longPollingInitialDelayInMills", String.valueOf(someLongPollingDelayInMills));
ConfigUtil configUtil = new ConfigUtil();
assertEquals(someLongPollingDelayInMills, configUtil.getLongPollingInitialDelayInMills());
}
@Test
public void testCustomizeInvalidLongPollingInitialDelayInMills() throws Exception {
String someInvalidLongPollingDelayInMills = "a";
System.setProperty("apollo.longPollingInitialDelayInMills", someInvalidLongPollingDelayInMills);
ConfigUtil configUtil = new ConfigUtil();
assertTrue(configUtil.getLongPollingInitialDelayInMills() > 0);
}
}
\ No newline at end of file
......@@ -4,7 +4,9 @@
<property name="LOG_FILE"
value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}apollo-configservice.log}" />
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
......@@ -50,7 +50,7 @@ public class AppNamespaceServiceWithCacheTest {
appNamespaceRepository);
ReflectionTestUtils.setField(appNamespaceServiceWithCache, "bizConfig", bizConfig);
scanInterval = 10;
scanInterval = 50;
scanIntervalTimeUnit = TimeUnit.MILLISECONDS;
when(bizConfig.appNamespaceCacheRebuildInterval()).thenReturn(scanInterval);
when(bizConfig.appNamespaceCacheRebuildIntervalTimeUnit()).thenReturn(scanIntervalTimeUnit);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment