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 ?

Thanks

On Fri, Dec 28, 2018 at 8:29 PM Philippe Mouawad <philippe.moua...@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.schumac...@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.schumac...@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.schumac...@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 <fschumac...@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.
>
>
>
>

-- 
Cordialement.
Philippe Mouawad.

Reply via email to