Error while trying to put item with "B" type attribute in batch_write

Bug #1308393 reported by Andrii Ostapenko
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
MagnetoDB
Fix Released
High
Dmitriy Ukhlov

Bug Description

2014-04-16 08:29:09,237 Request: POST http://127.0.0.1:8480/v1/default_tenant/data/batch_write_item
2014-04-16 08:29:09,237 Request Headers: {'Content-Type': 'application/json', 'Accept': 'application/json'}
2014-04-16 08:29:09,237 Request Body: {"request_items": {"testtempest944638255": [{"put_request": {"item": {"message": {"B": "/Q=="}, "forum": {"B": "/w=="}, "subject": {"B": "/g=="}}}}]}}
2014-04-16 08:29:09,257 Response Status: 500
2014-04-16 08:29:09,257 Response Headers: {'date': 'Wed, 16 Apr 2014 08:29:09 GMT', 'content-length': '292', 'content-type': 'application/json'}
2014-04-16 08:29:09,257 Response Body: {"explanation": "The server has either erred or is incapable of performing the requested operation.", "code": 500, "error": {"message": "'utf8' codec can't decode byte 0xfd in position 0: invalid start byte", "traceback": null, "type": "UnicodeDecodeError"}, "title": "Internal Server Error"}

On server side:
2014-04-16 08:29:09.239 3736 DEBUG routes.middleware [-] Matched POST /v1/default_tenant/data/batch_write_item __call__ /usr/local/lib/python2.7/dist-packages/routes/middleware.py:100
2014-04-16 08:29:09.240 3736 DEBUG routes.middleware [-] Route path: '/v1/{project_id}/data/batch_write_item', defaults: {'action': u'process_request', 'controller': <magnetodb.common.wsgi.Resource object at 0x1d76e10>} __call__ /usr/local/lib/python2.7/dist-packages/routes/middleware.py:102
2014-04-16 08:29:09.240 3736 DEBUG routes.middleware [-] Match dict: {'action': u'process_request', 'controller': <magnetodb.common.wsgi.Resource object at 0x1d76e10>, 'project_id': u'default_tenant'} __call__ /usr/local/lib/python2.7/dist-packages/routes/middleware.py:103
2014-04-16 08:29:09.252 3736 ERROR magnetodb.common.middleware.fault [-] 'utf8' codec can't decode byte 0xfd in position 0: invalid start byte
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault Traceback (most recent call last):
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/common/middleware/fault.py", line 115, in process_request
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return req.get_response(self.application)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1296, in send
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault application, catch_exc_info=False)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1260, in call_application
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault app_iter = application(self.environ, start_response)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault resp = self.call_func(req, *args, **self.kwargs)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return self.func(req, *args, **kwargs)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/common/wsgi.py", line 50, in __call__
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault response = req.get_response(self.application)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1296, in send
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault application, catch_exc_info=False)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1260, in call_application
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault app_iter = application(self.environ, start_response)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return resp(environ, start_response)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/routes/middleware.py", line 131, in __call__
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault response = self.app(environ, start_response)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return resp(environ, start_response)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault resp = self.call_func(req, *args, **self.kwargs)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return self.func(req, *args, **kwargs)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/common/wsgi.py", line 233, in __call__
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault action_result = self.execute_action(action, request, **action_args)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/common/wsgi.py", line 247, in execute_action
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return self.dispatch(self.controller, action, request, **action_args)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/common/wsgi.py", line 256, in dispatch
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return method(*args, **kwargs)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/api/openstack/v1/batch_write_item.py", line 99, in process_request
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault req.context, request_list)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/storage/__init__.py", line 138, in execute_write_batch
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return __STORAGE_IMPL.execute_write_batch(context, write_request_list)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/storage/impl/cassandra_impl.py", line 1317, in execute_write_batch
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault self.put_item(context, req)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/storage/impl/cassandra_impl.py", line 948, in put_item
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault table_info, put_request.attribute_map
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/storage/impl/cassandra_impl.py", line 581, in _append_insert_query
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault _encode_dynamic_attr_value(val)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/opt/stack/magnetodb/magnetodb/storage/impl/cassandra_impl.py", line 129, in _encode_dynamic_attr_value
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return "0x{}".format(binascii.hexlify(json.dumps(val)))
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return _default_encoder.encode(obj)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault File "/usr/lib/python2.7/json/encoder.py", line 195, in encode
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault return encode_basestring_ascii(o)
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault UnicodeDecodeError: 'utf8' codec can't decode byte 0xfd in position 0: invalid start byte
2014-04-16 08:29:09.252 3736 TRACE magnetodb.common.middleware.fault

Dmitriy Ukhlov (dukhlov)
Changed in magnetodb:
importance: Undecided → High
assignee: nobody → Dmitriy Ukhlov (dukhlov)
Changed in magnetodb:
milestone: none → 2.0.5
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to magnetodb (master)

Fix proposed to branch: master
Review: https://review.openstack.org/94826

Changed in magnetodb:
status: New → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to magnetodb (master)

Reviewed: https://review.openstack.org/94826
Committed: https://git.openstack.org/cgit/stackforge/magnetodb/commit/?id=0b40e0d95d537343502f1fce0d8240636272bc35
Submitter: Jenkins
Branch: master

commit 0b40e0d95d537343502f1fce0d8240636272bc35
Author: Dmitriy Ukhlov <email address hidden>
Date: Thu May 22 13:55:27 2014 +0300

    Fix blob attribute value encoding/decoding

    Closes-Bug: #1308393
    Closes-Bug: #1308435

    Change-Id: I2cf3d44706b7dd0c384245ec7cbe57ef0fd105d8

Changed in magnetodb:
status: In Progress → Fix Committed
Changed in magnetodb:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.