New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 825925 link

Starred by 1 user

Issue metadata

Status: WontFix
Owner:
Last visit > 30 days ago
Closed: Apr 2018
Cc:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 2
Type: Bug



Sign in to add a comment

list_suite_controls failed due to ValueError("No JSON object could be decoded")

Project Member Reported by shuqianz@chromium.org, Mar 26 2018

Issue description

Failed CQ builds:
https://luci-milo.appspot.com/buildbot/chromeos/wizpig-paladin/2650
https://luci-milo.appspot.com/buildbot/chromeos/edgar-paladin/2528

Logs:
03/25 00:10:43.081 ERROR|        server_job:0895| Exception escaped control file, job aborting:
Traceback (most recent call last):
  File "/usr/local/autotest/server/server_job.py", line 884, in run
    self._execute_code(server_control_file, namespace)
  File "/usr/local/autotest/server/server_job.py", line 1396, in _execute_code
    execfile(code_file, namespace, namespace)
  File "/usr/local/autotest/results/186396713-chromeos-test/hostless/control.srv", line 79, in <module>
    dynamic_suite.reimage_and_run(**args_dict)
  File "/usr/local/autotest/server/cros/dynamic_suite/dynamic_suite.py", line 517, in reimage_and_run
    _perform_reimage_and_run(suite_spec, afe, tko, suite_job_id=my_job_id)
  File "/usr/local/autotest/server/cros/dynamic_suite/dynamic_suite.py", line 561, in _perform_reimage_and_run
    child_dependencies=spec.child_dependencies,
  File "/usr/local/autotest/server/cros/dynamic_suite/suite.py", line 1543, in create_from_predicates
    name, builds, board, cf_getter, run_prod_code, **dargs)
  File "/usr/local/autotest/server/cros/dynamic_suite/suite.py", line 1667, in __init__
    test_args=test_args,
  File "/usr/local/autotest/server/cros/dynamic_suite/suite.py", line 927, in find_and_parse_tests
    tests = retriever.retrieve_for_suite(suite_name)
  File "/usr/local/autotest/server/cros/dynamic_suite/suite.py", line 584, in retrieve_for_suite
    return self._parse_cf_text_many(control_file_texts)
  File "/usr/local/autotest/server/cros/dynamic_suite/suite.py", line 617, in _parse_cf_text_many
    for path, text in control_file_texts:
  File "/usr/local/autotest/server/cros/dynamic_suite/suite.py", line 667, in _get_cf_texts_for_suite
    suite_info = self._cf_getter.get_suite_info(suite_name=suite_name)
  File "/usr/local/autotest/server/cros/dynamic_suite/control_file_getter.py", line 341, in get_suite_info
    file_contents = self._list_suite_controls(suite_name=suite_name)
  File "/usr/local/autotest/server/cros/dynamic_suite/control_file_getter.py", line 325, in _list_suite_controls
    suite_name=suite_name)
  File "/usr/local/autotest/client/common_lib/cros/dev_server.py", line 376, in metrics_wrapper
    return wrapper()
  File "/usr/local/autotest/client/common_lib/cros/retry.py", line 218, in func_retry
    remaining_time)
  File "/usr/local/autotest/client/common_lib/cros/retry.py", line 123, in timeout
    default_result = func(*args, **kwargs)
  File "/usr/local/autotest/client/common_lib/cros/dev_server.py", line 370, in wrapper
    return method(*args, **kwargs)
  File "/usr/local/autotest/client/common_lib/cros/dev_server.py", line 1469, in list_suite_controls
    return json.load(cStringIO.StringIO(self.run_call(call)))
  File "/usr/lib/python2.7/json/__init__.py", line 290, in load
    **kw)
  File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

It is caused when the devserver was asked to return the content of the control files for a given build in json format. However, the json is in invalid format:

call = self.build_call('list_suite_controls', build=build,
                               suite_name=suite_name)
return json.load(cStringIO.StringIO(self.run_call(call)))

It may caused by devserver flake? We need better loggings. One possible solution is to print out the output from devserver when exception is raised.
 
Status: WontFix (was: Untriaged)

Sign in to add a comment