Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 82CB9200C39 for ; Thu, 2 Mar 2017 02:14:15 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 81662160B78; Thu, 2 Mar 2017 01:14:15 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id A3D5A160B70 for ; Thu, 2 Mar 2017 02:14:14 +0100 (CET) Received: (qmail 97240 invoked by uid 500); 2 Mar 2017 01:14:13 -0000 Mailing-List: contact dev-help@jmeter.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jmeter.apache.org Delivered-To: mailing list dev@jmeter.apache.org Received: (qmail 97228 invoked by uid 99); 2 Mar 2017 01:14:13 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 02 Mar 2017 01:14:13 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 29115C0468 for ; Thu, 2 Mar 2017 01:14:13 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.699 X-Spam-Level: X-Spam-Status: No, score=0.699 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=disabled Authentication-Results: spamd1-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id Mx70g74mSX7K for ; Thu, 2 Mar 2017 01:14:11 +0000 (UTC) Received: from mail-wr0-f177.google.com (mail-wr0-f177.google.com [209.85.128.177]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTPS id 490075F23D for ; Thu, 2 Mar 2017 01:14:11 +0000 (UTC) Received: by mail-wr0-f177.google.com with SMTP id g10so41827932wrg.2 for ; Wed, 01 Mar 2017 17:14:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=9xxfL2m/J3oxq+M5N5aQBYGFe2J9xKPaw39lWpQtJGg=; b=RO3K0Ua1/jwy+P5yheVn3kU72sRQcrlEuoP2JNurV7xjDd6U/azde2KnGpJRM13hkB 0VCS2UtTP7/caW3lolQktqb2mPERYit6chHmbCRa/dMpq5x+YkWpUAMWJFWZuGMLG0MM MWSTariABJ7eQHrtsYOSX1kaUs+cVQMvNbs2eyfC0ah69JwrSZ2dBcptvYELmb+q6hqf o0W5TINM9GAg/rdYDzgON/fPDpNJVEDcwRGfoD/Fg/oVlAkrWGavu8MwcTUmZdLG/yvn /p7287twcq0wDtPCnrOrCHQkYAEVt+C1AnZBDh3WFJZDa3RlLHbYbDjx70viDmaHzWLg fNwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=9xxfL2m/J3oxq+M5N5aQBYGFe2J9xKPaw39lWpQtJGg=; b=aSN22zGXmgHLPn0/TUS3VU0GEAaPQndxMPjIfIj4FWh+e2aDHLUYNfQRXZZqm5fIUw 1iG3jL8CMRCw3SFK57g21l9O3YQxVXqJRMqxWJY1wMXZclE/hX+wla/qzeyoKjPjXMBt z50J68uRPcPsLuxwNsSXqTQb2nR7vjXLN4Vsmjn2bHDkfrTujH8aT/MdJpBcgq4cFN0q zaqa70B5w2/hXo+79OuAlYKBpWyAnNjry79MMZDyY7WtxXai7LDfyBJcb4NX825T9y+i X0w1NLfx6lDP2uo6xpk5UKVi5jSgs1QrEAdMWliDv8c6NFvYxKTUicBUAJxBaxFsg77A BKSw== X-Gm-Message-State: AMke39mcp+D9m2987vPiMc9sC6TjsXwE/Ske0tvWfyc4KOPW0KHXuhrlxcAAEblrZUc9BRXUpBXxyokx4cB2jg== X-Received: by 10.223.138.252 with SMTP id z57mr9443758wrz.110.1488417245430; Wed, 01 Mar 2017 17:14:05 -0800 (PST) MIME-Version: 1.0 Received: by 10.223.169.48 with HTTP; Wed, 1 Mar 2017 17:14:04 -0800 (PST) In-Reply-To: <20170301222242.841693A0112@svn01-us-west.apache.org> References: <20170301222242.841693A0112@svn01-us-west.apache.org> From: sebb Date: Thu, 2 Mar 2017 01:14:04 +0000 Message-ID: Subject: Re: svn commit: r1785057 - in /jmeter/trunk: src/components/org/apache/jmeter/sampler/TestAction.java src/components/org/apache/jmeter/timers/TimerService.java src/core/org/apache/jmeter/threads/JMeterThread.java xdocs/changes.xml To: dev@jmeter.apache.org Content-Type: text/plain; charset=UTF-8 archived-at: Thu, 02 Mar 2017 01:14:15 -0000 On 1 March 2017 at 22:22, wrote: > Author: pmouawad > Date: Wed Mar 1 22:22:42 2017 > New Revision: 1785057 > > URL: http://svn.apache.org/viewvc?rev=1785057&view=rev > Log: > Bug 60797 - TestAction in pause mode can last beyond configured duration of test > Bugzilla Id: 60797 > > Added: > jmeter/trunk/src/components/org/apache/jmeter/timers/TimerService.java (with props) > Modified: > jmeter/trunk/src/components/org/apache/jmeter/sampler/TestAction.java > jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java > jmeter/trunk/xdocs/changes.xml > > Modified: jmeter/trunk/src/components/org/apache/jmeter/sampler/TestAction.java > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/sampler/TestAction.java?rev=1785057&r1=1785056&r2=1785057&view=diff > ============================================================================== > --- jmeter/trunk/src/components/org/apache/jmeter/sampler/TestAction.java (original) > +++ jmeter/trunk/src/components/org/apache/jmeter/sampler/TestAction.java Wed Mar 1 22:22:42 2017 > @@ -33,6 +33,7 @@ import org.apache.jmeter.testelement.pro > import org.apache.jmeter.testelement.property.StringProperty; > import org.apache.jmeter.threads.JMeterContext; > import org.apache.jmeter.threads.JMeterContextService; > +import org.apache.jmeter.timers.TimerService; > import org.slf4j.Logger; > import org.slf4j.LoggerFactory; > > @@ -45,6 +46,8 @@ public class TestAction extends Abstract > > private static final Logger log = LoggerFactory.getLogger(TestAction.class); > > + private static final TimerService TIMER_SERVICE = TimerService.getInstance(); > + > private static final long serialVersionUID = 241L; > > private static final Set APPLIABLE_CONFIG_CLASSES = new HashSet<>( > @@ -121,7 +124,7 @@ public class TestAction extends Abstract > try { > pauseThread = Thread.currentThread(); > if(millis>0) { > - TimeUnit.MILLISECONDS.sleep(millis); > + TimeUnit.MILLISECONDS.sleep(TIMER_SERVICE.adjustDelay(millis)); > } else if(millis<0) { > throw new IllegalArgumentException("Configured sleep is negative:"+millis); > } // else == 0 we do nothing > > Added: jmeter/trunk/src/components/org/apache/jmeter/timers/TimerService.java > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/components/org/apache/jmeter/timers/TimerService.java?rev=1785057&view=auto > ============================================================================== > --- jmeter/trunk/src/components/org/apache/jmeter/timers/TimerService.java (added) > +++ jmeter/trunk/src/components/org/apache/jmeter/timers/TimerService.java Wed Mar 1 22:22:42 2017 > @@ -0,0 +1,74 @@ > +/* > + * 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.timers; > + > +import org.apache.jmeter.threads.JMeterContextService; > +import org.apache.jmeter.threads.JMeterThread; > + > +/** > + * Manages logic related to timers and pauses > + * @since 3.2 > + */ > +public class TimerService { > + > + private TimerService() { > + super(); > + } > + > + /** > + * Initialization On Demand Holder pattern > + */ > + private static class TimerServiceHolder { > + public static final TimerService INSTANCE = new TimerService(); This should be package protected; no point in being public. > + } > + > + /** > + * @return ScriptEngineManager singleton > + */ > + public static TimerService getInstance() { > + return TimerServiceHolder.INSTANCE; > + } But why is the IODH idiom used here? It looks just like a utility class. The methods could just be static. > + > + /** > + * Adjust delay so that initialDelay does not exceed end of test > + * @param delay initial delay in millis > + * @return initialDelay or adjusted delay > + */ > + public long adjustDelay(final long initialDelay) { > + JMeterThread thread = JMeterContextService.getContext().getThread(); > + long endTime = thread != null ? thread.getEndTime() : 0; > + return adjustDelay(initialDelay, endTime); > + } > + > + /** > + * Adjust delay so that initialDelay does not exceed end of test > + * @param initialDelay initial delay in millis > + * @param endTime End time of JMeterThread > + * @return initialDelay or adjusted delay > + */ > + public long adjustDelay(final long initialDelay, long endTime) { > + if (endTime > 0) { > + long now = System.currentTimeMillis(); > + if(now + initialDelay > endTime) { > + return endTime - now; > + } > + } > + return initialDelay; > + } > +} > > Propchange: jmeter/trunk/src/components/org/apache/jmeter/timers/TimerService.java > ------------------------------------------------------------------------------ > svn:eol-style = native > > Propchange: jmeter/trunk/src/components/org/apache/jmeter/timers/TimerService.java > ------------------------------------------------------------------------------ > svn:mime-type = text/plain > > Modified: jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java > URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java?rev=1785057&r1=1785056&r2=1785057&view=diff > ============================================================================== > --- jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java (original) > +++ jmeter/trunk/src/core/org/apache/jmeter/threads/JMeterThread.java Wed Mar 1 22:22:42 2017 > @@ -47,6 +47,7 @@ import org.apache.jmeter.testelement.Tes > import org.apache.jmeter.testelement.TestIterationListener; > import org.apache.jmeter.testelement.ThreadListener; > import org.apache.jmeter.timers.Timer; > +import org.apache.jmeter.timers.TimerService; > import org.apache.jmeter.util.JMeterUtils; > import org.apache.jorphan.collections.HashTree; > import org.apache.jorphan.collections.HashTreeTraverser; > @@ -79,6 +80,7 @@ public class JMeterThread implements Run > > private static final float TIMER_FACTOR = JMeterUtils.getPropDefault("timer.factor", 1.0f); > > + private static final TimerService TIMER_SERVICE = TimerService.getInstance(); > /** > * 1 as float > */ > @@ -842,10 +844,7 @@ public class JMeterThread implements Run > if(scheduler) { > // We reduce pause to ensure end of test is not delayed by a sleep ending after test scheduled end > // See Bug 60049 > - long now = System.currentTimeMillis(); > - if(now + totalDelay > endTime) { > - totalDelay = endTime - now; > - } > + totalDelay = TIMER_SERVICE.adjustDelay(totalDelay, endTime); > } > TimeUnit.MILLISECONDS.sleep(totalDelay); > } catch (InterruptedException e) { > > Modified: jmeter/trunk/xdocs/changes.xml > URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1785057&r1=1785056&r2=1785057&view=diff > ============================================================================== > --- jmeter/trunk/xdocs/changes.xml [utf-8] (original) > +++ jmeter/trunk/xdocs/changes.xml [utf-8] Wed Mar 1 22:22:42 2017 > @@ -276,6 +276,7 @@ JMeter now requires Java 8. Ensure you u >
  • 60730The JSON PostProcessor should set the _ALL variable even if the JSON path matches only once.
  • >
  • 60747Response Assertion : Add Request Headers to Field to Test
  • >
  • 60763XMLAssertion should not leak errors to console
  • > +
  • 60797TestAction in pause mode can last beyond configured duration of test
  • > > >

    Functions

    > >