Search in sources :

Example 1 with Filter

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));
        }
    }
}
Also used : Filter(org.neo4j.causalclustering.load_balancing.filters.Filter) Test(org.junit.Test)

Example 2 with Filter

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();
    }
}
Also used : Service(org.neo4j.helpers.Service) InvalidFilterSpecification(org.neo4j.causalclustering.load_balancing.plugins.server_policies.InvalidFilterSpecification) CausalClusteringSettings(org.neo4j.causalclustering.core.CausalClusteringSettings) Optional(java.util.Optional) Set(java.util.Set) MemberId(org.neo4j.causalclustering.identity.MemberId) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) Filter(org.neo4j.causalclustering.load_balancing.filters.Filter) ServerInfo(org.neo4j.causalclustering.load_balancing.plugins.server_policies.ServerInfo) Collectors(java.util.stream.Collectors) CoreTopology(org.neo4j.causalclustering.discovery.CoreTopology) FilterConfigParser(org.neo4j.causalclustering.load_balancing.plugins.server_policies.FilterConfigParser) MemberId(org.neo4j.causalclustering.identity.MemberId) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) ServerInfo(org.neo4j.causalclustering.load_balancing.plugins.server_policies.ServerInfo) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) InvalidFilterSpecification(org.neo4j.causalclustering.load_balancing.plugins.server_policies.InvalidFilterSpecification) CoreTopology(org.neo4j.causalclustering.discovery.CoreTopology)

Aggregations

Filter (org.neo4j.causalclustering.load_balancing.filters.Filter)2 Optional (java.util.Optional)1 Set (java.util.Set)1 Collectors (java.util.stream.Collectors)1 Test (org.junit.Test)1 CausalClusteringSettings (org.neo4j.causalclustering.core.CausalClusteringSettings)1 CoreServerInfo (org.neo4j.causalclustering.discovery.CoreServerInfo)1 CoreTopology (org.neo4j.causalclustering.discovery.CoreTopology)1 MemberId (org.neo4j.causalclustering.identity.MemberId)1 FilterConfigParser (org.neo4j.causalclustering.load_balancing.plugins.server_policies.FilterConfigParser)1 InvalidFilterSpecification (org.neo4j.causalclustering.load_balancing.plugins.server_policies.InvalidFilterSpecification)1 ServerInfo (org.neo4j.causalclustering.load_balancing.plugins.server_policies.ServerInfo)1 Service (org.neo4j.helpers.Service)1