Bug 63674

Summary: "DataStrippingSampleSender" doesn't work with "Retrieve All Embedded Resouces"
Product: JMeter - Now in Github Reporter: pierre.astruc
Component: MainAssignee: JMeter issues mailing list <issues>
Status: RESOLVED FIXED    
Severity: major Keywords: FixedInTrunk, PatchAvailable
Priority: P2    
Version: 5.1.1   
Target Milestone: JMETER_5.2   
Hardware: All   
OS: All   
Attachments: jmeter.properties of master jmeter
test plan to run without and with "retreive all embedded resources"
Strip results hierarchy even deeper

Description pierre.astruc 2019-08-20 10:54:15 UTC
Hello jmeter team !

I'm currently running Jmeter 5.1.1 and I have found something strange with remote batching.

When using mode=DiskStore or mode=StrippedDiskStore, I can't find any difference in term of temp disk usage or network used to transmit data to master at the end of the test.

The goal of StrippedDiskStore is to strip response data from serialized flow no ?
So it just don't work.
- Remote jmeter server temp files have the same size /tmp/SerialisedSampleSender119928309885821559.ser
- Remote jmeter server temp files have response data
- At the end of the test, total data sent to the master use the same mbit rate during the same time.

The bug is really easy to reproduce :)
Have a try, and tell me !
Cheers
Comment 1 pierre.astruc 2019-08-20 13:36:55 UTC
I perform more tests and my conclusion is that the bug is located into the [Check] Retrieve All Embedded Resources option.

When this option is enabled, the StrippingSampler is not working, and amout of data transmitted to the master is indeed insane.

Here are my result with the same Test Plan and some jp@gc graph listeners:
This are the MB size transmitted over lan to the jmeter master:

- Without "Retrieve All Embedded Resources"
-- mode=Batch : 583 MB
-- mode=StrippedBatch : 4 MB
-- mode=DiskStore : 547 MB
-- mode=StrippedDiskStore : 48 MB

- With the option "Retrieve All Embedded Resources"
-- mode=Batch : 2090 MB
-- mode=StrippedBatch : 2010 MB
-- mode=DiskStore : 2150 MB
-- mode=StrippedDiskStore : 2160 MB

For me, all the resources automatically retreived with the option are not Stripped correctly, the problem is the same with Batch or DiskStore mode.
Tested on Jmeter 5.1.1 + Java 8
Comment 2 Felix Schumacher 2019-08-20 19:56:14 UTC
Can you give more information about:
 * the plan you are using (it would be best to have a minimal test, that we could use)
 * where you specified the mode and how
 * where the results failures or normal responses

I have tried to reproduce it and in my setup (setting the mode on the controlling server) it worked and the controlled node saved the headers only.
Comment 3 pierre.astruc 2019-08-21 11:13:42 UTC
Created attachment 36726 [details]
jmeter.properties of master jmeter
Comment 4 pierre.astruc 2019-08-21 11:19:48 UTC
Created attachment 36727 [details]
test plan to run without and with "retreive all embedded resources"
Comment 5 pierre.astruc 2019-08-21 11:49:28 UTC
Hello Felix,
Thanks for the quick reply :)

Okay here is my setup, let's hope you will be able to reproduce the bug :)

1 - Start one slave with jmeter 5.1.1 in CLI, started with ./jmeter-server and with only 2 modifications in jmeter.properties
httpclient4.retrycount=1
httpsampler.ignore_failed_embedded_resources=true

2 - Start one master with jmeter 5.1.1 in GUI, started with ./jmeter and with only 4 modifications in jmeter.properties (attachment provided)
httpclient4.retrycount=1
httpsampler.ignore_failed_embedded_resources=true
remote_hosts=stress06
mode=DiskStore

3 - Open the "SimpleTest.jmx" on GUI and remote run it to your slave node (stress06 here)
It's one 60 seconds test plan with two step.

Test1: ok
- mode=DiskStore
- [Uncheck] "retrieve all embedded resources" into advanced tab of "http request defaults"
- result:
-- one 55000 KB file is generated in /tmp/SerialisedSampleSender*.ser
-- this file contain response data of main requests (<!DOCTYPE html><html><head>...) -> this behaviour is normal :)

Test2: ok
- mode=StrippedDiskStore
- [Uncheck] "retrieve all embedded resources" into advanced tab of "http request defaults"
- result:
-- one 320 KB file is generated in /tmp/SerialisedSampleSender*.ser
-- this file doesn't contain any response data -> this behaviour is normal thanks to Stripped :)

Test3: ok
- mode=DiskStore
- [Check] "retrieve all embedded resources" into advanced tab of "http request defaults"
- result:
-- one 187000 KB file is generated in /tmp/SerialisedSampleSender*.ser
-- this file contain response data of main (<!DOCTYPE html><html><head>...) and embedded requests (...<FF><EE>^@^NAdobe^@d<C0>...) -> this behaviour is normal :)

