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

PXD-452 ⁃ Invalid JSON causes transaction error #23

Open
allisonheath opened this issue Nov 29, 2017 · 0 comments
Open

PXD-452 ⁃ Invalid JSON causes transaction error #23

allisonheath opened this issue Nov 29, 2017 · 0 comments

Comments

@allisonheath
Copy link

allisonheath commented Nov 29, 2017

Found when accidentally put "primary_diagnosis": NaN in my JSON instead of null.

Log error:

  File "/gdcapi/src/sheepdog/sheepdog/transactions/upload/__init__.py", line 39, in single_transaction_worker
    transaction.parse_doc(*doc_args)
  File "/gdcapi/src/sheepdog/sheepdog/transactions/upload/transaction.py", line 81, in parse_doc
    self.parse_entities(data)
  File "/gdcapi/src/sheepdog/sheepdog/transactions/upload/transaction.py", line 110, in parse_entities
    flag_modified(tx_log, 'canonical_json')
  File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
    self.gen.next()
  File "/gdcapi/src/sheepdog/sheepdog/transactions/transaction_base.py", line 283, in fetch_transaction_log
    .get(self.transaction_id)
  File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
    self.gen.next()
  File "/gdcapi/src/sheepdog/sheepdog/transactions/transaction_base.py", line 300, in clean_session
    yield session
  File "/usr/lib/python2.7/contextlib.py", line 24, in __exit__
    self.gen.next()
  File "/gdcapi/src/psqlgraph/psqlgraph/psqlgraph.py", line 187, in session_scope
    local.commit()
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 788, in commit
    self.transaction.commit()
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 384, in commit
    self._prepare_impl()
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 364, in _prepare_impl
    self.session.flush()
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 1985, in flush
    self._flush(objects)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/session.py", line 2103, 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 2067, in _flush
    flush_context.execute()
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 372, in execute
    rec.execute(self)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/unitofwork.py", line 526, in execute
    uow
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 60, in save_obj
    mapper, table, update)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/persistence.py", line 518, in _emit_update_statements
    execute(statement, params)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 841, in execute
    return meth(self, multiparams, params)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/elements.py", line 322, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 938, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1070, in _execute_context
    context)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1271, in _handle_dbapi_exception
    exc_info
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1063, in _execute_context
    context)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 442, in do_execute
    cursor.execute(statement, parameters)
DataError: (DataError) invalid input syntax for type json
LINE 1: UPDATE transaction_logs SET canonical_json='[{"type": "case"...
                                                   ^
DETAIL:  Token "NaN" is invalid.
CONTEXT:  JSON data, line 1: ..."}, "type": "diagnosis", "primary_diagnosis": NaN...

Returned back to the user is just the error:

  "transactional_errors": [
    "Internal server error. Sorry, something unexpected went wrong!"
  ],```

Would be more helpful to catch the invalid JSON and return a clearer error message.
@philloooo philloooo changed the title Invalid JSON causes transaction error PXD-452 ⁃ Invalid JSON causes transaction error May 30, 2018
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

No branches or pull requests

1 participant