Java DSL : "java.lang.IllegalStateException: Feeder is now empty, stopping engine" issue coming

Hi,
I am using an iterator of AtomicLong to generate transactionid of different requests.
Issue is , it is arbirarily stopping as “Feeder is now empty”.
Similar Approach with scala test suite is working fine.

To simulate the script , I am running a Jmeter Mirror server and just posting dummy messages.
I am providing the simplified script here :

package test;

import io.gatling.javaapi.core.ScenarioBuilder;

import io.gatling.javaapi.core.Simulation;

import io.gatling.javaapi.http.HttpProtocolBuilder;

import java.time.Duration;

import java.util.Collections;

import java.util.Iterator;

import java.util.Map;

import java.util.concurrent.atomic.AtomicLong;

import java.util.function.Supplier;

import java.util.stream.Stream;

import static io.gatling.javaapi.core.CoreDsl.*;

import static io.gatling.javaapi.http.HttpDsl.http;

public class testSimulation extends Simulation {

    // Declared Variables

    private final String baseURL = "http://localhost:9090";

    private final AtomicLong transactionId = new AtomicLong(10000000000000L);

    private final int duration = 5;

    private final int executionTime = duration * 4;

    private final int maxThroughput = 100;

    private final int maxUser = 100;

    private final double pct_transaction1 = 0.75;

    private final double pct_transaction2 = 0.25;

    private final HttpProtocolBuilder httpProtocol = http

            .baseUrl(baseURL)

            .warmUp(baseURL)

//            .disableWarmUp()

//            .proxy(Proxy("localhost", 8888))

            .acceptHeader("text/html")

            .acceptEncodingHeader("gzip,deflate")

            .contentTypeHeader("text/xml;charset=UTF-8")

            .userAgentHeader("Apache-HttpClient/4.5.5 (Java/16.0.1)");

    Iterator<Map<String, Object>> sourceTransactionIdfeed =

            Stream.generate((Supplier<Map<String, Object>>) () -> {

                        String trId = Long.toString(transactionId.getAndIncrement());

                        return Collections.singletonMap("sourceTransactionId", trId);

                    }

            ).iterator();

    private final ScenarioBuilder transaction_1 = scenario("transaction1")

            .feed(sourceTransactionIdfeed)

            .exec(

                    http("transaction1")

                            .post("/services/ws/transaction1")

                            .body(StringBody("#{sourceTransactionId}"))

            );

    private final ScenarioBuilder transaction_2 = scenario("transaction2")

            .feed(sourceTransactionIdfeed)

            .exec(

                    http("transaction2")

                            .post("/services/ws/transaction2")

                            .body(StringBody("#{sourceTransactionId}"))

            );

    private final int usr_tr1 = (int) Math.ceil(maxUser * pct_transaction1);

    private final int usr_tr2 = (int) Math.ceil(maxUser * pct_transaction2);

    private final int load_tr1 = (int) Math.ceil(maxThroughput * pct_transaction1 / 4);

    private final int load_tr2 = (int) Math.ceil(maxThroughput * pct_transaction2 / 4);

    {

        setUp(

                transaction_1.injectClosed(constantConcurrentUsers(usr_tr1).during(Duration.ofMinutes(executionTime)))

                        .throttle(

                                jumpToRps(load_tr1), holdFor(Duration.ofMinutes(duration)),

                                jumpToRps(load_tr1 * 2), holdFor(Duration.ofMinutes(duration)),

                                jumpToRps(load_tr1 * 3), holdFor(Duration.ofMinutes(duration)),

                                jumpToRps(load_tr1 * 4), holdFor(Duration.ofMinutes(duration))

                        ),

                transaction_2.injectClosed(constantConcurrentUsers(usr_tr2).during(Duration.ofMinutes(executionTime)))

                        .throttle(

                                jumpToRps(load_tr2), holdFor(Duration.ofMinutes(duration)),

                                jumpToRps(load_tr2 * 2), holdFor(Duration.ofMinutes(duration)),

                                jumpToRps(load_tr2 * 3), holdFor(Duration.ofMinutes(duration)),

                                jumpToRps(load_tr2 * 4), holdFor(Duration.ofMinutes(duration))

                        )

        ).protocols(httpProtocol);

    }

}

That’s a known issue that will be fixed in Gatling 3.8.0.

Thanks a lot for very prompt response. I will surely try on upcoming version.