YSC
YSC

Reputation: 399

TypeError in AppStats

Appstats throw TypeError exception and caused server crash in appstats/formatting.py. It seems to sort a dictionary with None as a key. Turn off appstats and then it works fine.

Here is the call stack,

  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/ext/ndb/context.py", line 1107, in _memcache_get_tasklet
    rpc=rpc)
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/api/memcache/__init__.py", line 616, in get_multi_async
    user_key)
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/api/memcache/__init__.py", line 384, in _make_async_call
    rpc.make_call(method, request, response, get_result_hook, user_data)
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 528, in make_call
    self.__service, method, request, response, self.__rpc)
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 206, in Call
    function(service, call, request, response, rpc)
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 1441, in pre_call_hook
    recorder_proxy.record_rpc_request(service, call, request, response, rpc)
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 566, in record_rpc_request
    self.get_call_stack(trace)
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 879, in get_call_stack
    if not self.get_frame_summary(frame, trace):
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 937, in get_frame_summary
    x.set_value(format_value(value))
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 995, in format_value
    return formatting._format_value(val, config.MAX_REPR, config.MAX_DEPTH)
  File "/base/data/home/runtimes/python27_experiment/python27_lib/versions/1/google/appengine/ext/appstats/formatting.py", line 265, in _format_value
    series = sorted(val)
TypeError: can't compare datetime.date to NoneType

Here is the context,

  1. GAE standard environment with Django.
  2. It crashes while several async calls still running.

Is it a bug?

Upvotes: 0

Views: 32

Answers (1)

YSC
YSC

Reputation: 399

The problem occurs when None is a key in a dictionary. Using string 'None' to replace None solves the problem.

Upvotes: 0

Related Questions