DB Schema

Contents

[edit] Header

-- schema revision: $LastChangedRevision: 358 $
SET FOREIGN_KEY_CHECKS=0;
start transaction;
 
-- Tags_order: Project, Machine, User, Patch, MJConf, FsPSelect, Rep_file_chng, Jobs, Machine_sessions, Test_runs, Benchmark_runs, Files_paths, IRC_robot, Config.

[edit] Tables

[edit] Table user

CREATE TABLE user (
    user_id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Primary key',
    login       VARCHAR(20) NOT NULL,
    passwd      VARCHAR(20) NOT NULL,
    first_name  VARCHAR(255) NOT NULL DEFAULT '',
    last_name   VARCHAR(255) NOT NULL DEFAULT '',
    irc_nick    VARCHAR(25) DEFAULT NULL,
    active      BOOLEAN NOT NULL DEFAULT 1 COMMENT 'Zero means historical data.',
    created     DATETIME NOT NULL COMMENT 'Account creation time.',
    last_login  DATETIME DEFAULT NULL,
    INDEX i_login (login)
) TYPE=InnoDB COMMENT='User info. Tag:User.';

[edit] Table machine (m)

CREATE TABLE machine (
    machine_id      INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id         INT UNSIGNED NOT NULL,
    name            VARCHAR(20) NOT NULL,
    passwd          VARCHAR(20) NOT NULL,
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.',
    ip              VARCHAR(15) DEFAULT NULL,
    cpuarch         VARCHAR(50) DEFAULT NULL,
    osname          VARCHAR(50) DEFAULT NULL,
    archname        VARCHAR(255) DEFAULT NULL,
    disabled        BOOLEAN NOT NULL DEFAULT 0,
    created         DATETIME NOT NULL,
    prev_machine_id INT UNSIGNED DEFAULT NULL,
    farm_id         INT UNSIGNED DEFAULT NULL,
    CONSTRAINT fk_machine_user_id FOREIGN KEY (user_id) REFERENCES user (user_id),
    CONSTRAINT fk_machine_prev_machine_id FOREIGN KEY (prev_machine_id) REFERENCES machine (machine_id),
    CONSTRAINT fk_machine_farm_id FOREIGN KEY (farm_id) REFERENCES farm (farm_id)
) TYPE=InnoDB COMMENT='Machine (computer or virtual machine) info. Tag:Machine.';

[edit] Table farm

CREATE TABLE farm (
    farm_id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name            VARCHAR(30) NOT NULL,
    has_same_hw     BOOLEAN NOT NULL DEFAULT 0,
    has_same_sw     BOOLEAN NOT NULL DEFAULT 0,
    `desc`          TEXT DEFAULT NULL COMMENT 'Description. Tag:Machine.'
) TYPE=InnoDB COMMENT='Group of machines with same HW, SW or both configurations working in farm. Tag:Machine.';

[edit] Table project

