Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support to gzip response at the REST layer #11343

Merged
merged 3 commits into from
Oct 19, 2022
Merged

Conversation

amaltaro
Copy link
Contributor

@amaltaro amaltaro commented Oct 12, 2022

Fixes #11082
Superseeds #11247

Status

ready

Description

This PR implements the following changes:

  • adds support to gzip content within the REST layer (i.e., whenever a client makes an HTTP request with Accept-Encoding: gzip, WMCore web-services will serve compressed body data, which needs then to be gzip decompressed on the client application)
  • disabled automatic decompression mechanism within libcurl (ACCEPT_ENCODING pycurl attribute). For some obscure reason, with this feature enabled we were having around 18 unit tests failing while writting data to the pycurl buffer. More details in [1]

Some tests with curl have been performed - for reqmgr2, wmstatsserver and ms-transferor - and logs can be found here:
https://amaltaro.web.cern.ch/amaltaro/forWMCore/PR_11343/

If anyone wants to run further tests, services in my alancc7-cloud1 are still up.

NOTE-1: This of course adds an extra CPU load on the server application to compress data, but amount of data to be transferred is drastically lower.
NOTE-2: note that CouchDB is not able to serve compressed data, so any intermediate steps (e.g. ReqMgr2 fetching data from CouchDB) will still be dealt with as a python object or json, until it can be served to the end user.

Is it backward compatible (if not, which system it affects?)

YES

Related PRs

None

External dependencies / deployment changes

None

[1]
Example in:

# WMCore_t.MicroService_t.MicroService_t.MicroServiceTest:testPostCall changed from success to error

  File "/build/cmsbld/jenkins/workspace/DMWM-WMCorePy3-PR-unittests/SLICE/2/label/cms-dmwm-cc7/code/src/python/WMCore/Services/pycurl_manager.py", line 329, in request
    curl.perform()
(23, '')

which is basically this error: https://curl.se/libcurl/c/libcurl-errors.html#CURLE_WRITE_ERROR , but there is no extra information to debug it!

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 17 new failures
    • 1 tests no longer failing
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 46 warnings and errors that must be fixed
    • 29 warnings
    • 203 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 33 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13640/artifact/artifacts/PullRequestReport.html

@amaltaro
Copy link
Contributor Author

@vkuznet Valentin, given that you will be away the next two days, I wanted to trigger this review request now. I still have to work on those unit tests, which seem to be related to these changes. However, I did test these changes with reqmgr2 and microservices, and content is being served according to the request headers provided by the end user.

Copy link
Contributor

@vkuznet vkuznet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changes themselves looks fine to me, but without actual test using non-python client I doubt I can make certain conclusion about this approach. I suggest that you perform the following:

  • setup basic WMCore service which should serve list of dicts, e.g. [{"data":1}, {"data":2}]
  • make API which will provide this JSON object
  • run curl client to fetch both plain and gzipped content
  • provide results of this test in this PR

If curl client using appropriate HTTP headers will be able to decode properly gzipped content I will be convinced with these code changes.

@amaltaro
Copy link
Contributor Author

@vkuznet I provided some logs in the initial description. I am now working on the unit tests.

@amaltaro
Copy link
Contributor Author

test this please

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 16 new failures
    • 1 tests no longer failing
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 46 warnings and errors that must be fixed
    • 29 warnings
    • 203 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 33 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13642/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 177 new failures
    • 2 tests added
    • 12 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 61 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13643/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 2 new failures
    • 1 tests no longer failing
    • 2 tests added
    • 1 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 59 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13644/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 1 new failures
    • 1 tests no longer failing
    • 2 tests added
    • 1 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 59 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13645/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 1 new failures
    • 1 tests no longer failing
    • 2 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 59 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13646/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 1 new failures
    • 2 tests added
    • 2 changes in unstable tests
  • Python3 Pylint check: failed
    • 48 warnings and errors that must be fixed
    • 31 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 59 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13647/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 388 new failures
    • 14 tests deleted
    • 1 tests no longer failing
    • 2 tests added
    • 15 changes in unstable tests
  • Python3 Pylint check: failed
    • 48 warnings and errors that must be fixed
    • 31 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 59 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13648/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 2 new failures
    • 1 tests no longer failing
    • 2 tests added
    • 2 changes in unstable tests
  • Python3 Pylint check: failed
    • 48 warnings and errors that must be fixed
    • 31 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 59 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13649/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 1 new failures
    • 1 tests no longer failing
    • 2 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 48 warnings and errors that must be fixed
    • 31 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 59 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13650/artifact/artifacts/PullRequestReport.html

