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
/try
prefixExample:
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
try
query 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
/try
or includetry=1
querystring 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-Time
header in the response.If
Debug-Time
is0.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=1
to download regular and try build symbols files with a preference for regular build symbols files_refresh – use
_refresh=1
to force Tecken to update cache
- Status Codes:
200 OK – symbol file exists
404 Not Found – symbol file does not exist
500 Internal Server Error – sleep for a bit and retry; if retrying doesn’t work, then please file a bug report
503 Service Unavailable – 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
/try
or includetry=1
querystring 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-Time
header in the response.If
Debug-Time
is0.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=1
to download regular and try build symbols files with a preference for regular build symbols files_refresh – use
_refresh=1
to force Tecken to update cache
- Status Codes:
302 Found – symbol file was found–follow redirect url in
Location
header in the response to get to the final url400 Bad Request – requested symbol file has bad characters
404 Not Found – symbol file was not found
429 Too Many Requests – 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
503 Service Unavailable – sleep for a bit and retry; if retrying doesn’t work, then please file a bug report
- 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
/try
or includetry=1
querystring 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