Search in sources :

Example 1 with PublishScenarioProperties

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

the class CompositeTransactionGeneratorTest method distribution.

@Test
void distribution() {
    properties.setWarmupPeriod(Duration.ZERO);
    CompositeTransactionGenerator generator = supplier.get();
    assertThat(generator.distribution.get().getPmf()).hasSize(properties.getScenarios().size()).extracting(Pair::getValue).containsExactly(0.75, 0.25);
    Multiset<TransactionType> types = HashMultiset.create();
    double seconds = 5;
    for (int i = 0; i < totalTps * seconds; ) {
        List<PublishRequest> requests = generator.next();
        requests.stream().map(r -> r.getScenario().getProperties().getType()).forEach(types::add);
        i += requests.size();
    }
    for (PublishScenarioProperties publishScenarioProperties : properties.getScenarios().values()) {
        assertThat(types.count(publishScenarioProperties.getType())).isNotNegative().isNotZero().isCloseTo((int) (publishScenarioProperties.getTps() * seconds), withinPercentage(10));
    }
}
Also used : BeforeEach(org.junit.jupiter.api.BeforeEach) Stopwatch(com.google.common.base.Stopwatch) Multiset(com.google.common.collect.Multiset) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) TransactionType(com.hedera.mirror.monitor.publish.transaction.TransactionType) PublishRequest(com.hedera.mirror.monitor.publish.PublishRequest) PublishScenarioProperties(com.hedera.mirror.monitor.publish.PublishScenarioProperties) Assertions.withinPercentage(org.assertj.core.api.Assertions.withinPercentage) Supplier(java.util.function.Supplier) ArrayList(java.util.ArrayList) ScenarioStatus(com.hedera.mirror.monitor.ScenarioStatus) HashMultiset(com.google.common.collect.HashMultiset) Duration(java.time.Duration) Map(java.util.Map) Suppliers(com.google.common.base.Suppliers) ValueSource(org.junit.jupiter.params.provider.ValueSource) Pair(org.apache.commons.math3.util.Pair) Assertions.from(org.assertj.core.api.Assertions.from) Collectors(java.util.stream.Collectors) Test(org.junit.jupiter.api.Test) PublishScenario(com.hedera.mirror.monitor.publish.PublishScenario) PublishProperties(com.hedera.mirror.monitor.publish.PublishProperties) List(java.util.List) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) Timeout(org.junit.jupiter.api.Timeout) TransactionType(com.hedera.mirror.monitor.publish.transaction.TransactionType) PublishScenarioProperties(com.hedera.mirror.monitor.publish.PublishScenarioProperties) PublishRequest(com.hedera.mirror.monitor.publish.PublishRequest) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Example 2 with PublishScenarioProperties

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

the class CompositeTransactionGeneratorTest method init.

@BeforeEach
void init() {
    publishScenarioProperties1 = new PublishScenarioProperties();
    publishScenarioProperties1.setName("test1");
    publishScenarioProperties1.setProperties(Map.of("topicId", "0.0.1000"));
    publishScenarioProperties1.setTps(750);
    publishScenarioProperties1.setType(TransactionType.CONSENSUS_SUBMIT_MESSAGE);
    totalTps = publishScenarioProperties1.getTps();
    publishScenarioProperties2 = new PublishScenarioProperties();
    publishScenarioProperties2.setName("test2");
    publishScenarioProperties2.setTps(250);
    publishScenarioProperties2.setType(TransactionType.ACCOUNT_CREATE);
    totalTps += publishScenarioProperties2.getTps();
    properties = new PublishProperties();
    properties.getScenarios().put(publishScenarioProperties1.getName(), publishScenarioProperties1);
    properties.getScenarios().put(publishScenarioProperties2.getName(), publishScenarioProperties2);
    supplier = Suppliers.memoize(() -> new CompositeTransactionGenerator(p -> p, p -> p.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)), properties));
    prepare();
}
Also used : PublishProperties(com.hedera.mirror.monitor.publish.PublishProperties) PublishScenarioProperties(com.hedera.mirror.monitor.publish.PublishScenarioProperties) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 3 with PublishScenarioProperties

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

the class ConfigurableTransactionGeneratorTest method init.

@BeforeEach
void init() {
    properties = new PublishScenarioProperties();
    properties.setReceiptPercent(1);
    properties.setRecordPercent(1);
    properties.setName("test");
    properties.setProperties(Map.of("topicId", TOPIC_ID));
    properties.setTps(100_000);
    properties.setType(TransactionType.CONSENSUS_SUBMIT_MESSAGE);
    generator = Suppliers.memoize(() -> new ConfigurableTransactionGenerator(p -> p, p -> Collections.unmodifiableMap(p), properties));
}
Also used : PublishScenarioProperties(com.hedera.mirror.monitor.publish.PublishScenarioProperties) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 4 with PublishScenarioProperties

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

the class CompositeTransactionGenerator method rebuild.