@vkuznet
Copy link
Contributor

vkuznet commented Oct 13, 2022

@amaltaro , I see now that reqmgr2.log provides curl content with and without gzip-encoding, that's great., thanks. But, I noticed that your NOTE-2 is not completely correct. Even though the CouchDB itself does not provide gzipped content, it is easy to resolve by using additional layer, like nginx, see discussion here.

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 2 new failures
    • 2 tests added
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 56 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13661/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 3 new failures
    • 3 tests added
    • 1 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 293 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 56 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13662/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: succeeded
    • 3 tests added
    • 1 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 293 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 56 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13663/artifact/artifacts/PullRequestReport.html

@amaltaro
Copy link
Contributor Author

After many iterations with the unit tests, also struggling with the automated "Accept-Encoding" libcurl mechanism (see updated PR description), I managed to get all the unit tests working and I also remade all the curl tests.
Unfortunately, this still fails when using Firefox browser:

@vkuznet please let me know if you have any insights.

@vkuznet
Copy link
Contributor

vkuznet commented Oct 14, 2022

Alan, for things to work we need few pieces of information:

  • client should set proper header, and
  • server should acknowledge the client's header and provide appropriate response, then
  • upon receiving the data client should deal with appropriate encoding.

The easiest way to test thing is still use local setup with your changes and curl as a client. You can do it on VM or your laptop. But you should provide all details of HTTP data flaw, e.g.

  • run WMCore HTTP server, e.g. reqmgr2 or any other which relies on REST web server
  • optionally, adjust WMCore REST server output to provide details about HTTP headers (both incoming request and outgoing response headers). Here you need to ensure that REST server sets appropriate Content-Encoding
  • the client curl should ask for API with Accept-Encoding: gzip header, once you dump its request you should see that server provides Content-Encoding: gzip too when it provides data with gzip encoding.

Once you have such test, then you can move towards WMCore server vs WMCore client use-case (e.g. communication between reqmgr2 and wmstats). This case is more complex since WMCore code is used in both ends. If we talk about reqmgr2 talks to wmstats, then reqmgr2 is a client, and it should set Accept-Encoding: gzip, while wmstats is a server which should provide gzip'ed content and set Content-Type: gzip header. Since you removed default Accept-Encoding block from pycurl manager I doubt that you client (e.g. reqmgr2) sets explicitly such headers but it should. I don't see anywhere in your changes such change. In other words, we correctly removed the default in pycurl manager with Accept-Encoding but we do not added such explicit header anywhere in code which performs HTTP calls.

@amaltaro
Copy link
Contributor Author

Valentin, it has all been explained in this PR, including logs of all the tests performed with curl client. So you can see both the request and the response http headers. --> This is not a problem and everything works as expected!

If you check things on your browser, you can enable debugger to see the headers sent by the browser in the request http header, and what comes back with the response. --> This is the actual problem, Firefox has full support to Content-Encoding, and yet it's not able to "fully" show the response data.

For WMCore intercommunication, gzip encoding gets added when making an http request (unless defined otherwise):
https://github.com/dmwm/WMCore/pull/11343/files#diff-78f070e1a52ad91e270a0293f1d78c77c16cdc68f42324e9ae019d4ba49adb9bR258

