If you think a bug might affect users in the 57 release, please set the correct tracking and status flags for Release Management.

Display AsyncShutdownTimeout stacks and states

RESOLVED FIXED

Status

Socorro
General
RESOLVED FIXED
3 years ago
a month ago

People

(Reporter: Yoric, Unassigned)

Tracking

Firefox Tracking Flags

(Not tracked)

Details

Now that bug 1034726 has landed, AsyncShutdownTimeout crashes may contain JavaScript stacks that will generally be much more useful than the native stack. Among other applications, they should often let us determine at a glance whether the offending code is an add-on. However, reading the stacks from the JSON will be quite annoying. Also, the AsyncShutdownTimeout metadata contains optional state information, which is critical for finding out in which state the component was during the crash.

It would be great if we could display both the JS stacks and the state information, if available, on the main page, before the native stacks.

The data structure contained in the AsyncShutdownTimeout payload looks like:

{
  phase: string,
  conditions: array of [{
    name: string, // <=== Display this
    stack: optional string, // <== And that
    state: either arbitrary JSON or the string "(none)" <== And that
    // ...
  }]
}

e.g.

{
  phase: "profile-before-change",
  conditions: [
    {
      name: "OS.File flushing its data during profileBeforeChange",
      stack: "chrome://resources/osfile/osfile_async_front.jsm:104\n....",
      state: {shutdown: false, started: true, ...},
      // ...
    },
    {
      name: "Sqlite.jsm flushing its data during profileBeforeChange",
      stack: "...",
      state: "(none)",
      // ...
  ]
}


I would like to see something along the lines of

*** JS Stacks
 Client: OS.File flushing its data during profileBeforeChange
 stack: chrome://resources/osfile/osfile_async_front.jsm:104
        chrome://...
        // ...
        offending_add_on.jsm
 state: {shutdown: false, started: true, ...}

 Client: Sqlite.jsm flushing its data during profileBeforeChange
 stack: chrome://...
        // ...
        offending_internal_client.jsm
 state: (none)
Flags: needinfo?(benjamin)

Comment 1

3 years ago
The data is all in the metadata tab and available via the API. For now, I suggest you just write a little tool to display this the way you want.
Actually, as far as I can tell, the data is not available via the API unless we download every single raw crash in the time range. Filed as bug 1035694.
I meant bug 1035822.

Updated

3 years ago
Flags: needinfo?(benjamin)
AsyncShutdownTimeout is already in Super Search Fields. 
Can't easily tell for how long it's been there (since we moved from storing these in Elasticsearch to a .json file)
https://github.com/mozilla-services/socorro/blob/f3e61dae8c690673d3856889f8c604d1a3d1b232/socorro/external/es/data/super_search_fields.json#L125-L149

You can both filter and facet on it.
E.g.
https://crash-stats.mozilla.com/search/?async_shutdown_timeout=MediaShutdownManager&product=Firefox&date=%3E%3D2017-08-17T15%3A46%3A00.000Z&date=%3C2017-08-24T15%3A46%3A00.000Z&_sort=-date&_facets=async_shutdown_timeout&_columns=date&_columns=signature&_columns=product&_columns=version&_columns=build_id&_columns=platform#facet-async_shutdown_timeout
Status: NEW → RESOLVED
Last Resolved: a month ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.