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.