and when reading the response object, data is decompressed at the pycurl_manager layer, before being yield to to the end client:
https://github.com/dmwm/WMCore/pull/11343/files#diff-78f070e1a52ad91e270a0293f1d78c77c16cdc68f42324e9ae019d4ba49adb9bR322

You can test all of this with this API (and any other WMCore API in this node):
https://alancc7-cloud1.cern.ch/reqmgr2/data/status

In case you are missing anything, please refer to the initial PR description.

src/python/WMCore/Services/pycurl_manager.py Show resolved Hide resolved
@@ -328,14 +318,14 @@ def request(self, url, params, headers=None, verb='GET',
if verbose:
print(verb, url, params, headers)
header = self.parse_header(hbuf.getvalue())
data = bbuf.getvalue()
data = decompress(data, header.header)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is not correct since you made it default. Here is what will happen on a client side:

  • the server provides response HTTP header with Content-Encoding: gzip
  • the server data is already decompressed here

As you can see both items contradict each other. You either should remove Content-Encoding: gzip header when you decompress by default over here, or you should not decompress here since your server has proper header, i.e. the client should do it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The line bbuf.getvalue() simply reads a byte sequence out of the BytesIO data object, whatever that data is.
Then in the next line at the decompress() call, body data will ONLY be decompressed if the http response header has a Content-Encoding: gzip, meaning that the server responded with compressed data and that our client (pycurl_manager, in this case) can decompress the data before passing it over to the upstream modules (note, upstream modules here mean that we are communicating with other services within the WMCore realm).

@vkuznet
Copy link
Contributor

vkuznet commented Oct 14, 2022

I see that with curl everything works fine, i.e. server returns Content-Type: gzip and gziped encoded data. But as I pointed in my review it is not the case in pycurl manager where you decompress the data by default. Please provide details (HTTP headers and data type when you use them with pycurl manager).

Copy link
Contributor Author

@amaltaro amaltaro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This API is actually easier to reproduce the problem, since it does not require any internal HTTP call among the central services:
https://alancc7-cloud1.cern.ch/ms-transferor/data/status

using a web debugger, it shows the following for the response object (2 lines):

{"result": [

which makes me think that the method implemented in this PR _stream_compress_gzip is actually what causes this problem.

src/python/WMCore/Services/pycurl_manager.py Show resolved Hide resolved
@@ -328,14 +318,14 @@ def request(self, url, params, headers=None, verb='GET',
if verbose:
print(verb, url, params, headers)
header = self.parse_header(hbuf.getvalue())
data = bbuf.getvalue()
data = decompress(data, header.header)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The line bbuf.getvalue() simply reads a byte sequence out of the BytesIO data object, whatever that data is.
Then in the next line at the decompress() call, body data will ONLY be decompressed if the http response header has a Content-Encoding: gzip, meaning that the server responded with compressed data and that our client (pycurl_manager, in this case) can decompress the data before passing it over to the upstream modules (note, upstream modules here mean that we are communicating with other services within the WMCore realm).

@vkuznet
Copy link
Contributor

vkuznet commented Oct 15, 2022

Alan, what you describe from browser debugging is what I wrote here: #11247 (comment)
The point is that you need to gzip entire content instead of rows. I think some clients can't deal with different chunk content and this is what you see in browser which can't do that.

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: succeeded
    • 1 tests no longer failing
    • 3 tests added
    • 2 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 55 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13667/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 2 new failures
    • 1 tests no longer failing
    • 3 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 289 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 55 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13668/artifact/artifacts/PullRequestReport.html

remove my debugging

remove gzip decorator from _call method

join chunks to be gzipped all together
Explicitly set gzip as HTTPHEADER object

Deal with None headers

Disable automatic data decompression in libcurl - ACCEPT_ENCODING
@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: succeeded
    • 1 tests no longer failing
    • 3 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 47 warnings and errors that must be fixed
    • 30 warnings
    • 292 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 55 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13669/artifact/artifacts/PullRequestReport.html

@amaltaro
Copy link
Contributor Author

Okay, I was missing a join of the records/chunks before compressing it with gzip. It has exactly the same logic as the zlib compression (when passing deflate encoding).
I re-run all the curl tests and updated the text files with new outputs, all the headers are still correct. In addition to that, I tested a few APIs with a web browser, including loading wmstats and getting workflows moving to further states.
It looks all good from my side now.

Copy link
Contributor

@vkuznet vkuznet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest to add additional unit tests which will try out gzip with HEAD HTTP request and HTTP responses which will generate non 200 status since the code in pycurl_manager has moved.

@@ -328,14 +318,14 @@ def request(self, url, params, headers=None, verb='GET',
if verbose:
print(verb, url, params, headers)
header = self.parse_header(hbuf.getvalue())
data = bbuf.getvalue()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part should be checked if it works with HEAD HTTP body and different HTTP codes since you moved reading buffer before you check HTTP verb as it was initially implemented in line block below (lines 323-329)

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 2 tests no longer failing
    • 6 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 49 warnings and errors that must be fixed
    • 31 warnings
    • 307 comments to review
  • Pylint py3k check: failed
    • 1 errors and warnings that should be fixed
  • Pycodestyle check: succeeded
    • 63 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13670/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 2 tests no longer failing
    • 6 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 49 warnings and errors that must be fixed
    • 33 warnings
    • 307 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 63 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13671/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 1 new failures
    • 2 tests no longer failing
    • 6 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 49 warnings and errors that must be fixed
    • 33 warnings
    • 307 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 63 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13672/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 1 new failures
    • 3 tests no longer failing
    • 6 tests added
    • 2 changes in unstable tests
  • Python3 Pylint check: failed
    • 49 warnings and errors that must be fixed
    • 34 warnings
    • 307 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 63 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13673/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 3 tests no longer failing
    • 6 tests added
    • 2 changes in unstable tests
  • Python3 Pylint check: failed
    • 49 warnings and errors that must be fixed
    • 35 warnings
    • 307 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 63 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13674/artifact/artifacts/PullRequestReport.html

@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: succeeded
    • 3 tests no longer failing
    • 6 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 49 warnings and errors that must be fixed
    • 35 warnings
    • 307 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 63 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13675/artifact/artifacts/PullRequestReport.html

@amaltaro
Copy link
Contributor Author

Valentin, I created extra unit tests under the pycurl module. I also pointed them to my VM, to make sure they are correctly testing and passing the tests, which you can see from the results above.
I am now switching those few calls back to cmsweb-prod service, which will likely cause the failure of 4 unit tests, until these changes (support to gzip at the REST layer) get deployed in CMSWEB production. Please bear it in mind during your review.

I am making another push now, but this is just to squash all the unit test changes made today.

further fixes for MicroService unit tests

further microservice unit test fixes

further fixes to unit tests

new pycurl unit tests

wrap unit tests with try/except block

fix reference to res variable, in unit tests

unit test fix, trap exception

fix last unit test

remove unneeded unit test code

switch urls back to cmsweb
@cmsdmwmbot
Copy link

Jenkins results:

  • Python3 Unit tests: failed
    • 3 tests no longer failing
    • 6 tests added
    • 3 changes in unstable tests
  • Python3 Pylint check: failed
    • 49 warnings and errors that must be fixed
    • 35 warnings
    • 307 comments to review
  • Pylint py3k check: succeeded
  • Pycodestyle check: succeeded
    • 63 comments to review

Details at https://cmssdt.cern.ch/dmwm-jenkins/view/All/job/DMWM-WMCore-PR-test/13676/artifact/artifacts/PullRequestReport.html

@amaltaro
Copy link
Contributor Author

Thank you for the suggestions and reviews, Valentin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support gzip response in the REST layer
3 participants