Comment 0 for bug 1669449

Revision history for this message
TommyLike (hu-husheng) wrote :

Currently we don't raise exception if the reservation.commit operation failed, such as size exceed the max value of integer, what's more, these dirty reservation could obstuct the future requests.

```
File "/opt/stack/manila/manila/api/middleware/fault.py", line 72, in __call__
  return req.get_response(self.application)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1299, in send
  application, catch_exc_info=False)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1263, in call_application
  app_iter = application(self.environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
  resp = self.call_func(req, *args, **self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
  return self.func(req, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/oslo_middleware/base.py", line 126, in __call__
  response = req.get_response(self.application)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1299, in send
  application, catch_exc_info=False)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1263, in call_application
  app_iter = application(self.environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
  return resp(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
  resp = self.call_func(req, *args, **self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
  return self.func(req, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/keystonemiddleware/auth_token/__init__.py", line 335, in __call__
  response = req.get_response(self._app)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1299, in send
  application, catch_exc_info=False)
File "/usr/local/lib/python2.7/dist-packages/webob/request.py", line 1263, in call_application
  app_iter = application(self.environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
  return resp(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
  return resp(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/routes/middleware.py", line 141, in __call__
  response = self.app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 144, in __call__
  return resp(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 130, in __call__
  resp = self.call_func(req, *args, **self.kwargs)
File "/usr/local/lib/python2.7/dist-packages/webob/dec.py", line 195, in call_func
  return self.func(req, *args, **kwargs)
File "/opt/stack/manila/manila/api/openstack/wsgi.py", line 761, in __call__
  content_type, body, accept)
File "/opt/stack/manila/manila/api/openstack/wsgi.py", line 819, in _process_stack
  action_result = self.dispatch(meth, request, action_args)
File "/opt/stack/manila/manila/api/openstack/wsgi.py", line 909, in dispatch
  return method(req=request, **action_args)
File "/opt/stack/manila/manila/api/openstack/wsgi.py", line 1051, in version_select
  return func.func(self, *args, **kwargs)
File "/opt/stack/manila/manila/api/v2/shares.py", line 183, in create
  req, body, check_create_share_from_snapshot_support=True)
File "/opt/stack/manila/manila/api/v1/shares.py", line 329, in _create
  **kwargs)
File "/opt/stack/manila/manila/share/api.py", line 141, in create
  reservations = QUOTAS.reserve(context, shares=1, gigabytes=size)
File "/opt/stack/manila/manila/quota.py", line 966, in reserve
  user_id=user_id)
File "/opt/stack/manila/manila/quota.py", line 469, in reserve
  project_id=project_id, user_id=user_id)
File "/opt/stack/manila/manila/db/api.py", line 239, in quota_reserve
  project_id=project_id, user_id=user_id)
File "/opt/stack/manila/manila/db/sqlalchemy/api.py", line 164, in wrapper
  return f(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 144, in wrapper
  ectxt.reraise = not expected
File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 220, in __exit__
  self.force_reraise()
File "/usr/local/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 196, in force_reraise
  six.reraise(self.type_, self.value, self.tb)
File "/usr/local/lib/python2.7/dist-packages/oslo_db/api.py", line 139, in wrapper
  return f(*args, **kwargs)
File "/opt/stack/manila/manila/db/sqlalchemy/api.py", line 955, in quota_reserve
  session=session)
File "/opt/stack/manila/manila/db/sqlalchemy/api.py", line 751, in _reservation_create
  reservation_ref.save(session=session)
File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/models.py", line 50, in save
  session.flush()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2080, in flush
  self._flush(objects)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2198, in _flush
  transaction.rollback(_capture_exception=True)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
  compat.reraise(exc_type, exc_value, exc_tb)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2162, in _flush
  flush_context.execute()
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 373, in execute
  rec.execute(self)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 532, in execute
  uow
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 178, in save_obj
  mapper, table, insert)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 804, in _emit_insert_statement
  execute(statement, params)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, in execute
  return meth(self, multiparams, params)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
  return connection._execute_clauseelement(self, multiparams, params)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
  compiled_sql, distilled_params
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
  context)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1337, in _handle_dbapi_exception
  util.raise_from_cause(newraise, exc_info)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
  reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
  context)
File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
  cursor.execute(statement, parameters)
File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
  result = self._query(query)
File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
  conn.query(q)
File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 852, in query
  self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1053, in _read_query_result
  result.read()
File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1336, in read
  first_packet = self.connection._read_packet()
File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1010, in _read_packet
  packet.check_error()
File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
  err.raise_mysql_exception(self._data)
File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
  raise errorclass(errno, errval)
DBDataError: (pymysql.err.DataError) (1264, u"Out of range value for column 'delta' at row 1") [SQL: u'INSERT INTO reservations (created_at, updated_at, deleted_at, deleted, uuid, usage_id, project_id, user_id, resource, delta, expire) VALUES (%(created_at)s, %(updated_at)s, %(deleted_at)s, %(deleted)s, %(uuid)s, %(usage_id)s, %(project_id)s, %(user_id)s, %(resource)s, %(delta)s, %(expire)s)'] [parameters: {'deleted_at': None, 'resource': 'gigabytes', 'uuid': 'a0000d0a-d247-4754-9c18-f73dce3e3c18', 'deleted': 0, 'created_at': datetime.datetime(2017, 3, 2, 6, 31, 26, 476109), 'updated_at': None, 'expire': datetime.datetime(2017, 3, 3, 6, 31, 25, 850753), 'delta': 2247483646, 'user_id': u'2f8d19caf32b4a8981f1689b0a3e1cd4', 'project_id': u'c73b285fec9e47af951732804a3d0a3a', 'usage_id': 21}]
```