jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Philippe Mouawad <philippe.moua...@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 Fri, 28 Dec 2018 19:29:19 GMT
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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message