You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jmeter.apache.org by GitBox <gi...@apache.org> on 2021/10/18 07:04:12 UTC

[GitHub] [jmeter] vlsi opened a new pull request #674: WIP: Precise Thread Group

vlsi opened a new pull request #674:
URL: https://github.com/apache/jmeter/pull/674


   See https://lists.apache.org/thread.html/r62952bcf60212202f742329015c110c3b9da0d8c48ded6b9b833f04d%40%3Cdev.jmeter.apache.org%3E
   
   The idea is to implement a better alternative for a default JMeter thread group.
   
   Note: this is work-in-progress, and I create the PR or discussion purposes.


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] rabelenda commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
rabelenda commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959023323


   Hello,
   
   How does this compare to existing approach of using [Concurrency Thread Group in combination with Throughput Shaping Timer](https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/#Use-With-Throughput-Shaping-Timer-Feedback-Function)?
   
   Thank you


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] mawasak commented on pull request #674: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
mawasak commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-969208063


   Are you going to work on other properties of this component in the future? For example, adding a function to work with a constant thread pool (e.g.: threads(10) dsl == as in Old Threadd Group)? If so, maybe the word "open" is not good in the name:)  Maybe "flexible load generator"? :)


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] rabelenda edited a comment on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
rabelenda edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959023323






-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] rabelenda commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
rabelenda commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959023323






-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959603679






-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on a change in pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on a change in pull request #674:
URL: https://github.com/apache/jmeter/pull/674#discussion_r748282567



