Overview

What is Eliot?

Eliot is the Mozilla Symbolication Server which has a symbolication API for converting memory addresses into symbols (symbolication).

The webapp uses the Symbolic library to parse SYM files and do symbol lookups.

The webapp runs in a Docker container and is composed of:

  • Honcho process which manages:

    • eliot_web: gunicorn which runs multiple worker webapp processes

    • eliot_disk_manager: a disk cache manager process

The webapp handles HTTP requests by pulling sym files from the urls configured by ELIOT_SYMBOL_URLS. By default, that’s https://symbols.mozilla.org/try.

The webapp downloads sym files, parses them into symcache files, and performs symbol lookups with the symcache files. Parsing sym files and generating symcache files takes a long time, so it stores the symcache files in a disk cache shared by all webapp processes running in that Docker container. The disk cache manager process deletes least recently used items from the disk cache to keep it under ELIOT_SYMBOLS_CACHE_MAX_SIZE bytes.

Architecture

Rough architecture diagram of Eliot:

Eliot architecture diagram

Repository structure

Here’s a bunch of top-level directories and what’s in them:

bin/               -- scripts for running and developing
docker/            -- Dockerfile and image building bits
docs/              -- documentation
schemas/           -- API schemas
eliot/             -- Symbolication service unit tests and code (Eliot)

Note

Originally, there was just Tecken which handled upload, download, and symbolication. Then we split symbolication into a separate service codenamed Eliot [1], but it was in the tecken repository. Then we split it out as a completely separate project.