Search in sources :

Example 1 with NodeValidationProperties

use of com.hedera.mirror.monitor.NodeValidationProperties in project hedera-mirror-node by hashgraph.

the class TransactionPublisher method getClients.

private synchronized Flux<Client> getClients() {
    NodeValidationProperties validationProperties = monitorProperties.getNodeValidation();
    var configuredNodes = monitorProperties.getNodes();
    Map<String, AccountId> nodeMap = configuredNodes.stream().collect(Collectors.toMap(NodeProperties::getEndpoint, p -> AccountId.fromString(p.getAccountId())));
    this.nodes.addAll(configuredNodes);
    Client client = toClient(nodeMap);
    client.setMaxAttempts(validationProperties.getMaxAttempts());
    client.setMaxBackoff(validationProperties.getMaxBackoff());
    client.setMinBackoff(validationProperties.getMinBackoff());
    client.setRequestTimeout(validationProperties.getRequestTimeout());
    this.validationClient.set(client);
    if (validationProperties.isEnabled() && nodeValidator.get() == null) {
        int nodeCount = configuredNodes.size();
        int parallelism = Math.min(nodeCount, validationProperties.getMaxThreads());
        var scheduler = Schedulers.newParallel("validator", parallelism + 1);
        var disposable = Flux.interval(Duration.ZERO, validationProperties.getFrequency(), scheduler).filter(// In case it's later disabled
        i -> validationProperties.isEnabled()).flatMap(i -> Flux.fromIterable(configuredNodes)).parallel(parallelism).runOn(scheduler).map(this::validateNode).sequential().buffer(nodeCount).doOnNext(i -> log.info("{} of {} nodes are functional", nodes.size(), nodeCount)).doOnSubscribe(s -> log.info("Starting node validation")).onErrorContinue((e, i) -> log.error("Exception validating nodes: ", e)).subscribe();
        nodeValidator.set(disposable);
    }
    return Flux.range(0, publishProperties.getClients()).flatMap(i -> Mono.defer(() -> Mono.just(toClient(nodeMap))));
}
Also used : NodeProperties(com.hedera.mirror.monitor.NodeProperties) Disposable(reactor.core.Disposable) TransferTransaction(com.hedera.hashgraph.sdk.TransferTransaction) RequiredArgsConstructor(lombok.RequiredArgsConstructor) TimeoutException(java.util.concurrent.TimeoutException) Status(com.hedera.hashgraph.sdk.Status) AtomicReference(java.util.concurrent.atomic.AtomicReference) SecureRandom(java.security.SecureRandom) HbarUnit(com.hedera.hashgraph.sdk.HbarUnit) WithExecute(com.hedera.hashgraph.sdk.WithExecute) Duration(java.time.Duration) Map(java.util.Map) Transaction(com.hedera.hashgraph.sdk.Transaction) Schedulers(reactor.core.scheduler.Schedulers) AccountId(com.hedera.hashgraph.sdk.AccountId) Hbar(com.hedera.hashgraph.sdk.Hbar) Named(javax.inject.Named) TransactionResponse(com.hedera.hashgraph.sdk.TransactionResponse) TransactionId(com.hedera.hashgraph.sdk.TransactionId) TransactionRecordQuery(com.hedera.hashgraph.sdk.TransactionRecordQuery) NodeValidationProperties(com.hedera.mirror.monitor.NodeValidationProperties) Client(com.hedera.hashgraph.sdk.Client) Mono(reactor.core.publisher.Mono) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) TransactionReceiptQuery(com.hedera.hashgraph.sdk.TransactionReceiptQuery) Flux(reactor.core.publisher.Flux) SUCCESS(com.hedera.hashgraph.sdk.Status.SUCCESS) Log4j2(lombok.extern.log4j.Log4j2) PrivateKey(com.hedera.hashgraph.sdk.PrivateKey) MonitorProperties(com.hedera.mirror.monitor.MonitorProperties) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) AccountId(com.hedera.hashgraph.sdk.AccountId) NodeValidationProperties(com.hedera.mirror.monitor.NodeValidationProperties) Client(com.hedera.hashgraph.sdk.Client)

Aggregations

AccountId (com.hedera.hashgraph.sdk.AccountId)1 Client (com.hedera.hashgraph.sdk.Client)1 Hbar (com.hedera.hashgraph.sdk.Hbar)1 HbarUnit (com.hedera.hashgraph.sdk.HbarUnit)1 PrivateKey (com.hedera.hashgraph.sdk.PrivateKey)1 Status (com.hedera.hashgraph.sdk.Status)1 SUCCESS (com.hedera.hashgraph.sdk.Status.SUCCESS)1 Transaction (com.hedera.hashgraph.sdk.Transaction)1 TransactionId (com.hedera.hashgraph.sdk.TransactionId)1 TransactionReceiptQuery (com.hedera.hashgraph.sdk.TransactionReceiptQuery)1 TransactionRecordQuery (com.hedera.hashgraph.sdk.TransactionRecordQuery)1 TransactionResponse (com.hedera.hashgraph.sdk.TransactionResponse)1 TransferTransaction (com.hedera.hashgraph.sdk.TransferTransaction)1 WithExecute (com.hedera.hashgraph.sdk.WithExecute)1 MonitorProperties (com.hedera.mirror.monitor.MonitorProperties)1 NodeProperties (com.hedera.mirror.monitor.NodeProperties)1 NodeValidationProperties (com.hedera.mirror.monitor.NodeValidationProperties)1 SecureRandom (java.security.SecureRandom)1 Duration (java.time.Duration)1 Instant (java.time.Instant)1