jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Schumacher <felix.schumac...@internetallee.de>
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 Wed, 02 Jan 2019 19:12:43 GMT

Am 01.01.19 um 21:40 schrieb sebb:
> 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?

We still have the bug I described, in my previous mails, that the script 
base might be set to null, when the test cases are ran concurrently. The 
interface marker we are using now is used by our test runner, only.

Felix

>
>> 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