Search in sources :

Example 6 with CoreServerInfo

use of org.neo4j.causalclustering.discovery.CoreServerInfo in project neo4j by neo4j.

the class RaftOutbound method send.

@Override
public void send(MemberId to, RaftMessage message) {
    Optional<ClusterId> clusterId = clusterIdentity.get();
    if (!clusterId.isPresent()) {
        log.warn("Attempting to send a message before bound to a cluster");
        return;
    }
    Optional<CoreServerInfo> coreServerInfo = coreTopologyService.coreServers().find(to);
    if (coreServerInfo.isPresent()) {
        outbound.send(coreServerInfo.get().getRaftServer(), new ClusterIdAwareMessage(clusterId.get(), message));
    } else {
        unknownAddressMonitor.logAttemptToSendToMemberWithNoKnownAddress(to);
    }
}
Also used : ClusterIdAwareMessage(org.neo4j.causalclustering.core.consensus.RaftMessages.ClusterIdAwareMessage) ClusterId(org.neo4j.causalclustering.identity.ClusterId) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo)

Example 7 with CoreServerInfo

use of org.neo4j.causalclustering.discovery.CoreServerInfo 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)

Example 8 with CoreServerInfo

use of org.neo4j.causalclustering.discovery.CoreServerInfo in project neo4j by neo4j.

the class ClusterOverviewProcedure method apply.

@Override
public RawIterator<Object[], ProcedureException> apply(Context ctx, Object[] input) throws ProcedureException {
    List<ReadWriteEndPoint> endpoints = new ArrayList<>();
    CoreTopology coreTopology = topologyService.coreServers();
    Set<MemberId> coreMembers = coreTopology.members().keySet();
    MemberId leader = null;
    try {
        leader = leaderLocator.getLeader();
    } catch (NoLeaderFoundException e) {
        log.debug("No write server found. This can happen during a leader switch.");
    }
    for (MemberId memberId : coreMembers) {
        Optional<CoreServerInfo> coreServerInfo = coreTopology.find(memberId);
        if (coreServerInfo.isPresent()) {
            Role role = memberId.equals(leader) ? Role.LEADER : Role.FOLLOWER;
            endpoints.add(new ReadWriteEndPoint(coreServerInfo.get().connectors(), role, memberId.getUuid(), asList(coreServerInfo.get().groups())));
        } else {
            log.debug("No Address found for " + memberId);
        }
    }
    for (Map.Entry<MemberId, ReadReplicaInfo> readReplica : topologyService.readReplicas().members().entrySet()) {
        ReadReplicaInfo readReplicaInfo = readReplica.getValue();
        endpoints.add(new ReadWriteEndPoint(readReplicaInfo.connectors(), Role.READ_REPLICA, readReplica.getKey().getUuid(), asList(readReplicaInfo.groups())));
    }
    endpoints.sort(comparing(o -> o.addresses().toString()));
    return map((endpoint) -> new Object[] { endpoint.memberId().toString(), endpoint.addresses().uriList().stream().map(URI::toString).toArray(), endpoint.role().name(), endpoint.groups() }, asRawIterator(endpoints.iterator()));
}
Also used : ProcedureException(org.neo4j.kernel.api.exceptions.ProcedureException) Neo4jTypes(org.neo4j.kernel.api.proc.Neo4jTypes) Log(org.neo4j.logging.Log) RawIterator(org.neo4j.collection.RawIterator) CallableProcedure(org.neo4j.kernel.api.proc.CallableProcedure) ClientConnectorAddresses(org.neo4j.causalclustering.discovery.ClientConnectorAddresses) LogProvider(org.neo4j.logging.LogProvider) ArrayList(java.util.ArrayList) Iterators.asRawIterator(org.neo4j.helpers.collection.Iterators.asRawIterator) Map(java.util.Map) MemberId(org.neo4j.causalclustering.identity.MemberId) URI(java.net.URI) ReadReplicaInfo(org.neo4j.causalclustering.discovery.ReadReplicaInfo) Comparator.comparing(java.util.Comparator.comparing) ProcedureSignature.procedureSignature(org.neo4j.kernel.api.proc.ProcedureSignature.procedureSignature) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) LeaderLocator(org.neo4j.causalclustering.core.consensus.LeaderLocator) CoreTopology(org.neo4j.causalclustering.discovery.CoreTopology) Iterators.map(org.neo4j.helpers.collection.Iterators.map) TopologyService(org.neo4j.causalclustering.discovery.TopologyService) Set(java.util.Set) UUID(java.util.UUID) Iterables.asList(org.neo4j.helpers.collection.Iterables.asList) List(java.util.List) NoLeaderFoundException(org.neo4j.causalclustering.core.consensus.NoLeaderFoundException) QualifiedName(org.neo4j.kernel.api.proc.QualifiedName) Optional(java.util.Optional) Context(org.neo4j.kernel.api.proc.Context) NoLeaderFoundException(org.neo4j.causalclustering.core.consensus.NoLeaderFoundException) ReadReplicaInfo(org.neo4j.causalclustering.discovery.ReadReplicaInfo) ArrayList(java.util.ArrayList) URI(java.net.URI) CoreTopology(org.neo4j.causalclustering.discovery.CoreTopology) MemberId(org.neo4j.causalclustering.identity.MemberId) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo) Map(java.util.Map)