private synchronized void rebuild() {
    double total = 0.0;
    List<Pair<TransactionGenerator, Double>> pairs = new ArrayList<>();
    for (Iterator<ConfigurableTransactionGenerator> iter = transactionGenerators.iterator(); iter.hasNext(); ) {
        ConfigurableTransactionGenerator transactionGenerator = iter.next();
        PublishScenarioProperties publishScenarioProperties = transactionGenerator.getProperties();
        if (publishScenarioProperties.isEnabled()) {
            total += publishScenarioProperties.getTps();
            pairs.add(Pair.create(transactionGenerator, publishScenarioProperties.getTps()));
        } else {
            iter.remove();
        }
    }
    if (!properties.isEnabled() || pairs.isEmpty() || total == 0.0) {
        batchSize.set(1);
        distribution.set(null);
        rateLimiter.set(INACTIVE_RATE_LIMITER);
        log.info("Publishing is disabled");
        return;
    }
    for (ConfigurableTransactionGenerator transactionGenerator : transactionGenerators) {
        log.info("Activated scenario: {}", transactionGenerator.getProperties());
    }
    batchSize.set(Math.max(1, (int) Math.ceil(total / properties.getBatchDivisor())));
    distribution.set(new EnumeratedDistribution<>(pairs));
    RateLimiter current = rateLimiter.get();
    if (current != null) {
        current.setRate(total);
    } else {
        rateLimiter.set(getRateLimiter(total, properties.getWarmupPeriod()));
    }
}
Also used : PublishScenarioProperties(com.hedera.mirror.monitor.publish.PublishScenarioProperties) ArrayList(java.util.ArrayList) RateLimiter(com.google.common.util.concurrent.RateLimiter) Pair(org.apache.commons.math3.util.Pair)

Example 5 with PublishScenarioProperties

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

the class RestSubscriberTest method setup.

@BeforeEach
void setup() {
    MonitorProperties monitorProperties = new MonitorProperties();
    monitorProperties.setMirrorNode(new MirrorNodeProperties());
    monitorProperties.getMirrorNode().getRest().setHost("127.0.0.1");
    restSubscriberProperties = new RestSubscriberProperties();
    restSubscriberProperties.setLimit(3L);
    restSubscriberProperties.setName("test");
    restSubscriberProperties.getRetry().setMaxAttempts(2L);
    restSubscriberProperties.getRetry().setMinBackoff(Duration.ofNanos(1L));
    restSubscriberProperties.getRetry().setMaxBackoff(Duration.ofNanos(2L));
    PublishScenarioProperties publishScenarioProperties = new PublishScenarioProperties();
    publishScenarioProperties.setName(SCENARIO);
    publishScenarioProperties.setType(TransactionType.CONSENSUS_SUBMIT_MESSAGE);
    publishScenario = new PublishScenario(publishScenarioProperties);
    subscribeProperties = new SubscribeProperties();
    subscribeProperties.getRest().put(restSubscriberProperties.getName(), restSubscriberProperties);
    WebClient.Builder builder = WebClient.builder().exchangeFunction(exchangeFunction);
    restSubscriber = new RestSubscriber(monitorProperties, subscribeProperties, builder);
}
Also used : SubscribeProperties(com.hedera.mirror.monitor.subscribe.SubscribeProperties) PublishScenarioProperties(com.hedera.mirror.monitor.publish.PublishScenarioProperties) MirrorNodeProperties(com.hedera.mirror.monitor.MirrorNodeProperties) WebClient(org.springframework.web.reactive.function.client.WebClient) MonitorProperties(com.hedera.mirror.monitor.MonitorProperties) PublishScenario(com.hedera.mirror.monitor.publish.PublishScenario) BeforeEach(org.junit.jupiter.api.BeforeEach)

Aggregations

PublishScenarioProperties (com.hedera.mirror.monitor.publish.PublishScenarioProperties)6 BeforeEach (org.junit.jupiter.api.BeforeEach)4 PublishScenario (com.hedera.mirror.monitor.publish.PublishScenario)3 PublishProperties (com.hedera.mirror.monitor.publish.PublishProperties)2 ArrayList (java.util.ArrayList)2 Pair (org.apache.commons.math3.util.Pair)2 Stopwatch (com.google.common.base.Stopwatch)1 Suppliers (com.google.common.base.Suppliers)1 HashMultiset (com.google.common.collect.HashMultiset)1 Multiset (com.google.common.collect.Multiset)1 RateLimiter (com.google.common.util.concurrent.RateLimiter)1 PrivateKey (com.hedera.hashgraph.sdk.PrivateKey)1 MirrorNodeProperties (com.hedera.mirror.monitor.MirrorNodeProperties)1 MonitorProperties (com.hedera.mirror.monitor.MonitorProperties)1 ScenarioStatus (com.hedera.mirror.monitor.ScenarioStatus)1 PublishRequest (com.hedera.mirror.monitor.publish.PublishRequest)1 PublishResponse (com.hedera.mirror.monitor.publish.PublishResponse)1 AdminKeyable (com.hedera.mirror.monitor.publish.transaction.AdminKeyable)1 TransactionType (com.hedera.mirror.monitor.publish.transaction.TransactionType)1 ScheduleCreateTransactionSupplier (com.hedera.mirror.monitor.publish.transaction.schedule.ScheduleCreateTransactionSupplier)1