##########
File path: src/core/src/main/kotlin/org/apache/jmeter/threads/precise/PreciseThreadGroup.kt
##########
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jmeter.threads.precise
+
+import org.apache.jmeter.control.Controller
+import org.apache.jmeter.engine.StandardJMeterEngine
+import org.apache.jmeter.gui.GUIMenuSortOrder
+import org.apache.jmeter.testelement.property.TestElementProperty
+import org.apache.jmeter.threads.AbstractThreadGroup
+import org.apache.jmeter.threads.JMeterContextService
+import org.apache.jmeter.threads.JMeterThread
+import org.apache.jmeter.threads.JMeterThreadMonitor
+import org.apache.jmeter.threads.ListenerNotifier
+import org.apache.jmeter.threads.TestCompilerHelper
+import org.apache.jorphan.collections.ListedHashTree
+import org.slf4j.LoggerFactory
+import java.io.Serializable
+import java.lang.Thread.sleep
+import java.util.Random
+import java.util.concurrent.ConcurrentHashMap
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+import java.util.concurrent.Future
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicReference
+import kotlin.math.roundToLong
+
+@GUIMenuSortOrder(1)
+class PreciseThreadGroup : AbstractThreadGroup(),
+    Serializable, Controller, JMeterThreadMonitor, TestCompilerHelper {
+    companion object {
+        private val log = LoggerFactory.getLogger(PreciseThreadGroup::class.java)
+        const val SCHEDULE = "PreciseThreadGroup.schedule"
+        const val RANDOM_SEED = "PreciseThreadGroup.random_seed"
+    }
+
+    private lateinit var executorService: ExecutorService
+
+    private val threadStarterFuture = AtomicReference<Future<*>?>()
+    private val activeThreads = ConcurrentHashMap<JMeterThread, Future<*>>()
+
+    var scheduleString: String
+        get() = getPropertyAsString(SCHEDULE)
+        set(value) {
+            setProperty(SCHEDULE, value)
+        }
+
+    val randomSeed: Long get() = getPropertyAsLong(RANDOM_SEED)
+
+    var randomSeedString: String
+        get() = getPropertyAsString(RANDOM_SEED)
+        set(value) {
+            setProperty(RANDOM_SEED, value)
+        }
+
+    init {
+        setProperty(TestElementProperty(MAIN_CONTROLLER, PreciseThreadGroupController()))
+    }
+
+    private class ThreadsStarter(
+        private val testStartTime: Long,
+        private val executorService: ExecutorService,
+        private val activeThreads: MutableMap<JMeterThread, Future<*>>,
+        private val gen: ThreadScheduleProcessGenerator,
+        private val jmeterThreadFactory: (threadNumber: Int) -> JMeterThread,
+    ) : Runnable {
+        override fun run() {
+            log.info("Thread starting init")
+            val endTime = (testStartTime + gen.totalDuration).roundToLong()
+            try {
+                var threadNumber = 0
+                while (gen.hasNext()) {
+                    val nextDelay = testStartTime + (gen.next() * 1000).roundToLong() - System.currentTimeMillis()
+                    if (nextDelay > 0) {
+                        sleep(nextDelay)
+                    }
+                    val jmeterThread = jmeterThreadFactory(threadNumber++)
+                    jmeterThread.endTime = endTime
+                    activeThreads[jmeterThread] = executorService.submit {
+                        Thread.currentThread().name = jmeterThread.threadName
+                        jmeterThread.run()
+                    }
+                }
+            } finally {
+                // No more actions will be scheduled, let awaitTermination to see the completion
+                executorService.shutdown()
+            }
+            log.info("Thread starting done")
+        }
+    }
+
+    override fun start(
+        threadGroupIndex: Int,
+        notifier: ListenerNotifier,
+        threadGroupTree: ListedHashTree,
+        engine: StandardJMeterEngine
+    ) {
+        try {
+            val jMeterContext = JMeterContextService.getContext()
+            val variables = jMeterContext.variables
+            val schedule = scheduleString
+            log.info("Starting PreciseThreadGroup#{} with schedule {}", threadGroupIndex, schedule)
+            val parsedSchedule = ThreadSchedule(schedule)
+            val seed = randomSeed
+            val rnd = if (seed == 0L) Random() else Random(seed)
+            val gen = ThreadScheduleProcessGenerator(rnd, parsedSchedule)
+            val testStartTime = JMeterContextService.getTestStartTime()
+            executorService = Executors.newCachedThreadPool()
+            val starter = ThreadsStarter(testStartTime, executorService, activeThreads, gen) { threadNumber ->
+                val clonedTree = cloneTree(threadGroupTree)
+                makeThread(engine, this, notifier, threadGroupIndex, threadNumber, clonedTree, variables)
+            }
+            threadStarterFuture.set(executorService.submit(starter))
+        } catch (e: Throwable) {
+            log.error("Unable to start thread group", e)
+        }
+    }
+
+
+    override fun threadFinished(thread: JMeterThread?) {
+        activeThreads.remove(thread)
+    }
+
+    override fun addNewThread(delay: Int, engine: StandardJMeterEngine?): JMeterThread {
+        TODO("Will not be implemented")
+    }
+
+    override fun stopThread(threadName: String?, now: Boolean): Boolean {
+        TODO("Will not be implemented")

Review comment:
       No impact. The method is not really used, and it should not exist in the abstract thread group in the first place




-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-969210981


   > For example, adding a function to work with a constant thread pool (e.g.: threads(10) dsl == as in Old Threadd Group)? 
   
   Right you are.
   However, now I am inclined that having "Open Model" is great for marketing :)
   
   > Flexible Load Generator
   
   Oh, that might work indeed.


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] codecov-commenter edited a comment on pull request #674: WIP: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
codecov-commenter edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-968265204


   # [Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) Report
   > Merging [#674](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (f766e80) into [master](https://codecov.io/gh/apache/jmeter/commit/3c23246558a56e751f3e4fd860f46a2440893fa8?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (3c23246) will **increase** coverage by `0.17%`.
   > The diff coverage is `46.80%`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/jmeter/pull/674/graphs/tree.svg?width=650&height=150&src=pr&token=6Q7CI1wFSh&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)
   
   ```diff
   @@             Coverage Diff              @@
   ##             master     #674      +/-   ##
   ============================================
   + Coverage     55.40%   55.58%   +0.17%     
   - Complexity    10230    10319      +89     
   ============================================
     Files          1047     1057      +10     
     Lines         64518    64941     +423     
     Branches       7317     7393      +76     
   ============================================
   + Hits          35749    36100     +351     
   - Misses        26271    26287      +16     
   - Partials       2498     2554      +56     
   ```
   
   
   | [Impacted Files](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | Coverage Δ | |
   |---|---|---|
   | [...gui/action/validation/TreeClonerForValidation.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci9ndWkvYWN0aW9uL3ZhbGlkYXRpb24vVHJlZUNsb25lckZvclZhbGlkYXRpb24uamF2YQ==) | `0.00% <0.00%> (ø)` | |
   | [.../main/java/org/apache/jmeter/save/SaveService.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci9zYXZlL1NhdmVTZXJ2aWNlLmphdmE=) | `73.40% <ø> (-0.54%)` | :arrow_down: |
   | [...AddUndoableEditListenerPropertyChangeListener.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL0FkZFVuZG9hYmxlRWRpdExpc3RlbmVyUHJvcGVydHlDaGFuZ2VMaXN0ZW5lci5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [.../org/apache/jorphan/gui/ui/DefaultUndoManager.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL0RlZmF1bHRVbmRvTWFuYWdlci5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [...ain/java/org/apache/jorphan/util/JOrphanUtils.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vdXRpbC9KT3JwaGFuVXRpbHMuamF2YQ==) | `75.76% <0.00%> (-5.77%)` | :arrow_down: |
   | [...he/jmeter/threads/openmodel/gui/TargetRateChart.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL2d1aS9UYXJnZXRSYXRlQ2hhcnQua3Q=) | `6.45% <6.45%> (ø)` | |
   | [...e/jmeter/threads/openmodel/OpenModelThreadGroup.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL09wZW5Nb2RlbFRocmVhZEdyb3VwLmt0) | `12.12% <12.12%> (ø)` | |
   | [...ava/org/apache/jorphan/gui/ui/TextComponentUI.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL1RleHRDb21wb25lbnRVSS5qYXZh) | `26.82% <18.75%> (+26.82%)` | :arrow_up: |
   | [...hreads/openmodel/OpenModelThreadGroupController.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL09wZW5Nb2RlbFRocmVhZEdyb3VwQ29udHJvbGxlci5rdA==) | `25.00% <25.00%> (ø)` | |
   | [.../main/java/org/apache/jmeter/util/JMeterUtils.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci91dGlsL0pNZXRlclV0aWxzLmphdmE=) | `53.90% <26.66%> (+2.54%)` | :arrow_up: |
   | ... and [44 more](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | |
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation). Last update [062190a...f766e80](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation).
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] mawasak commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
mawasak commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-946052285


   Another relevant issue?
   https://bz.apache.org/bugzilla/show_bug.cgi?id=62100


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi edited a comment on pull request #674: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-955780938


   Added load profile chart. Note: JFreeChart can't be used (LGPL is forbidden in the ASF projects). Luckily https://github.com/JetBrains/lets-plot is very powerful and it has MIT license.
   
   Schedule:
   
   ```
   rate(10/sec) random_arrivals(10 sec) pause(1 sec) /* warmup */
   rate(20/sec) random_arrivals(10 sec) pause(1 sec)
   rate(40/sec) random_arrivals(10 sec) pause(1 sec)
   rate(10/sec) random_arrivals(10 sec) rate(80/sec) random_arrivals(10sec) rate(0/sec) pause(1 sec)
   ```
   
   <img width="820" alt="precise thread group screen with chart" src="https://user-images.githubusercontent.com/213894/139599107-8c84508d-2827-4c26-9c4e-bb5ea388870e.png">
   
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] mawasak edited a comment on pull request #674: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
mawasak edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-969208063


   Are you going to work on other properties of this component in the future? For example, adding a function to work with a constant thread pool (e.g.: threads(10) dsl == as in Old Threadd Group)? If so, maybe the word "open" is not good in the name:)  Maybe "flexible load generator"? :)
   
   Load injector?
   I think this is the same concept in Gatling: https://gatling.io/docs/gatling/reference/current/general/simulation_setup/


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi merged pull request #674: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi merged pull request #674:
URL: https://github.com/apache/jmeter/pull/674


   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi edited a comment on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-956502849


   I don't know why one would write something like `${__javaScript(var r=[]; for(var i=0; i<5; i++){ r.push("rate\("+i+"/sec\) random_arrivals\("+i+" sec\) rate\("+i*5+"/sec\)"); } r.join(" pause(1 sec)\n"),)}`, but it works.
   
   The expression computes into the following schedule:
   
   ```
   rate(0/sec) random_arrivals(0 sec) rate(0/sec) pause(1 sec)
   rate(1/sec) random_arrivals(1 sec) rate(5/sec) pause(1 sec)
   rate(2/sec) random_arrivals(2 sec) rate(10/sec) pause(1 sec)
   rate(3/sec) random_arrivals(3 sec) rate(15/sec) pause(1 sec)
   rate(4/sec) random_arrivals(4 sec) rate(20/sec)
   ```
   
   <img width="812" alt="javascript load profile" src="https://user-images.githubusercontent.com/213894/139726121-d721aa2c-f124-4b7b-8032-88dd0f11d944.png">
   
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] rabelenda commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
rabelenda commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959023323


   Hello,
   
   How does this compare to existing approach of using [Concurrency Thread Group in combination with Throughput Shaping Timer](https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/#Use-With-Throughput-Shaping-Timer-Feedback-Function)?
   
   Thank you


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] pmouawad commented on a change in pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
pmouawad commented on a change in pull request #674:
URL: https://github.com/apache/jmeter/pull/674#discussion_r748263252



