anton-vinogradov commented on a change in pull request #8159:
URL: https://github.com/apache/ignite/pull/8159#discussion_r472903608
##########
File path:
modules/ducktests/src/main/java/org/apache/ignite/internal/ducktest/tests/DataGenerationApplication.java
##########
@@ -18,29 +18,139 @@
package org.apache.ignite.internal.ducktest.tests;
import com.fasterxml.jackson.databind.JsonNode;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+import java.util.function.Function;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.internal.NodeStoppingException;
import org.apache.ignite.internal.ducktest.utils.IgniteAwareApplication;
+import org.apache.ignite.internal.util.typedef.X;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
/**
*
*/
public class DataGenerationApplication extends IgniteAwareApplication {
+ /** Logger. */
+ protected static final Logger log =
LogManager.getLogger(DataGenerationApplication.class.getName());
+
+ /** */
+ private static final String PARAM_RANGE = "range";
+
+ /** */
+ private static final String PARAM_INFINITE = "infinite";
+
+ /** */
+ private static final String PARAM_CACHE_NAME = "cacheName";
+
+ /** */
+ private static final String PARAM_OPTIMIZED = "optimized";
+
+ /** */
+ private static final long DATAGEN_NOTIFY_INTERVAL_NANO = 1500 * 1000000L;
+
+ /** */
+ private static final long DATAGEN_NOTIFY_INTERVAL_AMOUNT = 10_000;
+
+ /** */
+ private static final String WATCHEABLE_BEGIN_DATA_GEN_MSG = "Begin
generating data in background...";
+
/** {@inheritDoc} */
@Override protected void run(JsonNode jsonNode) {
- log.info("Creating cache...");
+ String cacheName = jsonNode.get(PARAM_CACHE_NAME).asText();
+ boolean infinite = jsonNode.hasNonNull(PARAM_INFINITE) &&
jsonNode.get(PARAM_INFINITE).asBoolean();
+ boolean optimized = !jsonNode.hasNonNull(PARAM_OPTIMIZED) ||
jsonNode.get(PARAM_OPTIMIZED).asBoolean();
+ int range = jsonNode.get(PARAM_RANGE).asInt();
+
+ if (infinite) {
+ Random rnd = new Random();
+ CountDownLatch exitLatch = new CountDownLatch(1);
+
+ Thread th = new Thread(() -> {
+ log.info(WATCHEABLE_BEGIN_DATA_GEN_MSG);
+
+ boolean error = false;
+
+ try {
+ while (!terminated())
+ generateData(cacheName, range, (idx) ->
rnd.nextInt(range), optimized);
+
+ log.info("Background data generation finished.");
+ }
+ catch (Exception e) {
+ if (!X.hasCause(e, NodeStoppingException.class)) {
+ error = true;
+
+ log.error("Failed to generate data in background.", e);
+ }
+ }
+ finally {
+ if (error)
+ markBroken();
+ else
+ markFinished();
+
+ exitLatch.countDown();
+ }
+
+ }, DataGenerationApplication.class.getName() + "_cacheLoader");
- IgniteCache<Integer, Integer> cache =
ignite.createCache(jsonNode.get("cacheName").asText());
+ th.start();
- try (IgniteDataStreamer<Integer, Integer> stmr =
ignite.dataStreamer(cache.getName())) {
- for (int i = 0; i < jsonNode.get("range").asInt(); i++) {
- stmr.addData(i, i);
+ markInitialized();
- if (i % 10_000 == 0)
- log.info("Streamed " + i + " entries");
+ try {
+ exitLatch.await();
Review comment:
just relocate loop to main thread and markInitialized to finish waiting
for service start.
see SingleKeyTxStreamerApplication for example
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]