提交 bdacf5a5 编写于 作者: J Jason Song

Add local dev mode

上级 8d7991c4
......@@ -184,6 +184,7 @@ public class LocalFileConfigRepository extends AbstractConfigRepository
properties = new Properties();
properties.load(in);
logger.debug("Loading local config file {} successfully!", file.getAbsolutePath());
} catch (IOException ex) {
Cat.logError(ex);
throw new ApolloConfigException(String
......
......@@ -9,9 +9,11 @@ import com.ctrip.framework.apollo.internals.LocalFileConfigRepository;
import com.ctrip.framework.apollo.internals.PropertiesConfigFile;
import com.ctrip.framework.apollo.internals.RemoteConfigRepository;
import com.ctrip.framework.apollo.internals.XmlConfigFile;
import com.ctrip.framework.apollo.util.ConfigUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.unidal.lookup.annotation.Inject;
import org.unidal.lookup.annotation.Named;
/**
......@@ -20,6 +22,8 @@ import org.unidal.lookup.annotation.Named;
@Named(type = ConfigFactory.class)
public class DefaultConfigFactory implements ConfigFactory {
private static final Logger logger = LoggerFactory.getLogger(DefaultConfigFactory.class);
@Inject
private ConfigUtil m_configUtil;
@Override
public Config create(String namespace) {
......@@ -44,7 +48,13 @@ public class DefaultConfigFactory implements ConfigFactory {
LocalFileConfigRepository createLocalConfigRepository(String namespace) {
LocalFileConfigRepository localFileConfigRepository =
new LocalFileConfigRepository(namespace);
localFileConfigRepository.setUpstreamRepository(createRemoteConfigRepository(namespace));
if (m_configUtil.isInLocalMode()) {
logger.warn(
"==== Apollo is in local mode! Won't pull configs from remote server for namespace {} ! ====",
namespace);
} else {
localFileConfigRepository.setUpstreamRepository(createRemoteConfigRepository(namespace));
}
return localFileConfigRepository;
}
......
......@@ -184,4 +184,14 @@ public class ConfigUtil {
//TODO call Framework Foundation to get the default local cache dir
return String.format("/opt/data/%s", getAppId());
}
public boolean isInLocalMode() {
try {
Env env = getApolloEnv();
return env == Env.LOCAL;
} catch (Throwable ex) {
//ignore
}
return false;
}
}
......@@ -12,6 +12,11 @@
<component>
<role>com.ctrip.framework.apollo.spi.ConfigFactory</role>
<implementation>com.ctrip.framework.apollo.spi.DefaultConfigFactory</implementation>
<requirements>
<requirement>
<role>com.ctrip.framework.apollo.util.ConfigUtil</role>
</requirement>
</requirements>
</component>
<component>
<role>com.ctrip.framework.apollo.spi.ConfigRegistry</role>
......
......@@ -50,7 +50,7 @@ public abstract class BaseIntegrationTest extends ComponentTestCase {
@BeforeClass
public static void beforeClass() throws Exception {
File apolloEnvPropertiesFile = new File(ClassLoaderUtil.getClassPath(), "apollo-env.properties");
Files.write("local.meta=" + metaServiceUrl, apolloEnvPropertiesFile, Charsets.UTF_8);
Files.write("dev.meta=" + metaServiceUrl, apolloEnvPropertiesFile, Charsets.UTF_8);
apolloEnvPropertiesFile.deleteOnExit();
}
......@@ -159,7 +159,7 @@ public abstract class BaseIntegrationTest extends ComponentTestCase {
@Override
public Env getApolloEnv() {
return Env.LOCAL;
return Env.DEV;
}
@Override
......
......@@ -14,6 +14,7 @@ import com.ctrip.framework.apollo.core.ConfigConsts;
import com.ctrip.framework.apollo.core.dto.ApolloConfig;
import com.ctrip.framework.apollo.core.dto.ApolloConfigNotification;
import com.ctrip.framework.apollo.core.utils.ClassLoaderUtil;
import com.ctrip.framework.apollo.internals.RemoteConfigLongPollService;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import org.eclipse.jetty.server.Request;
......@@ -22,6 +23,7 @@ import org.eclipse.jetty.server.handler.ContextHandler;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import java.io.File;
import java.io.FileOutputStream;
......@@ -50,6 +52,7 @@ public class ConfigIntegrationTest extends BaseIntegrationTest {
private File configDir;
private String defaultNamespace;
private String someOtherNamespace;
private RemoteConfigLongPollService remoteConfigLongPollService;
@Before
public void setUp() throws Exception {
......@@ -63,11 +66,13 @@ public class ConfigIntegrationTest extends BaseIntegrationTest {
configDir.delete();
}
configDir.mkdirs();
remoteConfigLongPollService = lookup(RemoteConfigLongPollService.class);
}
@Override
@After
public void tearDown() throws Exception {
ReflectionTestUtils.invokeMethod(remoteConfigLongPollService, "stopLongPollingRefresh");
recursiveDelete(configDir);
super.tearDown();
}
......@@ -309,7 +314,7 @@ public class ConfigIntegrationTest extends BaseIntegrationTest {
apolloConfig.getConfigurations().put(someKey, anotherValue);
longPollFinished.get(pollTimeoutInMS * 50, TimeUnit.MILLISECONDS);
longPollFinished.get(5000, TimeUnit.MILLISECONDS);
assertEquals(anotherValue, config.getProperty(someKey, null));
......@@ -361,8 +366,8 @@ public class ConfigIntegrationTest extends BaseIntegrationTest {
apolloConfig.getConfigurations().put(someKey, anotherValue);
longPollFinished.get(pollTimeoutInMS * 20, TimeUnit.MILLISECONDS);
someOtherNamespacelongPollFinished.get(pollTimeoutInMS * 20, TimeUnit.MILLISECONDS);
longPollFinished.get(5000, TimeUnit.MILLISECONDS);
someOtherNamespacelongPollFinished.get(5000, TimeUnit.MILLISECONDS);
assertEquals(anotherValue, config.getProperty(someKey, null));
assertEquals(anotherValue, someOtherConfig.getProperty(someKey, null));
......
......@@ -186,6 +186,7 @@ public class RemoteConfigRepositoryTest extends ComponentTestCase {
.assembleQueryConfigUrl(someUri, someAppId, someCluster, someNamespace, null,
someApolloConfig);
remoteConfigLongPollService.stopLongPollingRefresh();
assertTrue(queryConfigUrl
.contains(
"http://someServer/configs/someAppId/someCluster+%20&.-_someSign/" + someNamespace));
......
......@@ -3,13 +3,16 @@ package com.ctrip.framework.apollo.spi;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigFile;
import com.ctrip.framework.apollo.core.enums.ConfigFileFormat;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.internals.DefaultConfig;
import com.ctrip.framework.apollo.internals.LocalFileConfigRepository;
import com.ctrip.framework.apollo.internals.PropertiesConfigFile;
import com.ctrip.framework.apollo.internals.XmlConfigFile;
import com.ctrip.framework.apollo.util.ConfigUtil;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.util.ReflectionTestUtils;
import org.unidal.lookup.ComponentTestCase;
import java.util.Properties;
......@@ -17,8 +20,8 @@ import java.util.Properties;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
......@@ -29,10 +32,15 @@ import static org.mockito.Mockito.when;
*/
public class DefaultConfigFactoryTest extends ComponentTestCase {
private DefaultConfigFactory defaultConfigFactory;
private static String someAppId;
private static Env someEnv;
@Before
public void setUp() throws Exception {
super.setUp();
someAppId = "someId";
someEnv = Env.DEV;
defineComponent(ConfigUtil.class, MockConfigUtil.class);
defaultConfigFactory = spy((DefaultConfigFactory) lookup(ConfigFactory.class));
}
......@@ -56,6 +64,17 @@ public class DefaultConfigFactoryTest extends ComponentTestCase {
assertEquals(someValue, result.getProperty(someKey, null));
}
@Test
public void testCreateLocalConfigRepositoryInLocalDev() throws Exception {
String someNamespace = "someName";
someEnv = Env.LOCAL;
LocalFileConfigRepository localFileConfigRepository =
defaultConfigFactory.createLocalConfigRepository(someNamespace);
assertNull(ReflectionTestUtils.getField(localFileConfigRepository, "m_upstream"));
}
@Test
public void testCreateConfigFile() throws Exception {
String someNamespace = "someName";
......@@ -82,4 +101,16 @@ public class DefaultConfigFactoryTest extends ComponentTestCase {
assertEquals(anotherNamespace, xmlConfigFile.getNamespace());
}
public static class MockConfigUtil extends ConfigUtil {
@Override
public String getAppId() {
return someAppId;
}
@Override
public Env getApolloEnv() {
return someEnv;
}
}
}
......@@ -10,7 +10,7 @@
</appenders>
<loggers>
<logger name="com.ctrip.framework.apollo" additivity="false" level="trace">
<AppenderRef ref="Async" level="INFO"/>
<AppenderRef ref="Async" level="DEBUG"/>
</logger>
<root level="INFO">
<AppenderRef ref="Async"/>
......
......@@ -159,7 +159,7 @@ public class ConfigFileController implements ReleaseMessageListener {
String result = localCache.getIfPresent(cacheKey);
if (Strings.isNullOrEmpty(result)) {
Cat.logEvent("ConfigFile-Cache-Miss", cacheKey);
Cat.logEvent("ConfigFile.Cache.Miss", cacheKey);
ApolloConfig apolloConfig =
configController
.queryConfig(appId, clusterName, namespace, dataCenter, "-1", clientIp,
......@@ -193,7 +193,7 @@ public class ConfigFileController implements ReleaseMessageListener {
cacheKey2WatchedKeys.putAll(cacheKey, watchedKeys);
logger.debug("added cache for key: {}", cacheKey);
} else {
Cat.logEvent("ConfigFile-Cache-Hit", cacheKey);
Cat.logEvent("ConfigFile.Cache.Hit", cacheKey);
}
return result;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册