##########
File path: src/core/src/main/kotlin/org/apache/jmeter/threads/precise/PreciseThreadGroup.kt
##########
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jmeter.threads.precise
+
+import org.apache.jmeter.control.Controller
+import org.apache.jmeter.engine.StandardJMeterEngine
+import org.apache.jmeter.gui.GUIMenuSortOrder
+import org.apache.jmeter.testelement.property.TestElementProperty
+import org.apache.jmeter.threads.AbstractThreadGroup
+import org.apache.jmeter.threads.JMeterContextService
+import org.apache.jmeter.threads.JMeterThread
+import org.apache.jmeter.threads.JMeterThreadMonitor
+import org.apache.jmeter.threads.ListenerNotifier
+import org.apache.jmeter.threads.TestCompilerHelper
+import org.apache.jorphan.collections.ListedHashTree
+import org.slf4j.LoggerFactory
+import java.io.Serializable
+import java.lang.Thread.sleep
+import java.util.Random
+import java.util.concurrent.ConcurrentHashMap
+import java.util.concurrent.ExecutorService
+import java.util.concurrent.Executors
+import java.util.concurrent.Future
+import java.util.concurrent.TimeUnit
+import java.util.concurrent.atomic.AtomicReference
+import kotlin.math.roundToLong
+
+@GUIMenuSortOrder(1)
+class PreciseThreadGroup : AbstractThreadGroup(),
+    Serializable, Controller, JMeterThreadMonitor, TestCompilerHelper {
+    companion object {
+        private val log = LoggerFactory.getLogger(PreciseThreadGroup::class.java)
+        const val SCHEDULE = "PreciseThreadGroup.schedule"
+        const val RANDOM_SEED = "PreciseThreadGroup.random_seed"
+    }
+
+    private lateinit var executorService: ExecutorService
+
+    private val threadStarterFuture = AtomicReference<Future<*>?>()
+    private val activeThreads = ConcurrentHashMap<JMeterThread, Future<*>>()
+
+    var scheduleString: String
+        get() = getPropertyAsString(SCHEDULE)
+        set(value) {
+            setProperty(SCHEDULE, value)
+        }
+
+    val randomSeed: Long get() = getPropertyAsLong(RANDOM_SEED)
+
+    var randomSeedString: String
+        get() = getPropertyAsString(RANDOM_SEED)
+        set(value) {
+            setProperty(RANDOM_SEED, value)
+        }
+
+    init {
+        setProperty(TestElementProperty(MAIN_CONTROLLER, PreciseThreadGroupController()))
+    }
+
+    private class ThreadsStarter(
+        private val testStartTime: Long,
+        private val executorService: ExecutorService,
+        private val activeThreads: MutableMap<JMeterThread, Future<*>>,
+        private val gen: ThreadScheduleProcessGenerator,
+        private val jmeterThreadFactory: (threadNumber: Int) -> JMeterThread,
+    ) : Runnable {
+        override fun run() {
+            log.info("Thread starting init")
+            val endTime = (testStartTime + gen.totalDuration).roundToLong()
+            try {
+                var threadNumber = 0
+                while (gen.hasNext()) {
+                    val nextDelay = testStartTime + (gen.next() * 1000).roundToLong() - System.currentTimeMillis()
+                    if (nextDelay > 0) {
+                        sleep(nextDelay)
+                    }
+                    val jmeterThread = jmeterThreadFactory(threadNumber++)
+                    jmeterThread.endTime = endTime
+                    activeThreads[jmeterThread] = executorService.submit {
+                        Thread.currentThread().name = jmeterThread.threadName
+                        jmeterThread.run()
+                    }
+                }
+            } finally {
+                // No more actions will be scheduled, let awaitTermination to see the completion
+                executorService.shutdown()
+            }
+            log.info("Thread starting done")
+        }
+    }
+
+    override fun start(
+        threadGroupIndex: Int,
+        notifier: ListenerNotifier,
+        threadGroupTree: ListedHashTree,
+        engine: StandardJMeterEngine
+    ) {
+        try {
+            val jMeterContext = JMeterContextService.getContext()
+            val variables = jMeterContext.variables
+            val schedule = scheduleString
+            log.info("Starting PreciseThreadGroup#{} with schedule {}", threadGroupIndex, schedule)
+            val parsedSchedule = ThreadSchedule(schedule)
+            val seed = randomSeed
+            val rnd = if (seed == 0L) Random() else Random(seed)
+            val gen = ThreadScheduleProcessGenerator(rnd, parsedSchedule)
+            val testStartTime = JMeterContextService.getTestStartTime()
+            executorService = Executors.newCachedThreadPool()
+            val starter = ThreadsStarter(testStartTime, executorService, activeThreads, gen) { threadNumber ->
+                val clonedTree = cloneTree(threadGroupTree)
+                makeThread(engine, this, notifier, threadGroupIndex, threadNumber, clonedTree, variables)
+            }
+            threadStarterFuture.set(executorService.submit(starter))
+        } catch (e: Throwable) {
+            log.error("Unable to start thread group", e)
+        }
+    }
+
+
+    override fun threadFinished(thread: JMeterThread?) {
+        activeThreads.remove(thread)
+    }
+
+    override fun addNewThread(delay: Int, engine: StandardJMeterEngine?): JMeterThread {
+        TODO("Will not be implemented")
+    }
+
+    override fun stopThread(threadName: String?, now: Boolean): Boolean {
+        TODO("Will not be implemented")

Review comment:
       What will be the impact of this ?

##########
File path: src/core/src/main/resources/org/apache/jmeter/resources/messages.properties
##########
@@ -828,6 +828,10 @@ post_body_raw=Body Data
 post_files_upload=Files Upload
 post_thread_group_title=tearDown Thread Group
 previous=Previous
+precisethreadgroup=Precise Thread Group

Review comment:
       Rename to "Open Model Thread Group" ?

##########
File path: xdocs/usermanual/component_reference.xml
##########
@@ -5186,7 +5187,15 @@ Note that the throughput value should not be changed too often during a test
 </component>
 
 <component name="Precise Throughput Timer" index="&sect-num;.6.5" width="573" height="407" screenshot="timers/precise_throughput_timer.png">
-<description><p>This timer introduces variable pauses, calculated to keep the total throughput (e.g. in terms of samples per minute) as close as possible to a give figure. Of course the throughput will be lower if the server is not capable of handling it, or if other timers, or if there's not enough threads, or time-consuming test elements prevent it.</p>
+<description><p>This timer introduces variable pauses, calculated to keep the total throughput (e.g. in terms of samples per minute) as close as possible to a give figure. The timer does not generate threads, so the resulting throughput will be lower if the server is not capable of handling it, or if other timers add too big delays, or if there's not enough threads, or time-consuming test elements prevent it.</p>

Review comment:
       typo: given figure

##########
File path: src/core/src/main/kotlin/org/apache/jmeter/threads/precise/ThreadScheduleProcessGenerator.kt
##########
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jmeter.threads.precise
+
+import org.apache.jmeter.threads.precise.ThreadScheduleStep.ArrivalsStep
+import org.apache.jmeter.threads.precise.ThreadScheduleStep.RateStep
+import java.util.Random
+
+internal class ThreadScheduleProcessGenerator(

Review comment:
       Would it be possible to add some javadoc explaining this class ? 




-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-945507559


   pause/resume rampup is an interesting idea, however, it is not clear how should it behave in case multiple thread groups are running
   
   ----
   
   I guess "manual control" could better be implemented with a new "Control GUI" test element.
   In the most trivial case, "Control GUI" could allow users to add controls like:
   * floating number: range from...to, controlled as slider
   * on/off switch: button or checkbox
   
   The values could be mapped to properties, so a single control or button could drive multiple thread groups and timers.


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] codecov-commenter edited a comment on pull request #674: WIP: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
codecov-commenter edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-968265204


   # [Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) Report
   > Merging [#674](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (9da5898) into [master](https://codecov.io/gh/apache/jmeter/commit/3c23246558a56e751f3e4fd860f46a2440893fa8?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (3c23246) will **increase** coverage by `0.17%`.
   > The diff coverage is `46.33%`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/jmeter/pull/674/graphs/tree.svg?width=650&height=150&src=pr&token=6Q7CI1wFSh&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)
   
   ```diff
   @@             Coverage Diff              @@
   ##             master     #674      +/-   ##
   ============================================
   + Coverage     55.40%   55.58%   +0.17%     
   - Complexity    10230    10318      +88     
   ============================================
     Files          1047     1057      +10     
     Lines         64518    64946     +428     
     Branches       7317     7394      +77     
   ============================================
   + Hits          35749    36098     +349     
   - Misses        26271    26293      +22     
   - Partials       2498     2555      +57     
   ```
   
   
   | [Impacted Files](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | Coverage Δ | |
   |---|---|---|
   | [...src/main/java/org/apache/jmeter/gui/MainFrame.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci9ndWkvTWFpbkZyYW1lLmphdmE=) | `44.25% <0.00%> (+3.14%)` | :arrow_up: |
   | [...gui/action/validation/TreeClonerForValidation.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci9ndWkvYWN0aW9uL3ZhbGlkYXRpb24vVHJlZUNsb25lckZvclZhbGlkYXRpb24uamF2YQ==) | `0.00% <0.00%> (ø)` | |
   | [.../main/java/org/apache/jmeter/save/SaveService.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci9zYXZlL1NhdmVTZXJ2aWNlLmphdmE=) | `73.40% <ø> (-0.54%)` | :arrow_down: |
   | [...AddUndoableEditListenerPropertyChangeListener.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL0FkZFVuZG9hYmxlRWRpdExpc3RlbmVyUHJvcGVydHlDaGFuZ2VMaXN0ZW5lci5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [.../org/apache/jorphan/gui/ui/DefaultUndoManager.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL0RlZmF1bHRVbmRvTWFuYWdlci5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [...ain/java/org/apache/jorphan/util/JOrphanUtils.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vdXRpbC9KT3JwaGFuVXRpbHMuamF2YQ==) | `75.76% <0.00%> (-5.77%)` | :arrow_down: |
   | [...he/jmeter/threads/openmodel/gui/TargetRateChart.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL2d1aS9UYXJnZXRSYXRlQ2hhcnQua3Q=) | `6.45% <6.45%> (ø)` | |
   | [...e/jmeter/threads/openmodel/OpenModelThreadGroup.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL09wZW5Nb2RlbFRocmVhZEdyb3VwLmt0) | `12.12% <12.12%> (ø)` | |
   | [...ava/org/apache/jorphan/gui/ui/TextComponentUI.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL1RleHRDb21wb25lbnRVSS5qYXZh) | `26.82% <18.75%> (+26.82%)` | :arrow_up: |
   | [...hreads/openmodel/OpenModelThreadGroupController.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL09wZW5Nb2RlbFRocmVhZEdyb3VwQ29udHJvbGxlci5rdA==) | `25.00% <25.00%> (ø)` | |
   | ... and [44 more](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | |
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation). Last update [062190a...9da5898](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation).
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] rabelenda edited a comment on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
rabelenda edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959023323


   Hello,
   
   How does this compares to existing approach of using [Concurrency Thread Group in combination with Throughput Shaping Timer](https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/#Use-With-Throughput-Shaping-Timer-Feedback-Function)?
   
   Thank you


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-956502849


   I don't know why one would write something like `${__javaScript(var r=[]; for(var i=0; i<5; i++){ r.push("rate\("+i+"/sec\) random_arrivals\("+i+" sec\) rate\("+i*5+"/sec\)"); } r.join(" pause(1 sec)\n"),)}`, but it works:
   
   <img width="812" alt="javascript load profile" src="https://user-images.githubusercontent.com/213894/139726121-d721aa2c-f124-4b7b-8032-88dd0f11d944.png">
   
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] codecov-commenter commented on pull request #674: WIP: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
codecov-commenter commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-968265204


   # [Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) Report
   > Merging [#674](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (c4127c7) into [master](https://codecov.io/gh/apache/jmeter/commit/3c23246558a56e751f3e4fd860f46a2440893fa8?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (3c23246) will **increase** coverage by `0.18%`.
   > The diff coverage is `47.95%`.
   
   [![Impacted file tree graph](https://codecov.io/gh/apache/jmeter/pull/674/graphs/tree.svg?width=650&height=150&src=pr&token=6Q7CI1wFSh&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)
   
   ```diff
   @@             Coverage Diff              @@
   ##             master     #674      +/-   ##
   ============================================
   + Coverage     55.40%   55.59%   +0.18%     
   - Complexity    10230    10319      +89     
   ============================================
     Files          1047     1057      +10     
     Lines         64518    64929     +411     
     Branches       7317     7391      +74     
   ============================================
   + Hits          35749    36100     +351     
   - Misses        26271    26276       +5     
   - Partials       2498     2553      +55     
   ```
   
   
   | [Impacted Files](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | Coverage Δ | |
   |---|---|---|
   | [.../main/java/org/apache/jmeter/save/SaveService.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci9zYXZlL1NhdmVTZXJ2aWNlLmphdmE=) | `73.40% <ø> (-0.54%)` | :arrow_down: |
   | [...AddUndoableEditListenerPropertyChangeListener.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL0FkZFVuZG9hYmxlRWRpdExpc3RlbmVyUHJvcGVydHlDaGFuZ2VMaXN0ZW5lci5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [.../org/apache/jorphan/gui/ui/DefaultUndoManager.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL0RlZmF1bHRVbmRvTWFuYWdlci5qYXZh) | `0.00% <0.00%> (ø)` | |
   | [...ain/java/org/apache/jorphan/util/JOrphanUtils.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vdXRpbC9KT3JwaGFuVXRpbHMuamF2YQ==) | `75.76% <0.00%> (-5.77%)` | :arrow_down: |
   | [...he/jmeter/threads/openmodel/gui/TargetRateChart.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL2d1aS9UYXJnZXRSYXRlQ2hhcnQua3Q=) | `6.45% <6.45%> (ø)` | |
   | [...e/jmeter/threads/openmodel/OpenModelThreadGroup.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL09wZW5Nb2RlbFRocmVhZEdyb3VwLmt0) | `12.12% <12.12%> (ø)` | |
   | [...ava/org/apache/jorphan/gui/ui/TextComponentUI.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2pvcnBoYW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2pvcnBoYW4vZ3VpL3VpL1RleHRDb21wb25lbnRVSS5qYXZh) | `26.82% <18.75%> (+26.82%)` | :arrow_up: |
   | [...hreads/openmodel/OpenModelThreadGroupController.kt](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4va290bGluL29yZy9hcGFjaGUvam1ldGVyL3RocmVhZHMvb3Blbm1vZGVsL09wZW5Nb2RlbFRocmVhZEdyb3VwQ29udHJvbGxlci5rdA==) | `25.00% <25.00%> (ø)` | |
   | [.../main/java/org/apache/jmeter/util/JMeterUtils.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci91dGlsL0pNZXRlclV0aWxzLmphdmE=) | `53.90% <26.66%> (+2.54%)` | :arrow_up: |
   | [...n/java/org/apache/jmeter/threads/JMeterThread.java](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c3JjL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ptZXRlci90aHJlYWRzL0pNZXRlclRocmVhZC5qYXZh) | `68.81% <33.33%> (+0.51%)` | :arrow_up: |
   | ... and [43 more](https://codecov.io/gh/apache/jmeter/pull/674/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | |
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation). Last update [062190a...c4127c7](https://codecov.io/gh/apache/jmeter/pull/674?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation).
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-969187401


   I'm inclined to `Open Model Requests` or `Open Model Scenario` or something like that since `Thread Group` does not really have significant meaning here.
   
   Any thoughts on that?
   
   Of course, having `Thread Group` makes it easier for the users to realize that `Open Model Thread Group` is "similar to the existing `Thread Group`". However, as the threads get virtualized more and more, the whole thing becomes less and less a "Thread Group".


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-955579290


   Basic features work now:
   
   `rate(5/sec) random_arrivals(1sec) pause(1sec) rate(10/sec) random_arrivals(1sec) pause(1sec) rate(20/sec) random_arrivals(1sec)`
   
   <img width="817" alt="precise thread group config" src="https://user-images.githubusercontent.com/213894/139555737-a8820169-a290-4282-ad18-8910b8a43580.png">
   
   Output (based on "aggregate report" csv result):
   
   <img width="705" alt="samples" src="https://user-images.githubusercontent.com/213894/139555757-5ea32802-5126-4257-978c-994c2bc6fe7b.png">
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-983711698


   I do not intend to add more changes here, so please feel free to review.
   
   I will merge the PR soon.


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] orimarko commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
orimarko commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-945535139


   Most multi threads tests should be non GUI by JMeter best practice, so
   adding GUI control is less important
   
   בתאריך יום ב׳, 18 באוק׳ 2021, 11:25, מאת Vladimir Sitnikov ‏<
   ***@***.***>:
   
   > pause/resume rampup is an interesting idea, however, it is not clear how
   > should it behave in case multiple thread groups are running
   > ------------------------------
   >
   > I guess "manual control" could better be implemented with a new "Control
   > GUI" test element.
   > In the most trivial case, "Control GUI" could allow users to add controls
   > like:
   >
   >    - floating number: range from...to, controlled as slider
   >    - on/off switch: button or checkbox
   >
   > The values could be mapped to properties, so a single control or button
   > could drive multiple thread groups and timers.
   >
   > —
   > You are receiving this because you commented.
   > Reply to this email directly, view it on GitHub
   > <https://github.com/apache/jmeter/pull/674#issuecomment-945507559>, or
   > unsubscribe
   > <https://github.com/notifications/unsubscribe-auth/AECX4YN2QEMKMYP3AL2RFFTUHPKYLANCNFSM5GF32PIQ>
   > .
   > Triage notifications on the go with GitHub Mobile for iOS
   > <https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
   > or Android
   > <https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
   >
   >
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] orimarko commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
orimarko commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-945456378


   Please consider allowing on runtime to decrease/increase threads or pause/resume test, relevant bug https://bz.apache.org/bugzilla/show_bug.cgi?id=57640


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] mawasak commented on pull request #674: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
mawasak commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-969237932


   Side note
   
   "Injection profile" Concept in Gatling:
    https://gatling.io/docs/gatling/reference/current/general/simulation_setup/
   
   "Schedule actions" Concept In LoadRunner:
   https://admhelp.microfocus.com/lr/en/2021_R2/help/WebHelp/Content/Controller/r_schedule_actions.htm?tocpath=Controller%7CDesign%20load%20test%20scenarios%7CSchedule%20manual%20scenarios%7C_____4


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-955780938


   Added load profile chart. Note: JFreeChart can't be used (LGPL is forbidden in the ASF projects). Luckily https://github.com/JetBrains/lets-plot is very powerful and it has Apache 2.0 license.
   
   Schedule:
   
   ```
   rate(10/sec) random_arrivals(10 sec) pause(1 sec) /* warmup */
   rate(20/sec) random_arrivals(10 sec) pause(1 sec)
   rate(40/sec) random_arrivals(10 sec) pause(1 sec)
   rate(10/sec) random_arrivals(10 sec) rate(80/sec) random_arrivals(10sec) rate(0/sec) pause(1 sec)
   ```
   
   <img width="820" alt="precise thread group screen with chart" src="https://user-images.githubusercontent.com/213894/139599107-8c84508d-2827-4c26-9c4e-bb5ea388870e.png">
   
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi edited a comment on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-956502849


   I don't know why one would write something like `${__javaScript(var r=[]; for(var i=0; i<5; i++){ r.push("rate\("+i+"/sec\) random_arrivals\("+i+" sec\) rate\("+i*5+"/sec\)"); } r.join(" pause(1 sec)\n"),)}`, but it works.
   
   The expression computes into the following schedule:
   
   ```
   rate(0/sec) random_arrivals(0 sec) rate(0/sec) pause(1 sec)
   rate(1/sec) random_arrivals(1 sec) rate(5/sec) pause(1 sec)
   rate(2/sec) random_arrivals(2 sec) rate(10/sec) pause(1 sec)
   rate(3/sec) random_arrivals(3 sec) rate(15/sec) pause(1 sec)
   rate(4/sec) random_arrivals(4 sec) rate(20/sec)
   ```
   
   <img width="812" alt="javascript load profile" src="https://user-images.githubusercontent.com/213894/139726121-d721aa2c-f124-4b7b-8032-88dd0f11d944.png">
   
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959603679


   I believe the new thread group should be easier to configure and understand than the combination of thread group + timer


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-956502849


   I don't know why one would write something like `${__javaScript(var r=[]; for(var i=0; i<5; i++){ r.push("rate\("+i+"/sec\) random_arrivals\("+i+" sec\) rate\("+i*5+"/sec\)"); } r.join(" pause(1 sec)\n"),)}`, but it works:
   
   <img width="812" alt="javascript load profile" src="https://user-images.githubusercontent.com/213894/139726121-d721aa2c-f124-4b7b-8032-88dd0f11d944.png">
   
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] rabelenda edited a comment on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
rabelenda edited a comment on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959023323


   Hello,
   
   How does this compares to existing approach of using [Concurrency Thread Group in combination with Throughput Shaping Timer](https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/#Use-With-Throughput-Shaping-Timer-Feedback-Function)?
   
   Thank you


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Precise Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-959603679


   I believe the new thread group should be easier to configure and understand than the combination of thread group + timer


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on pull request #674: WIP: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on pull request #674:
URL: https://github.com/apache/jmeter/pull/674#issuecomment-967119365


   >I am not in favor of using kotlin here
   
   Do you veto the use of Kotlin?
   
   If not, I would suggest we just move on and see how it goes.
   
   > Open Model Thread Group
   
   Ok, let it be `Open Model Thread Group`.
   


-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on a change in pull request #674: WIP: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on a change in pull request #674:
URL: https://github.com/apache/jmeter/pull/674#discussion_r748486428



##########
File path: src/core/src/main/kotlin/org/apache/jmeter/threads/precise/ThreadScheduleProcessGenerator.kt
##########
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jmeter.threads.precise
+
+import org.apache.jmeter.threads.precise.ThreadScheduleStep.ArrivalsStep
+import org.apache.jmeter.threads.precise.ThreadScheduleStep.RateStep
+import java.util.Random
+
+internal class ThreadScheduleProcessGenerator(

Review comment:
       Of course, I was not sure if the class would survive, as there's a need to implement `even_arrivals` which might re-structure the classes.




-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] vlsi commented on a change in pull request #674: WIP: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
vlsi commented on a change in pull request #674:
URL: https://github.com/apache/jmeter/pull/674#discussion_r748720495



##########
File path: src/core/src/main/resources/org/apache/jmeter/resources/messages_fr.properties
##########
@@ -792,6 +792,10 @@ obsolete_test_element=Cet élément de test est obsolète
 once_only_controller_title=Contrôleur Exécution unique
 opcode=Code d'opération
 open=Ouvrir...
+openmodelthreadgroup=Open Model Thread Group
+openmodelthreadgroup_random_seed=Random Seed
+openmodelthreadgroup_schedule_string=Schedule
+openmodelthreadgroup_schedule_summary=Total duration: {0}, max rate: {1} / sec

Review comment:
       @pmouawad , it would be great if you could help with the translations




-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



[GitHub] [jmeter] pmouawad commented on a change in pull request #674: WIP: Open Model Thread Group

Posted by GitBox <gi...@apache.org>.
pmouawad commented on a change in pull request #674:
URL: https://github.com/apache/jmeter/pull/674#discussion_r748723151



##########
File path: src/core/src/main/resources/org/apache/jmeter/resources/messages_fr.properties
##########
@@ -792,6 +792,10 @@ obsolete_test_element=Cet élément de test est obsolète
 once_only_controller_title=Contrôleur Exécution unique
 opcode=Code d'opération
 open=Ouvrir...
+openmodelthreadgroup=Open Model Thread Group
+openmodelthreadgroup_random_seed=Random Seed
+openmodelthreadgroup_schedule_string=Schedule
+openmodelthreadgroup_schedule_summary=Total duration: {0}, max rate: {1} / sec

Review comment:
       openmodelthreadgroup=Groupe d'unités en modèle ouvert
   openmodelthreadgroup_random_seed=Sel pour la fonction aléatoire
   openmodelthreadgroup_schedule_string=Planification
   openmodelthreadgroup_schedule_summary=Durée totale: {0}, débit max: {1} / sec




-- 
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.

To unsubscribe, e-mail: dev-unsubscribe@jmeter.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org