Commit fba39307 authored by Jason Song's avatar Jason Song

a little refactoring for pr #2867

parent f9b2aa6b
...@@ -34,7 +34,7 @@ public class PortalMetaDomainConsts { ...@@ -34,7 +34,7 @@ public class PortalMetaDomainConsts {
private static final Map<Env, String> metaServerAddressCache = Maps.newConcurrentMap(); private static final Map<Env, String> metaServerAddressCache = Maps.newConcurrentMap();
// initialize meta server provider without cache // initialize meta server provider without cache
private static final PortalMetaServerProvider metaServerProvider = new PortalMetaServerProvider(); private static final PortalMetaServerProvider metaServerProvider = PortalMetaServerProvider.getInstance();
private static final long REFRESH_INTERVAL_IN_SECOND = 60;// 1 min private static final long REFRESH_INTERVAL_IN_SECOND = 60;// 1 min
private static final Logger logger = LoggerFactory.getLogger(PortalMetaDomainConsts.class); private static final Logger logger = LoggerFactory.getLogger(PortalMetaDomainConsts.class);
......
...@@ -30,17 +30,27 @@ public class PortalMetaServerProvider { ...@@ -30,17 +30,27 @@ public class PortalMetaServerProvider {
*/ */
private static final String APOLLO_ENV_PROPERTIES_FILE_PATH = "apollo-env.properties"; private static final String APOLLO_ENV_PROPERTIES_FILE_PATH = "apollo-env.properties";
// thread safe private static final PortalMetaServerProvider instance = new PortalMetaServerProvider();
private static volatile Map<Env, String> domains = initializeDomains();
public PortalMetaServerProvider() { private Map<Env, String> domains;
private PortalMetaServerProvider() {
domains = initializeDomains();
}
public static PortalMetaServerProvider getInstance() {
return instance;
}
String getMetaServerAddress(Env targetEnv) {
String metaServerAddress = domains.get(targetEnv);
return metaServerAddress == null ? null : metaServerAddress.trim();
} }
/** /**
* load all environment's meta address dynamically when this class loaded by JVM * load all environment's meta address dynamically when this class loaded by JVM
*/ */
private static Map<Env, String> initializeDomains() { private Map<Env, String> initializeDomains() {
// find key-value from System Property which key ends with "_meta" (case insensitive) // find key-value from System Property which key ends with "_meta" (case insensitive)
Map<String, String> metaServerAddressesFromSystemProperty = KeyValueUtils.filterWithKeyIgnoreCaseEndsWith(System.getProperties(), "_meta"); Map<String, String> metaServerAddressesFromSystemProperty = KeyValueUtils.filterWithKeyIgnoreCaseEndsWith(System.getProperties(), "_meta");
// remove key's suffix "_meta" (case insensitive) // remove key's suffix "_meta" (case insensitive)
...@@ -77,55 +87,23 @@ public class PortalMetaServerProvider { ...@@ -77,55 +87,23 @@ public class PortalMetaServerProvider {
} }
// log all // log all
logger.info("All environment's meta server address: {}", map); logger.info("Loaded meta server addresses: {}", map);
return map; return map;
} }
/**
* reload all
* environments and meta server addresses
*/
public static void reloadAll() {
domains = initializeDomains();
}
public static String getMetaServerAddress(Env targetEnv) {
String metaServerAddress = domains.get(targetEnv);
return metaServerAddress == null ? null : metaServerAddress.trim();
}
/** /**
* add a environment's meta server address * add a environment's meta server address
* for the feature: add self-define environment in the web ui * for the feature: add self-define environment in the web ui
* @param env
* @param metaServerAddress
*/ */
public static void addMetaServerAddress(Env env, String metaServerAddress) { void mockMetaServerAddress(Env env, String metaServerAddress) {
domains.put(env, metaServerAddress); domains.put(env, metaServerAddress);
} }
/** /**
* delete the meta server address of the environment * only for test
* @param env * reload all environments and meta server addresses
*/ */
public static void deleteMetaServerAddress(Env env) { void reset() {
domains.remove(env); domains = initializeDomains();
}
/**
* update the meta server address of the environment
* @param env
* @param metaServerAddress
*/
public static void updateMetaServerAddress(Env env, String metaServerAddress) {
domains.put(env, metaServerAddress);
}
/**
* clear all environments and meta server addresses saved
*/
public static void clear() {
domains.clear();
} }
} }
...@@ -14,14 +14,14 @@ public class PortalMetaDomainConstsTest extends BaseIntegrationTest { ...@@ -14,14 +14,14 @@ public class PortalMetaDomainConstsTest extends BaseIntegrationTest {
@After @After
public void tearDown() throws Exception { public void tearDown() throws Exception {
super.tearDown(); super.tearDown();
MockMetaServerProvider.clear(); clear();
} }
@Test @Test
public void testGetMetaDomain() { public void testGetMetaDomain() {
// local // local
String localMetaServerAddress = "http://localhost:8080"; String localMetaServerAddress = "http://localhost:8080";
PortalMetaServerProvider.updateMetaServerAddress(Env.LOCAL, localMetaServerAddress); mockMetaServerAddress(Env.LOCAL, localMetaServerAddress);
assertEquals(localMetaServerAddress, PortalMetaDomainConsts.getDomain(Env.LOCAL)); assertEquals(localMetaServerAddress, PortalMetaDomainConsts.getDomain(Env.LOCAL));
// add this environment without meta server address // add this environment without meta server address
...@@ -38,8 +38,8 @@ public class PortalMetaDomainConstsTest extends BaseIntegrationTest { ...@@ -38,8 +38,8 @@ public class PortalMetaDomainConstsTest extends BaseIntegrationTest {
String validServer = " http://localhost:" + PORT + " "; String validServer = " http://localhost:" + PORT + " ";
String invalidServer = "http://localhost:" + findFreePort(); String invalidServer = "http://localhost:" + findFreePort();
MockMetaServerProvider.mock(Env.FAT, validServer + "," + invalidServer); mockMetaServerAddress(Env.FAT, validServer + "," + invalidServer);
MockMetaServerProvider.mock(Env.UAT, invalidServer + "," + validServer); mockMetaServerAddress(Env.UAT, invalidServer + "," + validServer);
assertEquals(validServer.trim(), PortalMetaDomainConsts.getDomain(Env.FAT)); assertEquals(validServer.trim(), PortalMetaDomainConsts.getDomain(Env.FAT));
assertEquals(validServer.trim(), PortalMetaDomainConsts.getDomain(Env.UAT)); assertEquals(validServer.trim(), PortalMetaDomainConsts.getDomain(Env.UAT));
...@@ -50,21 +50,18 @@ public class PortalMetaDomainConstsTest extends BaseIntegrationTest { ...@@ -50,21 +50,18 @@ public class PortalMetaDomainConstsTest extends BaseIntegrationTest {
String invalidServer = "http://localhost:" + findFreePort() + " "; String invalidServer = "http://localhost:" + findFreePort() + " ";
String anotherInvalidServer = "http://localhost:" + findFreePort() + " "; String anotherInvalidServer = "http://localhost:" + findFreePort() + " ";
MockMetaServerProvider.mock(Env.LPT, invalidServer + "," + anotherInvalidServer); mockMetaServerAddress(Env.LPT, invalidServer + "," + anotherInvalidServer);
String metaServer = PortalMetaDomainConsts.getDomain(Env.LPT); String metaServer = PortalMetaDomainConsts.getDomain(Env.LPT);
assertTrue(metaServer.equals(invalidServer.trim()) || metaServer.equals(anotherInvalidServer.trim())); assertTrue(metaServer.equals(invalidServer.trim()) || metaServer.equals(anotherInvalidServer.trim()));
} }
public static class MockMetaServerProvider { private void mockMetaServerAddress(Env env, String metaServerAddress) {
PortalMetaServerProvider.getInstance().mockMetaServerAddress(env, metaServerAddress);
private static void mock(Env env, String metaServerAddress) { }
PortalMetaServerProvider.addMetaServerAddress(env, metaServerAddress);
}
private static void clear() { private void clear() {
PortalMetaServerProvider.clear(); PortalMetaServerProvider.getInstance().reset();
}
} }
} }
\ No newline at end of file
...@@ -8,55 +8,51 @@ import static org.junit.Assert.assertEquals; ...@@ -8,55 +8,51 @@ import static org.junit.Assert.assertEquals;
public class PortalMetaServerProviderTest { public class PortalMetaServerProviderTest {
/** private PortalMetaServerProvider portalMetaServerProvider;
* may be the environments and meta server addresses
* have been clear, so we need to reload when start the every unit test @Before
*/ public void setUp() throws Exception {
@Before portalMetaServerProvider = PortalMetaServerProvider.getInstance();
public void reload() { }
PortalMetaServerProvider.reloadAll();
} @After
public void tearDown() throws Exception {
@After System.clearProperty("dev_meta");
public void tearDown() throws Exception { System.clearProperty("fat_meta");
System.clearProperty("dev_meta"); PortalMetaServerProvider.getInstance().reset();
} }
@Test @Test
public void testFromPropertyFile() { public void testFromPropertyFile() {
assertEquals("http://localhost:8080", PortalMetaServerProvider.getMetaServerAddress(Env.LOCAL)); assertEquals("http://localhost:8080", portalMetaServerProvider.getMetaServerAddress(Env.LOCAL));
assertEquals("${dev_meta}", PortalMetaServerProvider.getMetaServerAddress(Env.DEV)); assertEquals("${dev_meta}", portalMetaServerProvider.getMetaServerAddress(Env.DEV));
assertEquals("${pro_meta}", PortalMetaServerProvider.getMetaServerAddress(Env.PRO)); assertEquals("${pro_meta}", portalMetaServerProvider.getMetaServerAddress(Env.PRO));
} }
/** /**
* testing the environment dynamic added from system property * testing the environment dynamic added from system property
*/ */
@Test @Test
public void testDynamicEnvironmentFromSystemProperty() { public void testDynamicEnvironmentFromSystemProperty() {
String someDevMetaAddress = "someMetaAddress"; String someDevMetaAddress = "someMetaAddress";
String someFatMetaAddress = "someFatMetaAddress"; String someFatMetaAddress = "someFatMetaAddress";
System.setProperty("dev_meta", someDevMetaAddress); System.setProperty("dev_meta", someDevMetaAddress);
System.setProperty("fat_meta", someFatMetaAddress); System.setProperty("fat_meta", someFatMetaAddress);
// reload above added // reload above added
PortalMetaServerProvider.reloadAll(); portalMetaServerProvider.reset();
assertEquals(someDevMetaAddress, PortalMetaServerProvider.getMetaServerAddress(Env.DEV)); assertEquals(someDevMetaAddress, portalMetaServerProvider.getMetaServerAddress(Env.DEV));
assertEquals(someFatMetaAddress, PortalMetaServerProvider.getMetaServerAddress(Env.FAT)); assertEquals(someFatMetaAddress, portalMetaServerProvider.getMetaServerAddress(Env.FAT));
String randomAddress = "randomAddress"; String randomAddress = "randomAddress";
String randomEnvironment = "randomEnvironment"; String randomEnvironment = "randomEnvironment";
System.setProperty(randomEnvironment + "_meta", randomAddress); System.setProperty(randomEnvironment + "_meta", randomAddress);
// reload above added // reload above added
PortalMetaServerProvider.reloadAll(); portalMetaServerProvider.reset();
assertEquals( assertEquals(randomAddress,
randomAddress, portalMetaServerProvider.getMetaServerAddress(Env.valueOf(randomEnvironment)));
PortalMetaServerProvider.getMetaServerAddress(
Env.valueOf(randomEnvironment) // clear the property
) System.clearProperty(randomEnvironment + "_meta");
); }
// clear the property
System.clearProperty(randomEnvironment + "_meta");
}
} }
\ No newline at end of file
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