API Service errors during the load testing: status code 500 and 502
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
MagnetoDB |
Won't Fix
|
Medium
|
Unassigned |
Bug Description
Magneto DB API service returns incorrect responses during the performance testing.
When we perform 800+ request per second to API service, we can see several responses with status code '500' and status code '502'.
As a result about 6 % of responses have statuses with error codes, when we perform 1000 request per second.
(please, see attached screenshot with performance tests results)
Error messages in magnetodb log files after the testing (also added to the bug description in comments):
http://
http://
We have send the following requests to MagnetoDB API service:
195
POST / HTTP/1.0
User-Agent: yandex-tank/1.1.1
Host: 172.18.169.205:8080
Content-Length:2
X-Amz-Target: DynamoDB_
Content-Type: application/
Connection: Close
{}
316
POST / HTTP/1.0
User-Agent: yandex-tank/1.1.1
Host: 172.18.169.205:8080
Content-Length:123
X-Amz-Target: DynamoDB_
Content-Type: application/
Connection: Close
{"TableName": "load_spam_table", "Key": {"user_id": {"S": "<email address hidden>"}, "date_message_id": {"S": "2013-12-
information type: | Public → Private |
information type: | Private → Public Security |
information type: | Public Security → Public |
Changed in magnetodb: | |
milestone: | none → next |
importance: | Undecided → Medium |
Changed in magnetodb: | |
status: | New → Confirmed |
Changed in magnetodb: | |
status: | Confirmed → Invalid |
milestone: | next → juno-rc1 |
status: | Invalid → Won't Fix |
Errors in Magneto DB Logs:
2014-01-21 06:13:32.622 8448 TRACE gunicorn.error python2. 6/site- packages/ gunicorn/ workers/ async.py" , line 45, in handle request( listener, req, client, addr) python2. 6/site- packages/ gunicorn/ workers/ ggevent. py", line 151, in handle_request request( *args) python2. 6/site- packages/ gunicorn/ workers/ async.py" , line 93, in handle_request response) python2. 6/site- packages/ webob/dec. py", line 130, in __call__ python2. 6/site- packages/ webob/dec. py", line 195, in call_func python2. 6/site- packages/ magnetodb/ common/ wsgi.py" , line 50, in __call__ response( self.applicatio n) python2. 6/site- packages/ webob/request. py", line 1296, in send info=False) python2. 6/site- packages/ webob/request. py", line 1260, in call_application self.environ, start_response) python2. 6/site- packages/ webob/dec. py", line 144, in __call__ python2. 6/site- packages/ routes/ middleware. py", line 131, in __call__ python2. 6/site- packages/ webob/dec. py", line 144, in __call__ python2. 6/site- packages/ webob/dec. py", line 130, in __call__ python2. 6/site- packages/ webob/dec. py", line 195, in call_func
2014-01-21 06:13:32.630 8448 ERROR gunicorn.error [-] Error handling request
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error Traceback (most recent call last):
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error self.handle_
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error super(GeventWorker, self).handle_
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error respiter = self.wsgi(environ, resp.start_
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error resp = self.call_func(req, *args, **self.kwargs)
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error return self.func(req, *args, **kwargs)
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error response = req.get_
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error application, catch_exc_
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error app_iter = application(
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error return resp(environ, start_response)
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error response = self.app(environ, start_response)
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error return resp(environ, start_response)
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error resp = self.call_func(req, *args, **self.kwargs)
2014-01-21 06:13:32.630 8448 TRACE gunicorn.error File "/usr/lib/
2014-01-21 06:13:32.630 8...