CREATE TABLE project (
    project_id  INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name        VARCHAR(255) NOT NULL,
    url         VARCHAR(255) NOT NULL,
    `desc`      TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='Project. Tag:Project.';

[edit] Table rep

CREATE TABLE rep (
    rep_id          INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    project_id      INT UNSIGNED NOT NULL,
    name            VARCHAR(255) NOT NULL,
    path            VARCHAR(255) NOT NULL,
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.',
    active          BOOLEAN NOT NULL DEFAULT 1 COMMENT '1 .. repository is active, 0 .. old (deprecated) repository',
    default_layout  BOOLEAN NOT NULL DEFAULT 1 COMMENT 'Has default Subversion repository layout (trunk, tags, branches).',
    CONSTRAINT fk_rep_project_id FOREIGN KEY (project_id) REFERENCES project (project_id),
    UNIQUE KEY unique_rep_id_path (rep_id, path)
) TYPE=InnoDB COMMENT='Project repository. Each project can has only one active repository. Tag:Project.';

[edit] Table rep_author

CREATE TABLE rep_author (
    rep_author_id   INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    rep_id          INT UNSIGNED NOT NULL,
    rep_login       VARCHAR(255) DEFAULT NULL COMMENT 'Can be null (see Parrot rev 1346 created by cvs2svn).',
    user_id         INT UNSIGNED DEFAULT NULL COMMENT 'Some authors has TapTinder user_id too.',
    INDEX i_rep_id (rep_id),
    INDEX i_rep_login (rep_login),
    INDEX i_user_id (user_id),
    CONSTRAINT fk_user_rep_rep_id FOREIGN KEY (rep_id) REFERENCES rep (rep_id),
    CONSTRAINT fk_user_rep_user_id FOREIGN KEY (user_id) REFERENCES user (user_id)
) TYPE=InnoDB COMMENT='Repository and patch authors. Some authors are also users. Tag:Project.';

[edit] Table rev

CREATE TABLE rev (
    rev_id          INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    rep_id          INT UNSIGNED NOT NULL COMMENT 'Cache for rev_rep_path.rep_path_id -> rep_path.rep_id.',
    rev_num         INT UNSIGNED NOT NULL,
    author_id       INT UNSIGNED NOT NULL,
    date            DATETIME NOT NULL,
    msg             TEXT,
    INDEX i_rep_id (rep_id),
    INDEX i_rev_num (rev_num),
    CONSTRAINT fk_rev_rep_id FOREIGN KEY (rep_id) REFERENCES rep (rep_id),
    CONSTRAINT fk_rev_rep_author_id FOREIGN KEY (author_id) REFERENCES rep_author (rep_author_id)
) TYPE=InnoDB COMMENT='Revision info. Tag:Project.';

[edit] Table rep_path

CREATE TABLE rep_path (
    rep_path_id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    rep_id          INT UNSIGNED NOT NULL,
    path            VARCHAR(255) NOT NULL,
    rev_num_from    INT UNSIGNED NOT NULL,
    rev_num_to      INT UNSIGNED DEFAULT NULL,
    INDEX i_rep_id (rep_id),
    INDEX i_path (path),
    INDEX i_rev_num_from (rev_num_from),
    INDEX i_rev_num_to (rev_num_to),
    CONSTRAINT fk_rep_path_rep_id FOREIGN KEY (rep_id) REFERENCES rep (rep_id)
) TYPE=InnoDB COMMENT='Repository path (trunk/, branch/pdd17pmc/, ...). Tag:Project.';

[edit] Table rev_rep_path

CREATE TABLE rev_rep_path (
    rep_path_id         INT UNSIGNED NOT NULL,
    rev_id              INT UNSIGNED NOT NULL,
    UNIQUE KEY unique_rep_id_path (rep_path_id, rev_id),
    CONSTRAINT fk_rev_rep_path_rep_path_id FOREIGN KEY (rep_path_id) REFERENCES rep_path (rep_path_id),
    CONSTRAINT fk_rev_rep_path_rev_id FOREIGN KEY (rev_id) REFERENCES rev (rev_id)
) TYPE=InnoDB COMMENT='Revision info to repository path map (M:N). Tag:Project.';

[edit] Table rep_file

CREATE TABLE rep_file (
    rep_file_id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    rep_path_id     INT UNSIGNED NOT NULL,
    sub_path        VARCHAR(255) NOT NULL,
    rev_num_from    INT UNSIGNED NOT NULL COMMENT 'Revision where this file was added.',
    rev_num_to      INT UNSIGNED DEFAULT NULL COMMENT 'Revision number where this file was last seen (file was deleted in revision rev_num_to+1).',
    INDEX i_rep_path_id (rep_path_id),
    INDEX i_rev_num_from (rev_num_from),
    INDEX i_rev_num_to (rev_num_to),
    CONSTRAINT fk_rep_file_rep_path_id FOREIGN KEY (rep_path_id) REFERENCES rep_path (rep_path_id)
) TYPE=InnoDB COMMENT='Files in repository path. Tag:Project.';

[edit] Table rep_change_type

CREATE TABLE rep_change_type (
    rep_change_type_id  INT UNSIGNED NOT NULL PRIMARY KEY,
    abbr                VARCHAR(1) NOT NULL,
    `desc`              VARCHAR(10) NOT NULL COMMENT 'Description.',
    INDEX i_abbr (abbr)
) TYPE=InnoDB COMMENT='Change types and info. Tag:Rep_file_chng.';

[edit] Table rep_file_change

CREATE TABLE rep_file_change (
    rev_id          INT UNSIGNED NOT NULL,
    rev_num         INT UNSIGNED NOT NULL COMMENT 'Cache for rev.rev_num.',
    rep_file_id     INT UNSIGNED NOT NULL,
    change_type_id  INT UNSIGNED NOT NULL,
    INDEX i_rev_id (rev_id),
    INDEX i_rev_num (rev_num),
    INDEX i_rev_id_rep_file_id (rev_id, rep_file_id),
    CONSTRAINT fk_rep_file_change_rev_id FOREIGN KEY (rev_id) REFERENCES rev (rev_id),
    CONSTRAINT fk_rep_file_change_rep_file_id FOREIGN KEY (rep_file_id) REFERENCES rep_file (rep_file_id),
    CONSTRAINT fk_rep_file_change_change_type_id FOREIGN KEY (change_type_id) REFERENCES rep_change_type (rep_change_type_id)
) TYPE=InnoDB COMMENT='Tag:Rep_file_chng.';

[edit] Table rep_file_change_from

CREATE TABLE rep_file_change_from (
    rev_id              INT UNSIGNED NOT NULL,
    rep_file_id         INT UNSIGNED NOT NULL,
    from_rev_id         INT UNSIGNED DEFAULT NULL,
    from_rep_file_id    INT UNSIGNED DEFAULT NULL,
    INDEX i_rev_id_rep_file_id (rev_id, rep_file_id),
    CONSTRAINT fk_rep_file_change_from_rev_id FOREIGN KEY (rev_id) REFERENCES rev (rev_id),
    CONSTRAINT fk_rep_file_change_from_rep_file_id FOREIGN KEY (rep_file_id) REFERENCES rep_file (rep_file_id),
    CONSTRAINT fk_rep_file_change_from_from_rev_id FOREIGN KEY (from_rev_id) REFERENCES rev (rev_id),
    CONSTRAINT fk_rep_file_change_from_from_rep_file_id FOREIGN KEY (from_rep_file_id) REFERENCES rep_file (rep_file_id)
) TYPE=InnoDB COMMENT='From which revision file was copied. Tag:Rep_file_chng.';

[edit] Table patch

CREATE TABLE patch (
    patch_id        INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    rep_path_id     INT UNSIGNED NOT NULL,
    rev_num         INT UNSIGNED NOT NULL COMMENT 'Revison number found in patch.',
    rev_num_to      INT UNSIGNED NOT NULL COMMENT 'Cache, server checks if patch apply ok.',
    author_id       INT UNSIGNED NOT NULL,
    date            DATETIME NOT NULL,
    msg             TEXT,
    fsfile_id       INT UNSIGNED NOT NULL,
    new_patch_id    INT UNSIGNED DEFAULT NULL COMMENT 'If not null then patch has newer version.',
    INDEX i_rep_path_id (rep_path_id),
    INDEX i_rev_num (rev_num),
    CONSTRAINT fk_patch_rep_path_id FOREIGN KEY (rep_path_id) REFERENCES rep_path (rep_path_id),
    CONSTRAINT fk_patch_rep_author_id FOREIGN KEY (author_id) REFERENCES rep_author (rep_author_id),
    CONSTRAINT fk_patch_file_id FOREIGN KEY (fsfile_id) REFERENCES fsfile (fsfile_id),
    CONSTRAINT fk_patch_new_patch_id FOREIGN KEY (new_patch_id) REFERENCES patch (patch_id)
) TYPE=InnoDB COMMENT='Only one file for each patch. Tag:Patch.';

[edit] Table job

CREATE TABLE job (
    job_id          INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    client_min_rev  INT UNSIGNED DEFAULT 1 COMMENT 'Minimal clietn revision number to run this job.',
    priority        INT UNSIGNED NOT NULL DEFAULT 1,
    name            VARCHAR(25),
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='Job table can contain one part or more related parts. Tag:Jobs.';

[edit] Table jobp

CREATE TABLE jobp (
    jobp_id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    job_id          INT UNSIGNED NOT NULL,
    rep_path_id     INT UNSIGNED DEFAULT NULL,
    `order`         INT UNSIGNED NOT NULL,
    name            VARCHAR(25),
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.',
    max_age         INT UNSIGNED DEFAULT NULL COMMENT 'Maximal commit age in hours.',
    depends_on_id   INT UNSIGNED DEFAULT NULL COMMENT 'Depends on jobp.jobp_id. Job part (jobp_id) can not start if jobp.depends_on_id does not finished ok.',
    extends         BOOLEAN NOT NULL DEFAULT 0 COMMENT 'Default 0. 1 if this part extends part defined in depends_on_id.',
    INDEX i_job_id (job_id),
    INDEX i_rep_path_id (rep_path_id),
    CONSTRAINT fk_jobp_job_id FOREIGN KEY (job_id) REFERENCES job (job_id),
    CONSTRAINT fk_jobp_depedns_on_id FOREIGN KEY (depends_on_id) REFERENCES jobp (jobp_id),
    CONSTRAINT fk_jobp_rep_path_id FOREIGN KEY (rep_path_id) REFERENCES rep_path (rep_path_id)
) TYPE=InnoDB COMMENT='Job part. Tag:Jobs.';

[edit] Table cmd

CREATE TABLE cmd (
    cmd_id      INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name        VARCHAR(25),
    `desc`      TEXT DEFAULT NULL COMMENT 'Description.',
    params      TEXT DEFAULT NULL
) TYPE=InnoDB COMMENT='Possible commands to run on clients. Tag:Jobs.';

Client should known what to run for each cmd_id. E.g. 1 (perlconf) means run 'perl Configure.pl' or 'perl.exe Configure.pl' (under win32). Server shoul know, which params client needs.

[edit] Table jobp_cmd

CREATE TABLE jobp_cmd (
    jobp_cmd_id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    jobp_id         INT UNSIGNED NOT NULL,
    `order`         INT UNSIGNED NOT NULL,
    cmd_id          INT UNSIGNED NOT NULL,
    params          TEXT,
    INDEX i_jobp_id (jobp_id),
    CONSTRAINT fk_jobp_cmd_jobp_id FOREIGN KEY (jobp_id) REFERENCES jobp (jobp_id),
    CONSTRAINT fk_jobp_cmd_cmd_id FOREIGN KEY (cmd_id) REFERENCES cmd (cmd_id)
) TYPE=InnoDB COMMENT='Job part command. Tag:Jobs.';

[edit] Table machine_job_conf

CREATE TABLE machine_job_conf (
    machine_job_conf_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    machine_id          INT UNSIGNED NOT NULL,
    rep_id              INT UNSIGNED DEFAULT NULL,
    rep_path_id         INT UNSIGNED DEFAULT NULL,
    job_id              INT UNSIGNED DEFAULT NULL,
    priority            INT UNSIGNED NOT NULL DEFAULT 1,
    allow_patches       BOOLEAN NOT NULL DEFAULT 0,
    INDEX i_machine_id (machine_id),
    CONSTRAINT fk_machine_job_conf_machine_id FOREIGN KEY (machine_id) REFERENCES machine (machine_id),
    CONSTRAINT fk_machine_job_conf_rep_id FOREIGN KEY (rep_id) REFERENCES rep (rep_id),
    CONSTRAINT fk_machine_job_conf_rep_path_id FOREIGN KEY (rep_path_id) REFERENCES rep_path (rep_path_id),
    CONSTRAINT fk_machine_job_conf_job_id FOREIGN KEY (job_id) REFERENCES job (job_id)
) TYPE=InnoDB COMMENT='Machine job configuration. Tag:MJConf.';

Defined rep_id is the most general config. Defined job_id the most specific config.

[edit] Table msession (ms)

CREATE TABLE msession (
    msession_id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    machine_id          INT UNSIGNED NOT NULL,
    client_rev          VARCHAR(21) NOT NULL COMMENT 'Client revision (11, 10:12M, ...).',
    pid                 INT UNSIGNED DEFAULT NULL COMMENT 'System process id on machine.',
    start_time          DATETIME NOT NULL COMMENT 'Time when machine session was started.',
    end_time            DATETIME DEFAULT NULL COMMENT 'Time when machine session ended.',
    abort_reason_id     INT UNSIGNED DEFAULT NULL COMMENT 'FK to msession_abort_reason if exists.',
    INDEX i_machine_id (machine_id),
    CONSTRAINT fk_msession_machine_id FOREIGN KEY (machine_id) REFERENCES machine (machine_id),
    CONSTRAINT fk_msession_abort_reason_id FOREIGN KEY (abort_reason_id) REFERENCES msabort_reason (msabort_reason_id)
) TYPE=InnoDB COMMENT='Machine session. Each machine can run more than one processes at a time. Tag:Machine_sessions.';

[edit] Table msjob

CREATE TABLE msjob (
    msjob_id            INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    msession_id         INT UNSIGNED NOT NULL,
    job_id              INT UNSIGNED NOT NULL,
    start_time          DATETIME NOT NULL COMMENT 'Time when machine job was created.',
    end_time            DATETIME DEFAULT NULL COMMENT 'Time when machine job ended.',
    pid                 INT UNSIGNED DEFAULT NULL,
    INDEX i_msession_id (msession_id),
    INDEX i_job_id (job_id),
    CONSTRAINT fk_msjob_msession_id FOREIGN KEY (msession_id) REFERENCES msession (msession_id),
    CONSTRAINT fk_msjob_job_id FOREIGN KEY (job_id) REFERENCES job (job_id)
) TYPE=InnoDB COMMENT='Machine session job part. Tag:Machine_sessions.';

Abort reason is determined by msession.

[edit] Table msjobp

CREATE TABLE msjobp (
    msjobp_id       INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    msjob_id        INT UNSIGNED NOT NULL,
    jobp_id         INT UNSIGNED NOT NULL,
    rev_id          INT UNSIGNED NOT NULL,
    patch_id        INT UNSIGNED DEFAULT NULL,
    start_time      DATETIME NOT NULL COMMENT 'Time when machine job part was created.',
    end_time        DATETIME DEFAULT NULL COMMENT 'Time when machine job part ended.',
    INDEX i_msjob_id (msjob_id),
    INDEX i_jobp_id (jobp_id),
    INDEX i_rev_id (rev_id),
    CONSTRAINT fk_msjobp_msjob_id FOREIGN KEY (msjob_id) REFERENCES msjob (msjob_id),
    CONSTRAINT fk_msjobp_jobp_id FOREIGN KEY (jobp_id) REFERENCES jobp (jobp_id),
    CONSTRAINT fk_msjobp_rev_id FOREIGN KEY (rev_id) REFERENCES rev (rev_id),
    CONSTRAINT fk_msjobp_patch_id FOREIGN KEY (patch_id) REFERENCES patch (patch_id)
) TYPE=InnoDB COMMENT='Machine session job part. Tag:Machine_sessions.';

[edit] Table cmd_status

CREATE TABLE cmd_status (
    cmd_status_id   INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name            VARCHAR(25),
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='Command status. Tag:Machine_sessions.';

Values:

  • 1 .. created -- created in DB, not started yet
  • 2 .. running
  • 3 .. paused -- paused by user
  • 4 .. ok -- finished ok
  • 5 .. interrupted
  • 6 .. error -- finished with error

[edit] Table msjobp_cmd

CREATE TABLE msjobp_cmd (
    msjobp_cmd_id   INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    msjobp_id       INT UNSIGNED NOT NULL,
    jobp_cmd_id     INT UNSIGNED NOT NULL,
    status_id       INT UNSIGNED NOT NULL,
    pid             INT UNSIGNED DEFAULT NULL,
    start_time      DATETIME NOT NULL COMMENT  'Time when machine job part command was created.',
    end_time        DATETIME DEFAULT NULL COMMENT 'Time when machine job part command ended.',
    output_id       INT UNSIGNED DEFAULT NULL COMMENT 'Command output (stderr and stdout, .txt file).',
    outdata_id      INT UNSIGNED DEFAULT NULL COMMENT 'Command data output (one .tar.gz file).',
    INDEX i_msjobp_id (msjobp_id),
    INDEX i_jobp_cmd_id (jobp_cmd_id),
    CONSTRAINT fk_msjobp_cmd_msjobp_id FOREIGN KEY (msjobp_id) REFERENCES msjobp (msjobp_id),
    CONSTRAINT fk_msjobp_cmd_jobp_cmd_id FOREIGN KEY (jobp_cmd_id) REFERENCES jobp_cmd (jobp_cmd_id),
    CONSTRAINT fk_msjobp_cmd_job_status_id FOREIGN KEY (status_id) REFERENCES cmd_status (cmd_status_id),
    CONSTRAINT fk_msjobp_cmd_output_id FOREIGN KEY (output_id) REFERENCES fsfile (fsfile_id),
    CONSTRAINT fk_msjobp_cmd_outdata_id FOREIGN KEY (outdata_id) REFERENCES fsfile (fsfile_id)
) TYPE=InnoDB COMMENT='Machine session job part command. Tag:Machine_sessions.';

[edit] Table mslog

CREATE TABLE mslog (
    mslog_id                INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    msession_id             INT UNSIGNED NOT NULL,
    msstatus_id             INT UNSIGNED NOT NULL COMMENT 'Value os msstatus_id could stay same (waiting for new job) but attempt_number is increased each time.',
    attempt_number          INT UNSIGNED DEFAULT 1,
    change_time             DATETIME NOT NULL COMMENT 'Time when machine change msession state to this status_id.',
    estimated_finish_time   DATETIME DEFAULT NULL COMMENT 'Time when machine will probably change msession status again.',
    INDEX i_msession_id (msession_id),
    CONSTRAINT fk_mslog_msession_id FOREIGN KEY (msession_id) REFERENCES msession (msession_id),
    CONSTRAINT fk_mslog_msstatus_id FOREIGN KEY (msstatus_id) REFERENCES msstatus (msstatus_id)
) TYPE=InnoDB COMMENT='Machine session log. Tag:Machine_sessions.';

Could be part of msession table, but separate table is better for logging (and log cleaning).

[edit] Table msstatus

CREATE TABLE msstatus (
    msstatus_id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name            VARCHAR(25),
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='Machine session status messages. Tag:Machine_sessions.';

Values:

  • 1 .. unknown status
  • 2 .. msession just created
  • 3 .. waiting for new job
  • 4 .. command preparation
  • 5 .. running command
  • 6 .. paused by user
  • 7 .. stop by user
  • 8 .. stop by web server -- see also msabort_reason table
  • 9 .. stop by anything else

[edit] Table msabort_reason

CREATE TABLE msabort_reason (
    msabort_reason_id   INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name                VARCHAR(25),
    `desc`              TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='Machine session status messages. Tag:Machine_sessions.';

Values:

  • 1 .. unknown reason
  • 2 .. deprecated client revision
  • 3 .. machine was disabled
  • 4 .. bad client behavior
  • 5 .. iterrupted by user

[edit] Table trun_status

CREATE TABLE trun_status (
    trun_status_id      INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name                VARCHAR(25),
    `desc`              TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='Test run loading status. Tag:Test_runs.';

[edit] Table trun

CREATE TABLE trun (
    trun_id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    msjobp_cmd_id   INT UNSIGNED NOT NULL,
    trun_status_id  INT UNSIGNED NOT NULL,
    parse_errors    INT UNSIGNED NOT NULL COMMENT 'Table ttest sum cache.',
    not_seen        INT UNSIGNED NOT NULL COMMENT 'Table ttest sum cache.',
    failed          INT UNSIGNED NOT NULL COMMENT 'Table ttest sum cache.',
    todo            INT UNSIGNED NOT NULL COMMENT 'Table ttest sum cache.',
    skip            INT UNSIGNED NOT NULL COMMENT 'Table ttest sum cache.',
    bonus           INT UNSIGNED NOT NULL COMMENT 'Table ttest sum cache.',
    ok              INT UNSIGNED NOT NULL COMMENT 'Table ttest sum cache.',
    INDEX i_msjobp_cmd_id (msjobp_cmd_id),
    CONSTRAINT fk_trun_trun_status_id FOREIGN KEY (trun_status_id) REFERENCES trun_status (trun_status_id),
    CONSTRAINT fk_trun_msjobp_cmd_id FOREIGN KEY (msjobp_cmd_id) REFERENCES msjobp_cmd (msjobp_cmd_id)
) TYPE=InnoDB COMMENT='Test run info and test run statistics (cache). Tag:Test_runs.';

[edit] Table tskipall_msg

CREATE TABLE tskipall_msg (
    tskipall_msg_id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    msg                 TEXT,
    hash                CHAR(30) NOT NULL,
    INDEX i_hash (hash)
) TYPE=InnoDB COMMENT='Reasons to skipp all tests. Tag:Test_runs.';

[edit] Table tfile

CREATE TABLE tfile (
    tfile_id            INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    trun_id             INT UNSIGNED NOT NULL,
    rep_file_id         INT UNSIGNED NOT NULL,
    all_passed          BOOLEAN NOT NULL DEFAULT 0 COMMENT 'In Harness::Straps max == seen == ok.',
    tskipall_msg_id     INT UNSIGNED DEFAULT NULL,
    hang                BOOLEAN DEFAULT 0 COMMENT 'One if test hang and was killed.',
    INDEX i_trun_id (trun_id),
    CONSTRAINT fk_tfile_trun_id FOREIGN KEY (trun_id) REFERENCES trun (trun_id),
    CONSTRAINT fk_tfile_rep_file_id FOREIGN KEY (rep_file_id) REFERENCES rep_file (rep_file_id),
    CONSTRAINT fk_tfile_tskipall_msg_id FOREIGN KEY (tskipall_msg_id) REFERENCES tskipall_msg (tskipall_msg_id)
) TYPE=InnoDB COMMENT='Test file summary results. Summary result for all tests in file. All_passed is shortcup to data test. Tag:Test_runs.';

[edit] Table trest

CREATE TABLE trest (
    trest_id    INT UNSIGNED NOT NULL PRIMARY KEY,
    name        VARCHAR(25),
    `desc`      TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='Test result info. Tag:Test_runs.';

Values:

  • 1 .. not seen
  • 2 .. failed
  • 3 .. unknown
  • 4 .. todo
  • 5 .. bonus -- unexpectedly succeeded
  • 6 .. skip
  • 7 .. ok

[edit] Table rep_test

CREATE TABLE rep_test (
    rep_test_id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    rep_file_id         INT UNSIGNED NOT NULL,
    number              INT UNSIGNED NOT NULL COMMENT 'Test number in rep_file.',
    name                VARCHAR(255) NOT NULL COMMENT 'First inserted name of the test (if any and not empty).',
    has_another_name    BOOLEAN NOT NULL DEFAULT 0 COMMENT 'One if another name was found.',
    INDEX i_rep_file_id (rep_file_id),
    INDEX i_rep_file_id_number (rep_file_id, number),
    CONSTRAINT fk_rep_test_rep_file_id FOREIGN KEY (rep_file_id) REFERENCES rep_file (rep_file_id)
) TYPE=InnoDB COMMENT='Number and name of the test. Each rep_file can contains many tests. Rep file gets new id after each file change. Tag:Test_runs.';

[edit] Table ttest

CREATE TABLE ttest (
    ttest_id        INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    trun_id         INT UNSIGNED NOT NULL,
    rep_test_id     INT UNSIGNED NOT NULL,
    trest_id        INT UNSIGNED NOT NULL,
    INDEX i_rep_test_id (rep_test_id),
    INDEX i_trun_id (trun_id),
    INDEX i_trest_id (trest_id),
    CONSTRAINT fk_ttest_trun_id FOREIGN KEY (trun_id) REFERENCES trun (trun_id),
    CONSTRAINT fk_ttest_rep_test_id FOREIGN KEY (rep_test_id) REFERENCES rep_test (rep_test_id),
    CONSTRAINT fk_ttest_trest_id FOREIGN KEY (trest_id) REFERENCES trest (trest_id)
) TYPE=InnoDB COMMENT='Test results for each test (test case, subtest) submitted in trun. Tag:Test_runs.';

[edit] Table tdiag_msg

CREATE TABLE tdiag_msg (
    tdiag_msg_id    INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ttest_id        INT UNSIGNED NOT NULL,
    msg             TEXT,
    hash            CHAR(30) NOT NULL,
    INDEX i_ttest_id (ttest_id),
    INDEX i_hash (hash),
    CONSTRAINT fk_tdiag_msg_ttest_id FOREIGN KEY (ttest_id) REFERENCES ttest (ttest_id)
) TYPE=InnoDB COMMENT='Diagnostic messages. Tag:Test_runs.';

[edit] Table brun_conf

CREATE TABLE brun_conf (
    brun_conf_id    INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    hash            CHAR(30) NOT NULL,
    args            VARCHAR(255) DEFAULT NULL,
    alias_conf_id   INT UNSIGNED DEFAULT NULL COMMENT 'Another conf with the same semantics, but different syntax.',
    INDEX i_hash (hash),
    CONSTRAINT fk_brun_conf_alias_conf_id FOREIGN KEY (alias_conf_id) REFERENCES brun_conf (brun_conf_id)
) TYPE=InnoDB COMMENT='Benchmark run. Tag:Benchmark_runs.';

[edit] Table brun

CREATE TABLE brun (
    brun_id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    msjobp_cmd_id   INT UNSIGNED NOT NULL,
    conf_id         INT UNSIGNED NOT NULL,
    INDEX i_msjobp_cmd_id (msjobp_cmd_id),
    INDEX i_conf_id (conf_id),
    CONSTRAINT fk_brun_msjobp_cmd_id FOREIGN KEY (msjobp_cmd_id) REFERENCES msjobp_cmd (msjobp_cmd_id),
    CONSTRAINT fk_brun_conf_id FOREIGN KEY (conf_id) REFERENCES brun_conf (brun_conf_id)
) TYPE=InnoDB COMMENT='Benchmark runs. Tag:Benchmark_runs.';

[edit] Table bfile

CREATE TABLE bfile (
    bfile_id            INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    brun_id             INT UNSIGNED NOT NULL,
    rep_file_id         INT UNSIGNED NOT NULL,
    run_time            INT UNSIGNED DEFAULT NULL,
    hang                BOOLEAN DEFAULT 0 COMMENT 'If test hang and was killed.',
    INDEX i_brun_id (brun_id),
    CONSTRAINT fk_bfile_brun_id FOREIGN KEY (brun_id) REFERENCES brun (brun_id),
    CONSTRAINT fk_bfile_rep_file_id FOREIGN KEY (rep_file_id) REFERENCES rep_file (rep_file_id)
) TYPE=InnoDB COMMENT='Bench file results. Tag:Benchmark_runs.';

[edit] Table fspath

CREATE TABLE fspath (
    fspath_id       INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    path            VARCHAR(1023) COMMENT 'Full path from root, e.g. /tmp/taptinder/patches/parrot-01/.',
    web_path        VARCHAR(255),
    public          BOOLEAN DEFAULT 0,
    created         DATETIME NOT NULL,
    deleted         DATETIME DEFAULT NULL,
    name            VARCHAR(25),
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='List of directories with files. Tag:Files_paths.';

[edit] Table fsfile

CREATE TABLE fsfile (
    fsfile_id       INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    fspath_id       INT UNSIGNED NOT NULL,
    name            VARCHAR(255),
    size            INT UNSIGNED NOT NULL COMMENT 'File size in bytes.',
    created         DATETIME NOT NULL,
    deleted         DATETIME DEFAULT NULL,
    INDEX i_fspath_id (fspath_id),
    CONSTRAINT fk_fsfile_fspath_id FOREIGN KEY (fspath_id) REFERENCES fspath (fspath_id)
) TYPE=InnoDB COMMENT='List of saved files. Tag:Files_paths.';

[edit] Table fsfile_ext

CREATE TABLE fsfile_ext (
    fsfile_ext_id   INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    archive_id      INT UNSIGNED NOT NULL,
    org_name        VARCHAR(255) COMMENT 'Orginal file name inside archive.',
    fsfile_id       INT UNSIGNED NOT NULL,
    INDEX i_archive_id_fsfile_id (archive_id, fsfile_id),
    CONSTRAINT fk_fsfile_ext_archive_id FOREIGN KEY (archive_id) REFERENCES fsfile (fsfile_id),
    CONSTRAINT fk_fsfile_ext_fsfile_id FOREIGN KEY (fsfile_id) REFERENCES fsfile (fsfile_id)
) TYPE=InnoDB COMMENT='Files extracted from another files (archives). Tag:Files_paths.';

[edit] Table fsfile_type

CREATE TABLE fsfile_type (
    fsfile_type_id  INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name            VARCHAR(25),
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='List of file types. Used to select proper path. Tag:FsPSelect.';

[edit] Table fspath_select

CREATE TABLE fspath_select (
    fspath_select_id    INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    fsfile_type_id      INT UNSIGNED NOT NULL,
    rep_path_id         INT UNSIGNED DEFAULT NULL,
    fspath_id           INT UNSIGNED NOT NULL,
    INDEX i_fsfile_type_id_rep_path_id (fsfile_type_id,rep_path_id),
    CONSTRAINT fk_fspath_select_fsfile_type_id FOREIGN KEY (fsfile_type_id) REFERENCES fsfile_type (fsfile_type_id),
    CONSTRAINT fk_fspath_select_rep_path_id FOREIGN KEY (rep_path_id) REFERENCES rep_path (rep_path_id),
    CONSTRAINT fk_fspath_select_fspath_id FOREIGN KEY (fspath_id) REFERENCES fspath (fspath_id)
) TYPE=InnoDB COMMENT='Default fsfile_path to save files for each rep_path and file_type. Tag:FsPSelect.';

[edit] Table param_type

CREATE TABLE param_type (
    param_type_id   INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name            VARCHAR(20) NOT NULL,
    `desc`          TEXT DEFAULT NULL COMMENT 'Description.',
    INDEX i_name (name)
) TYPE=InnoDB COMMENT='Types of parameters. Tag:Config.';

[edit] Table param

CREATE TABLE param (
    param_id        INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    param_type_id   INT UNSIGNED NOT NULL,
    value           VARCHAR(255) DEFAULT NULL,
    INDEX i_name (param_type_id),
    CONSTRAINT fk_param_param_type_id FOREIGN KEY (param_type_id) REFERENCES param_type (param_type_id)
) TYPE=InnoDB COMMENT='Parameters values. Tag:Config.';

[edit] Table ibot

CREATE TABLE ibot (
    ibot_id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nick            VARCHAR(50) NOT NULL,
    full_name       VARCHAR(255) NOT NULL,
    server          VARCHAR(50) NOT NULL,
    port            INT UNSIGNED NOT NULL,
    operator_id     INT UNSIGNED NOT NULL COMMENT 'User operating the robot.',
    CONSTRAINT fk_ibot_operator_id FOREIGN KEY (operator_id) REFERENCES user (user_id)
) TYPE=InnoDB COMMENT='IRC bots. Tag:IRC_robot.';

[edit] Table ichannel

CREATE TABLE ichannel (
    ichannel_id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name            VARCHAR(50) NOT NULL
) TYPE=InnoDB COMMENT='IRC channel. Tag:IRC_robot.';

[edit] Table ireport_type_id

CREATE TABLE ireport_type (
    ireport_type_id     INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name                VARCHAR(15) NOT NULL,
    `desc`              TEXT DEFAULT NULL COMMENT 'Description.'
) TYPE=InnoDB COMMENT='IRC robot report types. Tag:IRC_robot.';

[edit] Table ichannel_conf

CREATE TABLE ichannel_conf (
    ichannel_conf_id    INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ibot_id             INT UNSIGNED NOT NULL,
    ichannel_id         INT UNSIGNED NOT NULL,
    ireport_type_id     INT UNSIGNED NOT NULL,
    errors_only         BOOLEAN NOT NULL DEFAULT 1,
    jobp_cmd_id         INT UNSIGNED DEFAULT NULL,
    max_age             INT UNSIGNED DEFAULT NULL COMMENT 'Maximal commit age in hours.',
    CONSTRAINT fk_ichannel_conf_ibot_id FOREIGN KEY (ibot_id) REFERENCES ibot (ibot_id),
    CONSTRAINT fk_ichannel_conf_ichannel_id FOREIGN KEY (ichannel_id) REFERENCES ichannel (ichannel_id),
    CONSTRAINT fk_ichannel_conf_ireport_type_id FOREIGN KEY (ireport_type_id) REFERENCES ireport_type (ireport_type_id),
    CONSTRAINT fk_ichannel_conf_jobp_cmd_id FOREIGN KEY (jobp_cmd_id) REFERENCES jobp_cmd (jobp_cmd_id)
) TYPE=InnoDB COMMENT='IRC robot parameter values. Tag:IRC_robot.';

[edit] Table ibot_log

CREATE TABLE ibot_log (
    ibot_log_id         INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ibot_id             INT UNSIGNED NOT NULL,
    ichannel_conf_id    INT UNSIGNED NOT NULL,
    rep_path_id         INT UNSIGNED NOT NULL,
    rev_id              INT UNSIGNED NOT NULL,
    CONSTRAINT fk_ibot_log_ibot_id FOREIGN KEY (ibot_id) REFERENCES ibot (ibot_id),
    CONSTRAINT fk_ibot_log_ichannel_conf_id FOREIGN KEY (ichannel_conf_id) REFERENCES ichannel_conf (ichannel_conf_id),
    CONSTRAINT fk_ibot_log_rep_path_id FOREIGN KEY (rep_path_id) REFERENCES rep_path (rep_path_id),
    CONSTRAINT fk_ibot_log_rev_id FOREIGN KEY (rev_id) REFERENCES rev (rev_id)
) TYPE=InnoDB COMMENT='IRC bot log. Tag:IRC_robot.';


[edit] Footer

commit;

[edit] Repository changes

  • rev_num_from = 100, rev_num_to = 100 -> file inserted in rev 100 and deleted in 101
  • rev_num_to = null - file exists in "max(rev_num) for rep_id"

[edit] A .. added (copied from)

  • insert into rep_file, rev_num_from=rev_num, rev_num_to=null
  • insert into rep_file_change
  • insert into rep_file_change_from

[edit] M .. modified

  • insert into rep_file_change

[edit] D .. deleted

  • change rev_num_to

[edit] R .. replacing

  • change rev_num_to to rev_num-1 for prev rep_file
  • insert into rep_file, rev_num_from=rev_num, rev_num_to=null
  • insert into rep_file_change
  • insert into rep_file_change_from
Personal tools
Language