if(existingForestConfig instanceof FilteredForestConfiguration) { FilteredForestConfiguration existingFilteredForestConfiguration = (FilteredForestConfiguration) existingForestConfig; for( Forest forest : existingFilteredForestConfiguration.listForests()) { if(forest.getPreferredHostType() == HostType.REQUEST_HOST && !forest.getHost().toLowerCase().equals(forest.getRequestHost().toLowerCase())) { logger.error("ERROR: host unavailable \"" + host + "\", black-listing it for " + suspendTimeForHostUnavailable.toString(), throwable); FilteredForestConfiguration filteredForestConfig = new FilteredForestConfiguration(existingForestConfig); if ( batcher instanceof WriteBatcher ) { filteredForestConfig = filteredForestConfig.withBlackList(host); } else if ( batcher instanceof QueryBatcher ) { List<String> availableHosts = Stream.of(preferredHosts) int randomPos = Math.abs(host.hashCode()) % availableHosts.size(); String randomAvailableHost = availableHosts.get(randomPos); filteredForestConfig = filteredForestConfig.withRenamedHost(host, randomAvailableHost);
openReplicaHost = replaceHost(openReplicaHost, validHosts); requestHost = replaceHost(requestHost, validHosts); host = requestHost; alternateHost = replaceHost(alternateHost, validHosts); host = replaceHost(host, validHosts); if(requestHost != null) requestHost = host; openReplicaHost = replaceHost(openReplicaHost, validHosts); requestHost = replaceHost(requestHost, validHosts); alternateHost = replaceHost(alternateHost, validHosts); host = replaceHost(host, validHosts);
@Test public void testWithInvalidHosts() throws Exception{ if (moveMgr.getConnectionType() == DatabaseClient.ConnectionType.GATEWAY) return; ForestConfiguration forestConfig = moveMgr.readForestConfig(); String host1 = forestConfig.listForests()[0].getPreferredHost(); FilteredForestConfiguration ffg = new FilteredForestConfiguration(forestConfig) .withRenamedHost("someInvalidHostName", "anotherInvalidHostName"); runWithWriteAndQueryBatcher(ffg); ffg = new FilteredForestConfiguration(forestConfig) .withBlackList("someInvalidHostName"); runWithWriteAndQueryBatcher(ffg); ffg = new FilteredForestConfiguration(forestConfig) .withWhiteList("someInvalidHostName") .withWhiteList(host1); runWithWriteAndQueryBatcher(ffg); }
if (moveMgr.getConnectionType() == DatabaseClient.ConnectionType.GATEWAY) return; FilteredForestConfiguration ffg = new FilteredForestConfiguration(forests) .withRenamedHost("host1", "host1a"); Forest[] filteredForests = ffg.listForests(); assertEquals("forestId1", filteredForests[0].getForestId()); ffg.withRenamedHost("openReplicaHost1", "openReplicaHost1a"); filteredForests = ffg.listForests(); assertEquals("forestId1", filteredForests[0].getForestId()); ffg.withRenamedHost("alternateHost1", "alternateHost1a"); filteredForests = ffg.listForests(); assertEquals("forestId1", filteredForests[0].getForestId()); ffg.withRenamedHost("requestHost1", "requestHost1a"); filteredForests = ffg.listForests();
if (moveMgr.getConnectionType() == DatabaseClient.ConnectionType.GATEWAY) return; FilteredForestConfiguration ffg = new FilteredForestConfiguration(forests) .withBlackList("host1") .withBlackList("openReplicaHost2") .withBlackList("alternateHost3") .withBlackList("requestHost4"); Forest[] filteredForests = ffg.listForests();
if (moveMgr.getConnectionType() == DatabaseClient.ConnectionType.GATEWAY) return; FilteredForestConfiguration ffg = new FilteredForestConfiguration(forests) .withWhiteList("host1") .withWhiteList("openReplicaHost2") .withWhiteList("alternateHost3") .withWhiteList("requestHost4"); Forest[] filteredForests = ffg.listForests();
@Test public void testWithWriteAndQueryBatcher() throws Exception{ if (moveMgr.getConnectionType() == DatabaseClient.ConnectionType.GATEWAY) return; ForestConfiguration forestConfig = moveMgr.readForestConfig(); long hostNum = Stream.of(forestConfig.listForests()).map(forest->forest.getPreferredHost()).distinct().count(); if ( hostNum <= 1 ) return; // we're not in a cluster, so this test isn't valid String host1 = forestConfig.listForests()[0].getPreferredHost(); FilteredForestConfiguration ffg = new FilteredForestConfiguration(forestConfig) .withRenamedHost(host1, Inet4Address.getByName(host1).getHostAddress()); runWithWriteAndQueryBatcher(ffg); ffg = new FilteredForestConfiguration(forestConfig) .withWhiteList(host1); runWithWriteAndQueryBatcher(ffg); ffg = new FilteredForestConfiguration(forestConfig) .withBlackList(host1); runWithWriteAndQueryBatcher(ffg); }