use of org.neo4j.causalclustering.identity.MemberId 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();
}
}
use of org.neo4j.causalclustering.identity.MemberId 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()));
}
use of org.neo4j.causalclustering.identity.MemberId in project neo4j by neo4j.
the class CatchUpTest method happyClusterPropagatesUpdates.
@Test
public void happyClusterPropagatesUpdates() throws Throwable {
DirectNetworking net = new DirectNetworking();
// given
final MemberId leader = member(0);
final MemberId[] allMembers = { leader, member(1), member(2) };
final RaftTestFixture fixture = new RaftTestFixture(net, 3, allMembers);
fixture.bootstrap(allMembers);
final MemberId leaderMember = fixture.members().withId(leader).member();
// when
fixture.members().withId(leader).timeoutService().invokeTimeout(RaftMachine.Timeouts.ELECTION);
net.processMessages();
fixture.members().withId(leader).raftInstance().handle(new Request(leaderMember, valueOf(42)));
net.processMessages();
// then
for (MemberId aMember : allMembers) {
assertThat(integerValues(fixture.members().withId(aMember).raftLog()), hasItems(42));
}
}
use of org.neo4j.causalclustering.identity.MemberId in project neo4j by neo4j.
the class DirectNetworking method processMessages.
public void processMessages() {
while (messagesToBeProcessed()) {
for (Map.Entry<MemberId, Queue<Message>> entry : messageQueues.entrySet()) {
MemberId id = entry.getKey();
Queue<Message> queue = entry.getValue();
if (!queue.isEmpty()) {
Message message = queue.remove();
handlers.get(id).handle(message);
}
}
}
}
use of org.neo4j.causalclustering.identity.MemberId in project neo4j by neo4j.
the class RemoteStoreTest method shouldSetLastPulledTransactionId.
@Test
public void shouldSetLastPulledTransactionId() throws Exception {
// given
long lastFlushedTxId = 12;
StoreId wantedStoreId = new StoreId(1, 2, 3, 4);
MemberId localhost = new MemberId(UUID.randomUUID());
StoreCopyClient storeCopyClient = mock(StoreCopyClient.class);
when(storeCopyClient.copyStoreFiles(eq(localhost), eq(wantedStoreId), any(StoreFileStreams.class))).thenReturn(lastFlushedTxId);
TxPullClient txPullClient = mock(TxPullClient.class);
when(txPullClient.pullTransactions(eq(localhost), eq(wantedStoreId), anyLong(), any(TxPullResponseListener.class))).thenReturn(new TxPullRequestResult(SUCCESS_END_OF_STREAM, 13));
TransactionLogCatchUpWriter writer = mock(TransactionLogCatchUpWriter.class);
RemoteStore remoteStore = new RemoteStore(NullLogProvider.getInstance(), mock(FileSystemAbstraction.class), null, storeCopyClient, txPullClient, factory(writer), new Monitors());
// when
remoteStore.copy(localhost, wantedStoreId, new File("destination"));
// then
// the interface is defined as asking for the one preceding
long previousTxId = lastFlushedTxId - 1;
verify(txPullClient).pullTransactions(eq(localhost), eq(wantedStoreId), eq(previousTxId), any(TxPullResponseListener.class));
}
Aggregations