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.

Let us see, what the next nightlys might bring.

Felix


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.




Reply via email to