jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: svn commit: r1849687 - in /jmeter/trunk: src/functions/org/apache/jmeter/functions/FileRowColContainer.java test/src/org/apache/jmeter/functions/TestFileRowColContainer.java xdocs/changes.xml
Date Tue, 01 Jan 2019 20:40:14 GMT
On Sun, 30 Dec 2018 at 16:12, Felix Schumacher
<felix.schumacher@internetallee.de> wrote:
>
>
> Am 29.12.18 um 12:15 schrieb Philippe Mouawad:
> > Hello Felix,
> > I made a commit yesterday illustrating what I was proposing.
> > Nightly builds passed but It may be too early to conclude.
> > Does it look ok to you ?
>
> I hadn't thought about that interface. It will probably lessen the
> chance that we hit the bug in our setup, but it is still present for all
> systems, that don't know about the semantic of that interface.

Huh?

I don't follow.

What bug are you referring to?

> Let us see, what the next nightlys might bring.
>
> Felix
>
> >
> > Thanks
> >
> > On Fri, Dec 28, 2018 at 8:29 PM Philippe Mouawad <philippe.mouawad@gmail.com>
> > wrote:
> >
> >> Hi Felix,
> >> Isn’t it fixed if we make test that touch base non parallel?
> >>
> >> It’s an interface to add .
> >> Or did i not understand the problem ?
> >>
> >> Thanks
> >>
> >> On Friday, December 28, 2018, Felix Schumacher <
> >> felix.schumacher@internetallee.de> wrote:
> >>
> >>> Am Freitag, den 28.12.2018, 17:41 +0000 schrieb sebb:
> >>>> On Fri, 28 Dec 2018 at 12:59, Felix Schumacher
> >>>> <felix.schumacher@internetallee.de> wrote:
> >>>>> Am Freitag, den 28.12.2018, 11:32 +0000 schrieb sebb:
> >>>>>> On Fri, 28 Dec 2018 at 10:35, Felix Schumacher
> >>>>>> <felix.schumacher@internetallee.de> wrote:
> >>>>>>> Am Freitag, den 28.12.2018, 08:24 +0100 schrieb Philippe
> >>>>>>> Mouawad:
> >>>>>>>> Hello,
> >>>>>>>> It seems this commit introduces random failures on nightly
> >>>>>>>> build:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>
> >>> https://ci.apache.org/builders/jmeter-nightly/builds/1264/steps/shell_5/logs/stdio
> >>>>>>> The test fails at
> >>>>>>>
> >>>>>>> 1)
> >>>>>>> testColumns(org.apache.jmeter.functions.TestFileRowColContainer
> >>>>>>> )
> >>>>>>>       [java] java.lang.NullPointerException
> >>>>>>>       [java]     at
> >>>>>>> org.apache.jmeter.services.FileServer$FileEntry.access$200(File
> >>>>>>> Serv
> >>>>>>> er.j
> >>>>>>> ava:534)
> >>>>>>>       [java]     at
> >>>>>>> org.apache.jmeter.services.FileServer.getResolvedFile(FileServe
> >>>>>>> r.ja
> >>>>>>> va:5
> >>>>>>> 31)
> >>>>>>>       [java]     at
> >>>>>>> org.apache.jmeter.functions.FileRowColContainer.load(FileRowCol
> >>>>>>> Cont
> >>>>>>> aine
> >>>>>>> r.java:78)
> >>>>>>>       [java]     at
> >>>>>>> org.apache.jmeter.functions.FileRowColContainer.<init>(FileRowC
> >>>>>>> olCo
> >>>>>>> ntai
> >>>>>>> ner.java:73)
> >>>>>>>       [java]     at
> >>>>>>> org.apache.jmeter.functions.TestFileRowColContainer.testColumns
> >>>>>>> (Tes
> >>>>>>> tFil
> >>>>>>> eRowColContainer.java:91)
> >>>>>>>       [java]     at
> >>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> >>>>>>> Method)
> >>>>>>>       [java]     at
> >>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccesso
> >>>>>>> rImp
> >>>>>>> l.ja
> >>>>>>> va:62)
> >>>>>>>       [java]     at
> >>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMetho
> >>>>>>> dAcc
> >>>>>>> esso
> >>>>>>> rImpl.java:43)
> >>>>>>>       [java]     at
> >>>>>>> java.lang.reflect.Method.invoke(Method.java:498)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Fra
> >>>>>>> mewo
> >>>>>>> rkMe
> >>>>>>> thod.java:50)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.internal.runners.model.ReflectiveCallable.run(Reflect
> >>>>>>> iveC
> >>>>>>> alla
> >>>>>>> ble.java:12)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.runners.model.FrameworkMethod.invokeExplosively(Frame
> >>>>>>> work
> >>>>>>> Meth
> >>>>>>> od.java:47)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.internal.runners.statements.InvokeMethod.evaluate(Inv
> >>>>>>> okeM
> >>>>>>> etho
> >>>>>>> d.java:17)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.internal.runners.statements.RunBefores.evaluate(RunBe
> >>>>>>> fore
> >>>>>>> s.ja
> >>>>>>> va:26)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.internal.runners.statements.RunAfters.evaluate(RunAft
> >>>>>>> ers.
> >>>>>>> java
> >>>>>>> :27)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4Cl
> >>>>>>> assR
> >>>>>>> unne
> >>>>>>> r.java:78)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4Cl
> >>>>>>> assR
> >>>>>>> unne
> >>>>>>> r.java:57)
> >>>>>>>       [java]     at
> >>>>>>> org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> >>>>>>>       [java]     at
> >>>>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.j
> >>>>>>> ava:
> >>>>>>> 511)
> >>>>>>>       [java]     at
> >>>>>>> java.util.concurrent.FutureTask.run(FutureTask.java:266)
> >>>>>>>       [java]     at
> >>>>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExe
> >>>>>>> cuto
> >>>>>>> r.ja
> >>>>>>> va:1149)
> >>>>>>>       [java]     at
> >>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolEx
> >>>>>>> ecut
> >>>>>>> or.j
> >>>>>>> ava:624)
> >>>>>>>       [java]     at java.lang.Thread.run(Thread.java:748)
> >>>>>>>
> >>>>>>> Especially the concurrent access makes me believe, that
this is
> >>>>>>> a
> >>>>>>> problem with the test case and not the implementation.
> >>>>>>>
> >>>>>>> Originally this test had no script base set. I added a script
> >>>>>>> base
> >>>>>>> before each test and reset it to the one found before after
the
> >>>>>>> test.
> >>>>>>>
> >>>>>>> Now, when those tests are run in parallel, it can happen,
that
> >>>>>>> the
> >>>>>>> first test sets a script base and remembers the original
one.
> >>>>>>> The
> >>>>>>> next
> >>>>>>> one starts before the first is finished and remembers the
"set"
> >>>>>>> base.
> >>>>>>> When this test finishes it will "reset" the script base
to the
> >>>>>>> "set"
> >>>>>>> base, which would be wrong.
> >>>>>>>
> >>>>>>> There are at least two options to get around this:
> >>>>>>>
> >>>>>>>   a) revert to state before the fix
> >>>>>>>   b) only set the script base and don't reset it after the
tests
> >>>>>>>
> >>>>>>> I don't want to take option a), but option b) will change
the
> >>>>>>> environment for all tests that run after these tests.
> >>>>>>>
> >>>>>>> What is your opionion on this (options plus explanation
:)
> >>>>>> AIUI there is only one script base for the whole of JMeter -
is
> >>>>>> that
> >>>>>> correct?
> >>>>>> If so, then it does not make sense to allow tests to run in
> >>>>>> parallel.
> >>>>> Thats my understanding as well, that all tests basically share one
> >>>>> script base.
> >>>>>
> >>>>>> Each test must be allowed to complete (and tidy up if necessary)
> >>>>>> before the next one starts.
> >>>>> That is what I tried, but I think it fails in the described manner.
> >>>> In which case there is likely some other bug that needs
> >>>> investigation.
> >>>> Either in the test case or the main JMeter code.
> >>> Well, I thought I described the mistake I made, but it seems, that I
> >>> didn't do a good enough job. So let me try with a diagram:
> >>>
> >>>    Thread A                         Thread B
> >>>    save old script base
> >>>    set new base
> >>>                                     Save old script base
> >>>    run test
> >>>                                     set new base
> >>>    reset base
> >>>                                     run test -> BOOM
> >>>
> >>>
> >>> That is a slight variation of my text version above.
> >>>
> >>> So we could get around it by setting the script base for all tests, or
> >>> make those tests synchronized in some kind of manner.
> >>>
> >>>>> I could try option b) hoping, that the assumption - that we only
> >>>>> use
> >>>>> one script base - holds.
> >>>> Whether or not there is only one script base should be clear by
> >>>> inspection of the code.
> >>> And hope, that that inspection is thorough enough.
> >>>
> >>> Regards,
> >>>   Felix
> >>>
> >>>>> Felix
> >>>>>
> >>>>>>> Regards,
> >>>>>>>   Felix
> >>>>>>>
> >>>>>>>> Regards
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Mon, Dec 24, 2018 at 2:13 PM <fschumacher@apache.org>
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Author: fschumacher
> >>>>>>>>> Date: Mon Dec 24 13:13:31 2018
> >>>>>>>>> New Revision: 1849687
> >>>>>>>>>
> >>>>>>>>> URL: http://svn.apache.org/viewvc?rev=1849687&view=rev
> >>>>>>>>> Log:
> >>>>>>>>> When using CSVRead search the script base path for
files,
> >>>>>>>>> too.
> >>>>>>>>>
> >>>>>>>>> Bugzilla Id: 63037
> >>>>>>>>>
> >>>>>>>>> Modified:
> >>>>>>>>>
> >>>>>>>>> jmeter/trunk/src/functions/org/apache/jmeter/functions/File
> >>>>>>>>> RowC
> >>>>>>>>> olCo
> >>>>>>>>> ntainer.java
> >>>>>>>>>
> >>>>>>>>> jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileR
> >>>>>>>>> owCo
> >>>>>>>>> lCon
> >>>>>>>>> tainer.java
> >>>>>>>>>      jmeter/trunk/xdocs/changes.xml
> >>>>>>>>>
> >>>>>>>>> Modified:
> >>>>>>>>> jmeter/trunk/src/functions/org/apache/jmeter/functions/File
> >>>>>>>>> RowC
> >>>>>>>>> olCo
> >>>>>>>>> ntainer.java
> >>>>>>>>> URL:
> >>>>>>>>>
> >>>>>>>
> >>>>>
> >>> http://svn.apache.org/viewvc/jmeter/trunk/src/functions/org/apache/jmeter/functions/FileRowColContainer.java?rev=1849687&r1=1849686&r2=1849687&view=diff
> >>>>>>>>> ===========================================================
> >>>>>>>>> ====
> >>>>>>>>> ====
> >>>>>>>>> ===========
> >>>>>>>>> ---
> >>>>>>>>> jmeter/trunk/src/functions/org/apache/jmeter/functions/File
> >>>>>>>>> RowC
> >>>>>>>>> olCo
> >>>>>>>>> ntainer.java
> >>>>>>>>> (original)
> >>>>>>>>> +++
> >>>>>>>>> jmeter/trunk/src/functions/org/apache/jmeter/functions/File
> >>>>>>>>> RowC
> >>>>>>>>> olCo
> >>>>>>>>> ntainer.java
> >>>>>>>>> Mon Dec 24 13:13:31 2018
> >>>>>>>>> @@ -19,7 +19,6 @@
> >>>>>>>>>   package org.apache.jmeter.functions;
> >>>>>>>>>
> >>>>>>>>>   import java.io.BufferedReader;
> >>>>>>>>> -import java.io.File;
> >>>>>>>>>   import java.io.FileNotFoundException;
> >>>>>>>>>   import java.io.IOException;
> >>>>>>>>>   import java.nio.charset.Charset;
> >>>>>>>>> @@ -28,6 +27,7 @@ import java.util.ArrayList;
> >>>>>>>>>   import java.util.List;
> >>>>>>>>>   import java.util.StringTokenizer;
> >>>>>>>>>
> >>>>>>>>> +import org.apache.jmeter.services.FileServer;
> >>>>>>>>>   import org.apache.jmeter.util.JMeterUtils;
> >>>>>>>>>   import org.slf4j.Logger;
> >>>>>>>>>   import org.slf4j.LoggerFactory;
> >>>>>>>>> @@ -75,7 +75,7 @@ public class FileRowColContainer
{
> >>>>>>>>>
> >>>>>>>>>       private void load() throws IOException,
> >>>>>>>>> FileNotFoundException
> >>>>>>>>> {
> >>>>>>>>>           try (BufferedReader myBread =
> >>>>>>>>> -                Files.newBufferedReader(new
> >>>>>>>>> File(fileName).toPath(),
> >>>>>>>>> +
> >>>>>>>>> Files.newBufferedReader(FileServer.getFileServer().getResol
> >>>>>>>>> vedF
> >>>>>>>>> ile(
> >>>>>>>>> fileName).toPath(),
> >>>>>>>>>
> >>>>>>>>>                           Charset.defaultCharset()))
{
> >>>>>>>>>               String line = myBread.readLine();
> >>>>>>>>>               /*
> >>>>>>>>>
> >>>>>>>>> Modified:
> >>>>>>>>> jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileR
> >>>>>>>>> owCo
> >>>>>>>>> lCon
> >>>>>>>>> tainer.java
> >>>>>>>>> URL:
> >>>>>>>>>
> >>>>>>>
> >>>>>
> >>> http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileRowColContainer.java?rev=1849687&r1=1849686&r2=1849687&view=diff
> >>>>>>>>> ===========================================================
> >>>>>>>>> ====
> >>>>>>>>> ====
> >>>>>>>>> ===========
> >>>>>>>>> ---
> >>>>>>>>> jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileR
> >>>>>>>>> owCo
> >>>>>>>>> lCon
> >>>>>>>>> tainer.java
> >>>>>>>>> (original)
> >>>>>>>>> +++
> >>>>>>>>> jmeter/trunk/test/src/org/apache/jmeter/functions/TestFileR
> >>>>>>>>> owCo
> >>>>>>>>> lCon
> >>>>>>>>> tainer.java
> >>>>>>>>> Mon Dec 24 13:13:31 2018
> >>>>>>>>> @@ -23,9 +23,14 @@ import static org.junit.Assert.assertNot
> >>>>>>>>>   import static org.junit.Assert.assertTrue;
> >>>>>>>>>   import static org.junit.Assert.fail;
> >>>>>>>>>
> >>>>>>>>> +import java.io.File;
> >>>>>>>>>   import java.nio.file.NoSuchFileException;
> >>>>>>>>>
> >>>>>>>>>   import org.apache.jmeter.junit.JMeterTestCase;
> >>>>>>>>> +import org.apache.jmeter.services.FileServer;
> >>>>>>>>> +import org.apache.jmeter.util.JMeterUtils;
> >>>>>>>>> +import org.junit.After;
> >>>>>>>>> +import org.junit.Before;
> >>>>>>>>>   import org.junit.Test;
> >>>>>>>>>
> >>>>>>>>>   /**
> >>>>>>>>> @@ -35,7 +40,20 @@ import org.junit.Test;
> >>>>>>>>>    */
> >>>>>>>>>   public class TestFileRowColContainer extends
> >>>>>>>>> JMeterTestCase {
> >>>>>>>>>
> >>>>>>>>> -    @Test(expected=NoSuchFileException.class)
> >>>>>>>>> +    private String defaultBase = null;
> >>>>>>>>> +
> >>>>>>>>> +    @Before
> >>>>>>>>> +    public void setUp() {
> >>>>>>>>> +        defaultBase = FileServer.getDefaultBase();
> >>>>>>>>> +        FileServer.getFileServer().setBase(new
> >>>>>>>>> File(JMeterUtils.getJMeterHome() + "/bin"));
> >>>>>>>>> +    }
> >>>>>>>>> +
> >>>>>>>>> +    @After
> >>>>>>>>> +    public void tearDown() {
> >>>>>>>>> +        FileServer.getFileServer().setBase(new
> >>>>>>>>> File(defaultBase));
> >>>>>>>>> +    }
> >>>>>>>>> +
> >>>>>>>>> +    @Test(expected = NoSuchFileException.class)
> >>>>>>>>>       public void testNull() throws Exception {
> >>>>>>>>>           new
> >>>>>>>>> FileRowColContainer(findTestPath("testfiles/xyzxyz"));
> >>>>>>>>>       }
> >>>>>>>>> @@ -46,6 +64,20 @@ public class TestFileRowColContainer
ext
> >>>>>>>>>           assertNotNull(f);
> >>>>>>>>>           assertEquals("Expected 4 lines", 4, f.getSize());
> >>>>>>>>>
> >>>>>>>>> +        assertEquals(0, f.nextRow());
> >>>>>>>>> +        assertEquals(1, f.nextRow());
> >>>>>>>>> +        assertEquals(2, f.nextRow());
> >>>>>>>>> +        assertEquals(3, f.nextRow());
> >>>>>>>>> +        assertEquals(0, f.nextRow());
> >>>>>>>>> +
> >>>>>>>>> +    }
> >>>>>>>>> +
> >>>>>>>>> +    @Test
> >>>>>>>>> +    public void testRowNumRelative() throws Exception
{
> >>>>>>>>> +        FileRowColContainer f = new
> >>>>>>>>> FileRowColContainer("testfiles/unit/TestFileRowColContainer
> >>>>>>>>> .csv
> >>>>>>>>> ");
> >>>>>>>>> +        assertNotNull(f);
> >>>>>>>>> +        assertEquals("Expected 4 lines", 4, f.getSize());
> >>>>>>>>> +
> >>>>>>>>>           assertEquals(0, f.nextRow());
> >>>>>>>>>           assertEquals(1, f.nextRow());
> >>>>>>>>>           assertEquals(2, f.nextRow());
> >>>>>>>>>
> >>>>>>>>> Modified: jmeter/trunk/xdocs/changes.xml
> >>>>>>>>> URL:
> >>>>>>>>>
> >>>>>>>
> >>>>>
> >>> http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1849687&r1=1849686&r2=1849687&view=diff
> >>>>>>>>> ===========================================================
> >>>>>>>>> ====
> >>>>>>>>> ====
> >>>>>>>>> ===========
> >>>>>>>>> --- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
> >>>>>>>>> +++ jmeter/trunk/xdocs/changes.xml [utf-8] Mon Dec
24
> >>>>>>>>> 13:13:31
> >>>>>>>>> 2018
> >>>>>>>>> @@ -105,6 +105,7 @@ of previous time slot as a base.
> >>>>>>>>> Startin
> >>>>>>>>>
> >>>>>>>>>   <h3>Functions</h3>
> >>>>>>>>>   <ul>
> >>>>>>>>> +  <li><bug>63037</bug>When using
<code>CSVRead</code>
> >>>>>>>>> search
> >>>>>>>>> the
> >>>>>>>>> script
> >>>>>>>>> base path for files, too.</li>
> >>>>>>>>>   </ul>
> >>>>>>>>>
> >>>>>>>>>   <h3>I18N</h3>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>
> >> --
> >> Cordialement.
> >> Philippe Mouawad.
> >>
> >>
> >>
> >>

Mime
View raw message