use of io.camunda.zeebe.broker.Broker in project zeebe by camunda.
the class EmbeddedBrokerRule method startBroker.
public void startBroker(final PartitionListener... listeners) {
if (brokerCfg == null) {
try (final InputStream configStream = configSupplier.get()) {
if (configStream == null) {
brokerCfg = new BrokerCfg();
} else {
brokerCfg = new TestConfigurationFactory().create(null, "zeebe.broker", configStream, BrokerCfg.class);
}
configureBroker(brokerCfg);
} catch (final IOException e) {
throw new RuntimeException("Unable to open configuration", e);
}
}
systemContext = new SystemContext(brokerCfg, newTemporaryFolder.getAbsolutePath(), controlledActorClock);
systemContext.getScheduler().start();
final var additionalListeners = new ArrayList<>(Arrays.asList(listeners));
final CountDownLatch latch = new CountDownLatch(brokerCfg.getCluster().getPartitionsCount());
additionalListeners.add(new LeaderPartitionListener(latch));
broker = new Broker(systemContext, springBrokerBridge, additionalListeners);
broker.start().join();
try {
latch.await(INSTALL_TIMEOUT, INSTALL_TIMEOUT_UNIT);
} catch (final InterruptedException e) {
LOG.info("Broker was not started in 15 seconds", e);
Thread.currentThread().interrupt();
}
final EmbeddedGatewayService embeddedGatewayService = broker.getBrokerContext().getEmbeddedGatewayService();
if (embeddedGatewayService != null) {
final BrokerClient brokerClient = embeddedGatewayService.get().getBrokerClient();
waitUntil(() -> {
final BrokerTopologyManager topologyManager = brokerClient.getTopologyManager();
final BrokerClusterState topology = topologyManager.getTopology();
return topology != null && topology.getLeaderForPartition(1) >= 0;
});
}
dataDirectory = broker.getSystemContext().getBrokerConfiguration().getData().getDirectory();
}
use of io.camunda.zeebe.broker.Broker in project zeebe by camunda.
the class ClusteringRule method stopBrokerAndAwaitNewLeader.
public void stopBrokerAndAwaitNewLeader(final int nodeId) {
final Broker broker = brokers.get(nodeId);
if (broker != null) {
final InetSocketAddress socketAddress = broker.getConfig().getNetwork().getCommandApi().getAddress();
final List<Integer> brokersLeadingPartitions = getBrokersLeadingPartitions(socketAddress);
stopBroker(nodeId);
waitForNewLeaderOfPartitions(brokersLeadingPartitions, socketAddress);
}
}
use of io.camunda.zeebe.broker.Broker in project zeebe by camunda.
the class ClusteringRule method forceClusterToHaveNewLeader.
public void forceClusterToHaveNewLeader(final int expectedLeader) {
final var previousLeader = getCurrentLeaderForPartition(1);
if (previousLeader.getNodeId() == expectedLeader) {
return;
}
final var broker = brokers.get(expectedLeader);
final var atomix = broker.getBrokerContext().getClusterServices();
final MemberId nodeId = atomix.getMembershipService().getLocalMember().id();
final var raftPartition = broker.getBrokerContext().getPartitionManager().getPartitionGroup().getPartitions().stream().filter(partition -> partition.members().contains(nodeId)).filter(partition -> partition.id().id() == START_PARTITION_ID).map(RaftPartition.class::cast).findFirst().orElseThrow();
raftPartition.getServer().promote().join();
awaitOtherLeader(START_PARTITION_ID, previousLeader.getNodeId());
}
use of io.camunda.zeebe.broker.Broker in project zeebe by camunda.
the class ClusteringRule method startBroker.
public void startBroker(final int nodeId) {
final Broker broker = getBroker(nodeId).start().join();
final InetSocketAddress commandApi = broker.getConfig().getNetwork().getCommandApi().getAddress();
waitUntilBrokerIsAddedToTopology(commandApi);
waitForPartitionReplicationFactor();
}
use of io.camunda.zeebe.broker.Broker in project zeebe by camunda.
the class EmbeddedBrokerRule method startBroker.
public void startBroker() {
systemContext = new SystemContext(brokerCfg, newTemporaryFolder.getAbsolutePath(), controlledActorClock);
systemContext.getScheduler().start();
final CountDownLatch latch = new CountDownLatch(brokerCfg.getCluster().getPartitionsCount());
broker = new Broker(systemContext, springBrokerBridge, Collections.singletonList(new LeaderPartitionListener(latch)));
broker.start().join();
try {
final boolean hasLeaderPartition = latch.await(timeout.toMillis(), TimeUnit.MILLISECONDS);
assertThat(hasLeaderPartition).describedAs("Expected the broker to have a leader of the partition within %s", timeout).isTrue();
} catch (final InterruptedException e) {
LOG.info("Timeout. Broker was not started within {}", timeout, e);
Thread.currentThread().interrupt();
}
final EmbeddedGatewayService embeddedGatewayService = broker.getBrokerContext().getEmbeddedGatewayService();
if (embeddedGatewayService != null) {
final BrokerClient brokerClient = embeddedGatewayService.get().getBrokerClient();
waitUntil(() -> {
final BrokerTopologyManager topologyManager = brokerClient.getTopologyManager();
final BrokerClusterState topology = topologyManager.getTopology();
return topology != null && topology.getLeaderForPartition(1) >= 0;
});
}
}
Aggregations