---
breadcrumbs:
- - /chromium-os
  - Chromium OS
- - /chromium-os/testing
  - Testing Home
page_name: autotest-keyvals
title: Autotest Keyvals
---

Job keyvals are key/value pairs, used to cache/exchange data about jobs between
different services in autotest, via the database. There are two keyvals tables,
afe_job_keyvals and tko_job_keyvals. Both tables have a job_id column for
keyvals to be foreign keyed to a job. The job_id can be a suite job id if jobs
are queued by a suite run, or test job id if the job is queued directly from
atest/run_remote_test/autoserv.

The initial job keyvals get specified as part of the arguments to the create_job
RPC and entered into the database (into the afe_job_keyvals table). Then, before
we go to run a job, we pull the keyvals out of the database and write them to a
file. This is done by a class named TaskWithJobKeyvals that is a mixin that gets
included for the Agents representing job runs. The parsing of these keyvals back
into the database happens when the scheduler kicks off tko/parse.py to parse job
results during the PARSING phase. tko/parse.py calls tko/db.py:insert_job(),
which contains the call to update_job_keyvals() which does the actual job keyval
writing. These get inserted into tko_job_keyvals, so the initial keyvals are
always in afe_job_keyvals, and the final results in tko_job_keyvals.

afe_job_keyvals stores the a job's suite and build information.

tko_job_keyvals stores the test result information, including:

user that requested the job

job start/end time (job_started, job_queued, job_finished)

perf keyvals, which are up to individual tests to create as they see fit. The
use and lifecycle of perf keyvals is explained in detail on [a separate
webpage](/chromium-os/testing/autotest-keyvals/perf-keyvals).

Importantly, the tko_job_keyvals entry for a suite job stores a dictionary
between hashed test names and job_id-owner. After a suite job is finished,
run_suite uses this dictionary to find out the job url for a particular test.
The reason for this is that when a suite is started, all keyvals are keyed by
suite job id. The test job id is set only after the test job is started. After a
test job has finished, autoserv creates logs a keyval (for the test’s job id)
with the hashed test name as the key and job_id-owner as the value. run_suite
pulls the keyval from tko_job_keyval table and maps the test job to its result
page, which is the test job page, rather than suite job page.
