Lines 29-34
import org.apache.jmeter.testelement.AbstractTestElement;
Link Here
|
29 |
import org.apache.jmeter.testelement.TestStateListener; |
29 |
import org.apache.jmeter.testelement.TestStateListener; |
30 |
import org.apache.jmeter.testelement.ThreadListener; |
30 |
import org.apache.jmeter.testelement.ThreadListener; |
31 |
import org.apache.jmeter.threads.JMeterContextService; |
31 |
import org.apache.jmeter.threads.JMeterContextService; |
|
|
32 |
import org.apache.jmeter.threads.BlockingTimer; |
32 |
import org.slf4j.Logger; |
33 |
import org.slf4j.Logger; |
33 |
import org.slf4j.LoggerFactory; |
34 |
import org.slf4j.LoggerFactory; |
34 |
|
35 |
|
Lines 38-44
import org.slf4j.LoggerFactory;
Link Here
|
38 |
* thus create large instant loads at various points of the test plan. |
39 |
* thus create large instant loads at various points of the test plan. |
39 |
* |
40 |
* |
40 |
*/ |
41 |
*/ |
41 |
public class SyncTimer extends AbstractTestElement implements Timer, Serializable, TestBean, TestStateListener, ThreadListener { |
42 |
public class SyncTimer extends AbstractTestElement implements BlockingTimer, Serializable, TestBean, TestStateListener, ThreadListener { |
42 |
private static final Logger log = LoggerFactory.getLogger(SyncTimer.class); |
43 |
private static final Logger log = LoggerFactory.getLogger(SyncTimer.class); |
43 |
|
44 |
|
44 |
/** |
45 |
/** |
Lines 142-147
public class SyncTimer extends AbstractTestElement implements Timer, Serializabl
Link Here
|
142 |
|
143 |
|
143 |
private long timeoutInMs; |
144 |
private long timeoutInMs; |
144 |
|
145 |
|
|
|
146 |
private long endTime; |
147 |
|
145 |
// Ensure transient object is created by the server |
148 |
// Ensure transient object is created by the server |
146 |
private Object readResolve(){ |
149 |
private Object readResolve(){ |
147 |
createBarrier(); |
150 |
createBarrier(); |
Lines 172-184
public class SyncTimer extends AbstractTestElement implements Timer, Serializabl
Link Here
|
172 |
int arrival = 0; |
175 |
int arrival = 0; |
173 |
try { |
176 |
try { |
174 |
if(timeoutInMs==0) { |
177 |
if(timeoutInMs==0) { |
175 |
arrival = this.barrier.await(); |
178 |
long forcedTimeoutInMs = endTime - System.currentTimeMillis(); |
|
|
179 |
arrival = this.barrier.await(forcedTimeoutInMs, TimeUnit.MILLISECONDS); |
176 |
} else if(timeoutInMs > 0){ |
180 |
} else if(timeoutInMs > 0){ |
177 |
arrival = this.barrier.await(timeoutInMs, TimeUnit.MILLISECONDS); |
181 |
arrival = this.barrier.await(timeoutInMs, TimeUnit.MILLISECONDS); |
178 |
} else { |
182 |
} else { |
179 |
throw new IllegalArgumentException("Negative value for timeout:"+timeoutInMs+" in Synchronizing Timer "+getName()); |
183 |
throw new IllegalArgumentException("Negative value for timeout:"+timeoutInMs+" in Synchronizing Timer "+getName()); |
180 |
} |
184 |
} |
181 |
} catch (InterruptedException | BrokenBarrierException e) { |
185 |
} catch (InterruptedException e) { |
|
|
186 |
Thread.currentThread().interrupt(); |
187 |
return 0; |
188 |
} catch (BrokenBarrierException e) { |
182 |
return 0; |
189 |
return 0; |
183 |
} catch (TimeoutException e) { |
190 |
} catch (TimeoutException e) { |
184 |
if (log.isWarnEnabled()) { |
191 |
if (log.isWarnEnabled()) { |
Lines 242-247
public class SyncTimer extends AbstractTestElement implements Timer, Serializabl
Link Here
|
242 |
* |
249 |
* |
243 |
*/ |
250 |
*/ |
244 |
private void createBarrier() { |
251 |
private void createBarrier() { |
|
|
252 |
if (this.barrier != null) { |
253 |
log.debug("Reset old barrier before creating new one."); |
254 |
this.barrier.reset(); |
255 |
} |
245 |
if(getGroupSize() == 0) { |
256 |
if(getGroupSize() == 0) { |
246 |
// Lazy init |
257 |
// Lazy init |
247 |
this.barrier = new BarrierWrapper(); |
258 |
this.barrier = new BarrierWrapper(); |
Lines 277-280
public class SyncTimer extends AbstractTestElement implements Timer, Serializabl
Link Here
|
277 |
public void setTimeoutInMs(long timeoutInMs) { |
288 |
public void setTimeoutInMs(long timeoutInMs) { |
278 |
this.timeoutInMs = timeoutInMs; |
289 |
this.timeoutInMs = timeoutInMs; |
279 |
} |
290 |
} |
|
|
291 |
|
292 |
@Override |
293 |
public void setMaxEndTime(long endTime) { |
294 |
this.endTime = endTime; |
295 |
} |
280 |
} |
296 |
} |