Download
Basics
The Tecken webapp handles download requests for symbols files. Tecken handles download API requests, determines whether the symbols file exists and which storage location it’s in, and returns a redirect to the storage location. In this way, we can store symbols files in multiple places and there’s a single place to request them.
For example, at the time of this writing doing a GET for
https://symbols.mozilla.org//firefox.pdb/448794C699914DB8A8F9B9F88B98D7412/firefox.sym will
return a 302 Found redirect to the file in storage.
Try Builds
Try builds are ephemeral and we store the symbols from those builds for shorter period of time than we store symbols from regular builds. Generally, try builds are only useful in cases where engineers are debugging specific crashes in the code they’re working on. For this reason, by default, Tecken does not look for symbols files in storage locations for try build symbols files.
If you want to download symbols files for regular and try builds, you have to specify that in the download API request. There are two ways to do it:
use the
/tryprefixExample:
https://symbols.mozilla.org/try/firefox.pdb/448794C699914DB8A8F9B9F88B98D7412/firefox.sym ^^^^
This is helpful if you’re using a debugger. You can set the symbols server to:
https://symbols.mozilla.org/try
and pick up regular and try build symbols files.
use the
tryquery string parameterExample:
https://symbols.mozilla.org/firefox.pdb/448794C699914DB8A8F9B9F88B98D7412/firefox.sym?try=1 ^^^^^^
When you do either of these, Tecken will look for symbols files in storage locations for both regular and try build symbols files with a preference for regular build symbols files first.
Downloading API
- HEAD /(str: debug_filename)/(hex: debug_id)/(str: symbol_file)
- HEAD /try/(str: debug_filename)/(hex: debug_id)/(str: symbol_file)
Determine whether the symbol file exists or not.
For finding regular and try symbols files, either prefix the path with
/tryor includetry=1querystring parameter.Example request:
HEAD /xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1 Host: symbols.mozilla.org User-Agent: example/1.0
HEAD /try/xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1 Host: symbols.mozilla.org User-Agent: example/1.0
- Parameters:
debug_filename (str) – the filename of the debug file
debug_id (hex) – the debug id in hex characters all upper-cased
symbol_file (str) – the filename of the symbol file; ends with
.sym
- Request Headers:
Debug –
if
true, includes aDebug-Timeheader in the response.If
Debug-Timeis0.0: symbol file ends in an unsupported extensionUser-Agent – please provide a unique user agent to make it easier for us to help you debug problems
- Query Parameters:
try – use
try=1to download regular and try build symbols files with a preference for regular build symbols files_refresh – use
_refresh=1to force Tecken to update cache
- Status Codes:
200 OK – symbol file exists
404 Not Found – symbol file does not exist
429 Too Many Requests – your request has been rate-limited; sleep for a bit and retry
500 Internal Server Error – sleep for a bit and retry; if retrying doesn’t work, then please file a bug report
502 Bad Gateway – sleep for a bit and retry
503 Service Unavailable – sleep for a bit and retry
504 Gateway Timeout – sleep for a bit and retry
- GET /(str: debug_filename)/(hex: debug_id)/(str: symbol_file)
- GET /try/(str: debug_filename)/(hex: debug_id)/(str: symbol_file)
Download a symbol file.
For finding regular and try symbols files, either prefix the path with
/tryor includetry=1querystring parameter.Example request:
GET /xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1 Host: symbols.mozilla.org User-Agent: example/1.0
Example curl:
$ curl --location --user-agent "example/1.0" --verbose \ https://symbols.mozilla.org/xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym > GET /xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1 > Host: symbols.mozilla.org > User-Agent: example/1.0 > Accept: */* > < HTTP/1.1 302 Found < Date: Tue, 24 Oct 2023 17:56:33 GMT < Location: https://s3.us-west-2.amazonaws.com/org.mozilla.crash-stats.symbols-public/v1/xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym < Content-Length: 0 > GET /org.mozilla.crash-stats.symbols-public/v1/xul.pdb/B7DC60E91588D8A54C4C44205044422E1/xul.sym HTTP/1.1 > Host: s3.us-west-2.amazonaws.com > User-Agent: example/1.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Tue, 24 Oct 2023 17:56:35 GMT < ETag: "e2e35ff973763bcda524f147981008bc" < Content-Encoding: gzip < Content-Type: text/plain < Content-Length: 143395908 < <OUTPUT>- Parameters:
debug_filename (str) – the filename of the debug file
debug_id (hex) – the debug id in hex characters all upper-cased
symbol_file (str) – the filename of the symbol file; ends with
.sym
- Request Headers:
Debug –
if
true, includes aDebug-Timeheader in the response.If
Debug-Timeis0.0: symbol file ends in an unsupported extensionUser-Agent – please provide a unique user agent to make it easier for us to help you debug problems
- Query Parameters:
try – use
try=1to download regular and try build symbols files with a preference for regular build symbols files_refresh – use
_refresh=1to force Tecken to update cache
- Response Headers:
Location – redirect location for the file; see
GET SYMBOLFILE.
- Status Codes:
302 Found – symbol file was found–follow redirect url in
Locationheader in the response to get to the final url400 Bad Request – param values have bad characters in them or are otherwise invalid
404 Not Found – symbol file was not found
429 Too Many Requests – your request has been rate-limited; sleep for a bit and retry
500 Internal Server Error – there’s an error with the server; sleep for a bit and retry; if retrying doesn’t work, then please file a bug report
502 Bad Gateway – sleep for a bit and retry
503 Service Unavailable – sleep for a bit and retry
504 Gateway Timeout – sleep for a bit and retry
- GET /(str: code_filename)/(hex: code_id)/(str: symbol_file)
- GET /try/(str: code_filename)/(hex: code_id)/(str: symbol_file)
Same as
GET /(str:debug_filename)/(hex:debug_id)/(str:symbol_file), but this will look up the debug filename and debug id for a module using the code filename and code id and return a redirect to the download API with the debug filename and debug id.For finding regular and try symbols files, either prefix the path with
/tryor includetry=1querystring parameter.Note
This is only helpful for symbols files for modules compiled for Windows. Modules compiled for other operating systems don’t have code files and code ids.
Example request:
GET /xul.dll/652DE0ED706D000/xul.sym HTTP/1.1 Host: symbols.mozilla.org User-Agent: example/1.0
GET /try/xul.dll/652DE0ED706D000/xul.sym HTTP/1.1 Host: symbols.mozilla.org User-Agent: example/1.0
Example curl:
$ curl --location --user-agent "example/1.0" --verbose \ https://symbols.mozilla.org/xul.dll/652DE0ED706D000/xul.sym > GET /xul.dll/652DE0ED706D000/xul.sym HTTP/1.1 > Host: symbols.mozilla.org > User-Agent: example/1.0 > Accept: */* > < HTTP/1.1 302 Found < Date: Tue, 24 Oct 2023 17:49:08 GMT < Location: /xul.pdb/569E0A6C6B88C1564C4C44205044422E1/xul.sym < Content-Length: 0 > GET /xul.pdb/569E0A6C6B88C1564C4C44205044422E1/xul.sym HTTP/1.1 > Host: symbols.mozilla.org > User-Agent: example/1.0 > Accept: */* > < HTTP/1.1 302 Found < Location: https://s3.us-west-2.amazonaws.com/org.mozilla.crash-stats.symbols-public/v1/xul.pdb/569E0A6C6B88C1564C4C44205044422E1/xul.sym < Content-Length: 0 > GET /org.mozilla.crash-stats.symbols-public/v1/xul.pdb/569E0A6C6B88C1564C4C44205044422E1/xul.sym HTTP/1.1 > Host: s3.us-west-2.amazonaws.com > User-Agent: example/1.0 > Accept: */* > < HTTP/1.1 200 OK < Date: Tue, 24 Oct 2023 17:49:09 GMT < ETag: "da6d99617b2c9b1e58166f0b93bcb0ac" < Content-Encoding: gzip < Content-Type: text/plain < Content-Length: 108311752 < <OUTPUT>- Parameters:
code_filename (str) – the filename of the code file
code_id (hex) – the code id in hex characters all upper-cased
symbol_file (str) – the filename of the symbol file; ends with
.sym
- GET SYMBOLFILE
This covers the download API response
Locationvalue url redirect.- Request Headers:
User-Agent – please provide a unique user agent to make it easier for us to help you debug problems
- Response Headers:
Content-Length – length of the response body; if the body is compressed, it’s the size of the compressed body
Content-Type – content type of the response after decompressing it; will be text/plain for symbol files
Content-Encoding – (optional) set to
gzipif the object is gzip-compressed; note that.symfiles are compressed even though the file extension doesn’t indicate that
- Status Codes:
404 Not Found – symbol file was not found
500 Internal Server Error – there’s an error with the server; sleep for a bit and retry; if retrying doesn’t work, then please file a bug report
502 Bad Gateway – sleep for a bit and retry
503 Service Unavailable – sleep for a bit and retry
504 Gateway Timeout – sleep for a bit and retry