提交 f30ab9c9 编写于 作者: N 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
上级 58bd26e3
...@@ -4,7 +4,9 @@ ...@@ -4,7 +4,9 @@
<property name="LOG_FILE" <property name="LOG_FILE"
value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}apollo-adminservice.log}" /> 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/file-appender.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO"> <root level="INFO">
<appender-ref ref="FILE" /> <appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root> </root>
</configuration> </configuration>
...@@ -103,9 +103,18 @@ public class RemoteConfigLongPollService { ...@@ -103,9 +103,18 @@ public class RemoteConfigLongPollService {
final String appId = m_configUtil.getAppId(); final String appId = m_configUtil.getAppId();
final String cluster = m_configUtil.getCluster(); final String cluster = m_configUtil.getCluster();
final String dataCenter = m_configUtil.getDataCenter(); final String dataCenter = m_configUtil.getDataCenter();
final long longPollingInitialDelayInMills = m_configUtil.getLongPollingInitialDelayInMills();
m_longPollingService.submit(new Runnable() { m_longPollingService.submit(new Runnable() {
@Override @Override
public void run() { 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); doLongPollingRefresh(appId, cluster, dataCenter);
} }
}); });
......
...@@ -18,7 +18,6 @@ import com.google.common.base.Strings; ...@@ -18,7 +18,6 @@ import com.google.common.base.Strings;
*/ */
public class ConfigUtil { public class ConfigUtil {
private static final Logger logger = LoggerFactory.getLogger(ConfigUtil.class); private static final Logger logger = LoggerFactory.getLogger(ConfigUtil.class);
private static final String TOOLING_CLUSTER = "tooling";
private int refreshInterval = 5; private int refreshInterval = 5;
private TimeUnit refreshIntervalTimeUnit = TimeUnit.MINUTES; private TimeUnit refreshIntervalTimeUnit = TimeUnit.MINUTES;
private int connectTimeout = 1000; //1 second private int connectTimeout = 1000; //1 second
...@@ -33,6 +32,7 @@ public class ConfigUtil { ...@@ -33,6 +32,7 @@ public class ConfigUtil {
private long maxConfigCacheSize = 500;//500 cache key private long maxConfigCacheSize = 500;//500 cache key
private long configCacheExpireTime = 1;//1 minute private long configCacheExpireTime = 1;//1 minute
private TimeUnit configCacheExpireTimeUnit = TimeUnit.MINUTES;//1 minute private TimeUnit configCacheExpireTimeUnit = TimeUnit.MINUTES;//1 minute
private long longPollingInitialDelayInMills = 2000;//2 seconds
public ConfigUtil() { public ConfigUtil() {
initRefreshInterval(); initRefreshInterval();
...@@ -41,6 +41,7 @@ public class ConfigUtil { ...@@ -41,6 +41,7 @@ public class ConfigUtil {
initCluster(); initCluster();
initQPS(); initQPS();
initMaxConfigCacheSize(); initMaxConfigCacheSize();
initLongPollingInitialDelayInMills();
} }
/** /**
...@@ -71,19 +72,6 @@ public class ConfigUtil { ...@@ -71,19 +72,6 @@ public class ConfigUtil {
//Load data center from system property //Load data center from system property
cluster = System.getProperty(ConfigConsts.APOLLO_CLUSTER_KEY); 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 //Use data center as cluster
if (Strings.isNullOrEmpty(cluster)) { if (Strings.isNullOrEmpty(cluster)) {
cluster = getDataCenter(); cluster = getDataCenter();
...@@ -95,11 +83,6 @@ public class ConfigUtil { ...@@ -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. * Get the cluster name for the current application.
* *
...@@ -265,4 +248,19 @@ public class ConfigUtil { ...@@ -265,4 +248,19 @@ public class ConfigUtil {
public TimeUnit getConfigCacheExpireTimeUnit() { public TimeUnit getConfigCacheExpireTimeUnit() {
return configCacheExpireTimeUnit; 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; ...@@ -22,6 +22,7 @@ import com.ctrip.framework.apollo.spring.JavaConfigAnnotationTest;
import com.ctrip.framework.apollo.spring.JavaConfigPlaceholderTest; import com.ctrip.framework.apollo.spring.JavaConfigPlaceholderTest;
import com.ctrip.framework.apollo.spring.XMLConfigAnnotationTest; import com.ctrip.framework.apollo.spring.XMLConfigAnnotationTest;
import com.ctrip.framework.apollo.spring.XmlConfigPlaceholderTest; 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.ExceptionUtilTest;
import com.ctrip.framework.apollo.util.parser.DateParserTest; import com.ctrip.framework.apollo.util.parser.DateParserTest;
import com.ctrip.framework.apollo.util.parser.DurationParserTest; import com.ctrip.framework.apollo.util.parser.DurationParserTest;
...@@ -34,7 +35,7 @@ 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, ConfigIntegrationTest.class, ExceptionUtilTest.class, XmlConfigFileTest.class, PropertiesConfigFileTest.class,
RemoteConfigLongPollServiceTest.class, DateParserTest.class, DurationParserTest.class, JsonConfigFileTest.class, RemoteConfigLongPollServiceTest.class, DateParserTest.class, DurationParserTest.class, JsonConfigFileTest.class,
XmlConfigPlaceholderTest.class, JavaConfigPlaceholderTest.class, XMLConfigAnnotationTest.class, XmlConfigPlaceholderTest.class, JavaConfigPlaceholderTest.class, XMLConfigAnnotationTest.class,
JavaConfigAnnotationTest.class JavaConfigAnnotationTest.class, ConfigUtilTest.class
}) })
public class AllTests { public class AllTests {
......
...@@ -191,6 +191,11 @@ public abstract class BaseIntegrationTest{ ...@@ -191,6 +191,11 @@ public abstract class BaseIntegrationTest{
public TimeUnit getOnErrorRetryIntervalTimeUnit() { public TimeUnit getOnErrorRetryIntervalTimeUnit() {
return TimeUnit.MILLISECONDS; return TimeUnit.MILLISECONDS;
} }
@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
} }
/** /**
......
...@@ -62,6 +62,7 @@ public class RemoteConfigLongPollServiceTest { ...@@ -62,6 +62,7 @@ public class RemoteConfigLongPollServiceTest {
MockInjector.setInstance(HttpUtil.class, httpUtil); MockInjector.setInstance(HttpUtil.class, httpUtil);
someServerUrl = "http://someServer";
ServiceDTO serviceDTO = mock(ServiceDTO.class); ServiceDTO serviceDTO = mock(ServiceDTO.class);
when(serviceDTO.getHomepageUrl()).thenReturn(someServerUrl); when(serviceDTO.getHomepageUrl()).thenReturn(someServerUrl);
when(configServiceLocator.getConfigServices()).thenReturn(Lists.newArrayList(serviceDTO)); when(configServiceLocator.getConfigServices()).thenReturn(Lists.newArrayList(serviceDTO));
...@@ -74,7 +75,6 @@ public class RemoteConfigLongPollServiceTest { ...@@ -74,7 +75,6 @@ public class RemoteConfigLongPollServiceTest {
responseType = responseType =
(Type) ReflectionTestUtils.getField(remoteConfigLongPollService, "m_responseType"); (Type) ReflectionTestUtils.getField(remoteConfigLongPollService, "m_responseType");
someServerUrl = "http://someServer";
someAppId = "someAppId"; someAppId = "someAppId";
someCluster = "someCluster"; someCluster = "someCluster";
} }
...@@ -367,6 +367,11 @@ public class RemoteConfigLongPollServiceTest { ...@@ -367,6 +367,11 @@ public class RemoteConfigLongPollServiceTest {
public int getLongPollQPS() { public int getLongPollQPS() {
return 200; return 200;
} }
@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
} }
} }
...@@ -250,6 +250,11 @@ public class RemoteConfigRepositoryTest { ...@@ -250,6 +250,11 @@ public class RemoteConfigRepositoryTest {
public TimeUnit getOnErrorRetryIntervalTimeUnit() { public TimeUnit getOnErrorRetryIntervalTimeUnit() {
return TimeUnit.MILLISECONDS; return TimeUnit.MILLISECONDS;
} }
@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
} }
public static class MockHttpUtil extends HttpUtil { 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 @@ ...@@ -4,7 +4,9 @@
<property name="LOG_FILE" <property name="LOG_FILE"
value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}apollo-configservice.log}" /> 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/file-appender.xml" />
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO"> <root level="INFO">
<appender-ref ref="FILE" /> <appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root> </root>
</configuration> </configuration>
...@@ -50,7 +50,7 @@ public class AppNamespaceServiceWithCacheTest { ...@@ -50,7 +50,7 @@ public class AppNamespaceServiceWithCacheTest {
appNamespaceRepository); appNamespaceRepository);
ReflectionTestUtils.setField(appNamespaceServiceWithCache, "bizConfig", bizConfig); ReflectionTestUtils.setField(appNamespaceServiceWithCache, "bizConfig", bizConfig);
scanInterval = 10; scanInterval = 50;
scanIntervalTimeUnit = TimeUnit.MILLISECONDS; scanIntervalTimeUnit = TimeUnit.MILLISECONDS;
when(bizConfig.appNamespaceCacheRebuildInterval()).thenReturn(scanInterval); when(bizConfig.appNamespaceCacheRebuildInterval()).thenReturn(scanInterval);
when(bizConfig.appNamespaceCacheRebuildIntervalTimeUnit()).thenReturn(scanIntervalTimeUnit); when(bizConfig.appNamespaceCacheRebuildIntervalTimeUnit()).thenReturn(scanIntervalTimeUnit);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册