use of org.neo4j.causalclustering.load_balancing.filters.Filter in project neo4j by neo4j.
the class FilterConfigParserTest method shouldParseValidConfigs.
@Test
public void shouldParseValidConfigs() throws Exception {
Object[][] validConfigs = { { "min(2);", filter().min(2).newRule().all().build() }, { "groups(5);", filter().groups("5").newRule().all().build() }, { "all()", filter().all().build() }, { "all() -> groups(5);", filter().groups("5").newRule().all().build() }, { "all() -> groups(5);all()", filter().groups("5").newRule().all().build() }, { "all() -> groups(A); all() -> groups(B); halt()", filter().groups("A").newRule().groups("B").build() }, { "groups(groupA);", filter().groups("groupA").newRule().all().build() }, { "groups(groupA,groupB); halt()", filter().groups("groupA", "groupB").build() }, { "groups ( groupA , groupB ); halt()", filter().groups("groupA", "groupB").build() }, { "groups(group1)->groups(group2); halt()", filter().groups("group1").groups("group2").build() }, { "groups(group1)->groups(group2); halt();", filter().groups("group1").groups("group2").build() }, { "groups(group-1)->groups(group-2); halt();", filter().groups("group-1").groups("group-2").build() }, { "groups(group1)->groups(group2)->min(4); groups(group3,group4)->min(2); halt();", filter().groups("group1").groups("group2").min(4).newRule().groups("group3", "group4").min(2).build() }, { "groups(group1,group2,group3,group4)->min(2); groups(group3,group4);", filter().groups("group1", "group2", "group3", "group4").min(2).newRule().groups("group3", "group4").newRule().all().build() } };
// when
for (Object[] validConfig : validConfigs) {
String config = (String) validConfig[0];
Filter expectedFilter = (Filter) validConfig[1];
try {
Filter<ServerInfo> parsedFilter = FilterConfigParser.parse(config);
assertEquals(format("Config '%s' should generate expected filter", config), expectedFilter, parsedFilter);
} catch (InvalidFilterSpecification e) {
fail(format("Config should have been valid: '%s'", config));
}
}
}
use of org.neo4j.causalclustering.load_balancing.filters.Filter in project neo4j by neo4j.
the class UserDefinedConfigurationStrategy method upstreamDatabase.
@Override
public Optional<MemberId> upstreamDatabase() throws UpstreamDatabaseSelectionException {
try {
Filter<ServerInfo> filters = FilterConfigParser.parse(config.get(CausalClusteringSettings.user_defined_upstream_selection_strategy));
Set<ServerInfo> possibleReaders = topologyService.readReplicas().members().entrySet().stream().map(entry -> new ServerInfo(entry.getValue().connectors().boltAddress(), entry.getKey(), entry.getValue().groups())).collect(Collectors.toSet());
CoreTopology coreTopology = topologyService.coreServers();
for (MemberId validCore : coreTopology.members().keySet()) {
Optional<CoreServerInfo> coreServerInfo = coreTopology.find(validCore);
if (coreServerInfo.isPresent()) {
CoreServerInfo serverInfo = coreServerInfo.get();
possibleReaders.add(new ServerInfo(serverInfo.connectors().boltAddress(), validCore, serverInfo.groups()));
}
}
return filters.apply(possibleReaders).stream().map(ServerInfo::memberId).findAny();
} catch (InvalidFilterSpecification invalidFilterSpecification) {
return Optional.empty();
}
}
Aggregations