Skip to content

Commit

Permalink
misc changes
Browse files Browse the repository at this point in the history
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
  • Loading branch information
nobodyiam committed Jun 11, 2017
1 parent 58bd26e commit f30ab9c
Show file tree
Hide file tree
Showing 10 changed files with 225 additions and 22 deletions.
2 changes: 2 additions & 0 deletions apollo-adminservice/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,18 @@ private void startLongPolling() {
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);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
*/
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
Expand All @@ -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();
Expand All @@ -41,6 +41,7 @@ public ConfigUtil() {
initCluster();
initQPS();
initMaxConfigCacheSize();
initLongPollingInitialDelayInMills();
}

/**
Expand Down Expand Up @@ -71,19 +72,6 @@ private void initCluster() {
//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();
Expand All @@ -95,11 +83,6 @@ private void initCluster() {
}
}

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.
*
Expand Down Expand Up @@ -265,4 +248,19 @@ public long getConfigCacheExpireTime() {
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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
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;
Expand All @@ -34,7 +35,7 @@
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 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,11 @@ public long getOnErrorRetryInterval() {
public TimeUnit getOnErrorRetryIntervalTimeUnit() {
return TimeUnit.MILLISECONDS;
}

@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ public void setUp() throws Exception {

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));
Expand All @@ -74,7 +75,6 @@ public void setUp() throws Exception {
responseType =
(Type) ReflectionTestUtils.getField(remoteConfigLongPollService, "m_responseType");

someServerUrl = "http://someServer";
someAppId = "someAppId";
someCluster = "someCluster";
}
Expand Down Expand Up @@ -367,6 +367,11 @@ public int getLoadConfigQPS() {
public int getLongPollQPS() {
return 200;
}

@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,11 @@ public long getOnErrorRetryInterval() {
public TimeUnit getOnErrorRetryIntervalTimeUnit() {
return TimeUnit.MILLISECONDS;
}

@Override
public long getLongPollingInitialDelayInMills() {
return 0;
}
}

public static class MockHttpUtil extends HttpUtil {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
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([email protected])
*/
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);
}
}
2 changes: 2 additions & 0 deletions apollo-configservice/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public void setUp() throws Exception {
appNamespaceRepository);
ReflectionTestUtils.setField(appNamespaceServiceWithCache, "bizConfig", bizConfig);

scanInterval = 10;
scanInterval = 50;
scanIntervalTimeUnit = TimeUnit.MILLISECONDS;
when(bizConfig.appNamespaceCacheRebuildInterval()).thenReturn(scanInterval);
when(bizConfig.appNamespaceCacheRebuildIntervalTimeUnit()).thenReturn(scanIntervalTimeUnit);
Expand Down

0 comments on commit f30ab9c

Please sign in to comment.