Test4: bug
- mode=StrippedDiskStore
- [Check] "retrieve all embedded resources" into advanced tab of "http request defaults"
- result:
-- one 187000 KB file is generated in /tmp/SerialisedSampleSender*.ser
-- this file contain response data of main (<!DOCTYPE html><html><head>...) and embedded requests (...<FF><EE>^@^NAdobe^@d<C0>...) -> Here is the bug, with StrippedDiskStore, all the responses sample should be dropped, and here we have response from main + embedded requests

Problem is also present in StrippedBatch, but it should be easier to debug with StrippedDiskStore :)
Comment 6 Felix Schumacher 2019-08-24 13:30:15 UTC
Created attachment 36735 [details]
Strip results hierarchy even deeper

I get an error for at least one of the css files:

2019-08-22 22:30:11,401 WARN c.h.c.r.e.LoggingCSSParseErrorHandler: Browser compliant mode skipped CSS from [1:36853] starting at token 'progid' until [1:36940] to token '}' (based on com.he
lger.css.parser.ParseException: Encountered unexpected token: ":" ":"
    at line 1, column 36859.

Was expecting one of:

    "+"
    "-"

That error together with the setting httpsampler.ignore_failed_embedded_resources=true leads to a deeper hierarchy of sample results than the stripping logic expects.

The attached patch strips more of the hierarchy and should solve your problems.
Comment 7 Felix Schumacher 2019-08-24 15:24:22 UTC
@Pierre, can you test next nightly, if this fixes your problems?

commit 84fbdbbf96704e00c9e6c905c4833c7e7006b2d0
AuthorDate: Sat Aug 24 17:14:20 2019 +0200

    Strip results with subresults deeper in their hierarchy when DataStripping is enabled
    
    SampleResults will now be stripped recursively up to a level of four when DataStripping is enabled.
    
    As Sonar nagged to widen the scope for readResolve to better support inheritance and it made testing
    possible, readResolve is now protected instead of private.
    
    Bugzilla Id: 63674
---
 .../jmeter/samplers/DataStrippingSampleSender.java |  21 ++--
 .../samplers/TestDataStrippingSampleSender.java    | 130 +++++++++++++++++++++
 xdocs/changes.xml                                  |   2 +
 3 files changed, 146 insertions(+), 7 deletions(-)
Comment 8 pierre.astruc 2019-08-26 20:50:32 UTC
Hello Felix,

Thanks for the quick patch, I will test the nightly build and report :)
Comment 9 pierre.astruc 2019-08-26 20:59:17 UTC
Hello, it seems that I can not download any nightly build (404 everywhere)
https://jmeter.apache.org/nightly.html

May I ask you a recent build in .zip archive ?
Thanks !
Comment 10 Felix Schumacher 2019-08-27 07:43:35 UTC
https://ci.apache.org/projects/jmeter/nightlies/r1461-c1a198fb9ac4d2c9c371f76bbe09ddd1bb3a8a69/apache-jmeter-5.2.0-SNAPSHOT.zip

Should be a valid link. The script generating the index has not survived the git/gradle migration, yet. I will correct it.
Comment 11 pierre.astruc 2019-08-27 17:38:55 UTC
Thanks for the link :)

I test again and the bug is fixed !
Well done, and a big thanks for this enhancement :)

Test1:
- mode = DiskStore / Batch
- [Uncheck] "retrieve all embedded resources"
---- result ----
-- one 55000 KB file is generated in /tmp/SerialisedSampleSender*.ser
-- this file contain response data of main requests (<!DOCTYPE html><html><head>...) : ok
-- network usage between slave and master = 60500 KB / 55500 KB : ok

Test2:
- mode = StrippedDiskStore / StrippedBatch
- [Uncheck] "retrieve all embedded resources"
---- result ----
-- one 324 KB file is generated in /tmp/SerialisedSampleSender*.ser
-- this file doesn't contain any response data : ok
-- network usage between slave and master = 4140 KB / 37 KB : ok

Test3:
- mode = DiskStore / Batch
- [Check] "retrieve all embedded resources"
---- result ----
-- one 186000 KB file is generated in /tmp/SerialisedSampleSender*.ser
-- this file contain response data of main (<!DOCTYPE html><html><head>...) and embedded requests (...<FF><EE>^@^NAdobe^@d<C0>...) : ok
-- network usage between slave and master =  196000 KB / 190000 KB : ok

Test4:
- mode = StrippedDiskStore / StrippedBatch
- [Check] "retrieve all embedded resources"
---- result ----
-- one 3400 KB file is generated in /tmp/SerialisedSampleSender*.ser
-- this file doesn't contain any response data : ok
-- network usage between slave and master =  8650 KB /  5620 KB : ok
Comment 12 The ASF infrastructure team 2022-09-24 20:38:17 UTC
This issue has been migrated to GitHub: https://github.com/apache/jmeter/issues/5143