Example 9 with CoreServerInfo

use of org.neo4j.causalclustering.discovery.CoreServerInfo in project neo4j by neo4j.

the class GetServersProcedureForSingleDC method coreReadEndPoints.

private Stream<AdvertisedSocketAddress> coreReadEndPoints() {
    Optional<AdvertisedSocketAddress> leader = leaderBoltAddress();
    Collection<CoreServerInfo> coreServerInfo = topologyService.coreServers().members().values();
    Stream<AdvertisedSocketAddress> boltAddresses = topologyService.coreServers().members().values().stream().map(extractBoltAddress());
    // if the leader is present and it is not alone filter it out from the read end points
    if (leader.isPresent() && coreServerInfo.size() > 1) {
        AdvertisedSocketAddress advertisedSocketAddress = leader.get();
        return boltAddresses.filter(address -> !advertisedSocketAddress.equals(address));
    }
    // or if we cannot locate the leader return all cores as read end points
    return boltAddresses;
}
Also used : AdvertisedSocketAddress(org.neo4j.helpers.AdvertisedSocketAddress) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo)

Example 10 with CoreServerInfo

use of org.neo4j.causalclustering.discovery.CoreServerInfo in project neo4j by neo4j.

the class LegacyGetServersProcedure method coreReadEndPoints.

private Stream<AdvertisedSocketAddress> coreReadEndPoints() {
    Optional<AdvertisedSocketAddress> leader = leaderBoltAddress();
    Collection<CoreServerInfo> coreServerInfo = topologyService.coreServers().members().values();
    Stream<AdvertisedSocketAddress> boltAddresses = topologyService.coreServers().members().values().stream().map(extractBoltAddress());
    // if the leader is present and it is not alone filter it out from the read end points
    if (leader.isPresent() && coreServerInfo.size() > 1) {
        AdvertisedSocketAddress advertisedSocketAddress = leader.get();
        return boltAddresses.filter(address -> !advertisedSocketAddress.equals(address));
    }
    // or if we cannot locate the leader return all cores as read end points
    return boltAddresses;
}
Also used : AdvertisedSocketAddress(org.neo4j.helpers.AdvertisedSocketAddress) CoreServerInfo(org.neo4j.causalclustering.discovery.CoreServerInfo)

Aggregations

CoreServerInfo (org.neo4j.causalclustering.discovery.CoreServerInfo)16 CoreTopology (org.neo4j.causalclustering.discovery.CoreTopology)13 MemberId (org.neo4j.causalclustering.identity.MemberId)13 LeaderLocator (org.neo4j.causalclustering.core.consensus.LeaderLocator)11 HashMap (java.util.HashMap)10 ReadReplicaTopology (org.neo4j.causalclustering.discovery.ReadReplicaTopology)10 Test (org.junit.Test)9 CoreTopologyService (org.neo4j.causalclustering.discovery.CoreTopologyService)9 Optional (java.util.Optional)3 Set (java.util.Set)3 NoLeaderFoundException (org.neo4j.causalclustering.core.consensus.NoLeaderFoundException)3 AdvertisedSocketAddress (org.neo4j.helpers.AdvertisedSocketAddress)3 List (java.util.List)2 Map (java.util.Map)2 Collectors (java.util.stream.Collectors)2 CausalClusteringSettings (org.neo4j.causalclustering.core.CausalClusteringSettings)2 ClientConnectorAddresses (org.neo4j.causalclustering.discovery.ClientConnectorAddresses)2 ReadReplicaInfo (org.neo4j.causalclustering.discovery.ReadReplicaInfo)2 TopologyService (org.neo4j.causalclustering.discovery.TopologyService)2 ClusterId (org.neo4j.causalclustering.identity.ClusterId)2