RunCommandLogs: init table

This commit is contained in:
Graham Christensen 2021-11-17 12:34:50 -05:00
parent f4e86a3236
commit 52843195db
4 changed files with 224 additions and 2 deletions

View file

@ -499,6 +499,21 @@ __PACKAGE__->belongs_to(
{ is_deferrable => 0, on_delete => "NO ACTION", on_update => "CASCADE" },
);
=head2 runcommandlogs
Type: has_many
Related object: L<Hydra::Schema::Result::RunCommandLogs>
=cut
__PACKAGE__->has_many(
"runcommandlogs",
"Hydra::Schema::Result::RunCommandLogs",
{ "foreign.build_id" => "self.id" },
undef,
);
=head2 aggregates
Type: many_to_many
@ -528,8 +543,8 @@ __PACKAGE__->many_to_many(
);
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-08-26 12:02:36
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:WHdSVHhQykmUz0tR/TExVg
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-11-17 12:42:34
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ylttv/NTMDcSZumBXRCOCw
__PACKAGE__->has_many(
"dependents",

View file

@ -0,0 +1,157 @@
use utf8;
package Hydra::Schema::Result::RunCommandLogs;
# Created by DBIx::Class::Schema::Loader
# DO NOT MODIFY THE FIRST PART OF THIS FILE
=head1 NAME
Hydra::Schema::Result::RunCommandLogs
=cut
use strict;
use warnings;
use base 'DBIx::Class::Core';
=head1 COMPONENTS LOADED
=over 4
=item * L<Hydra::Component::ToJSON>
=back
=cut
__PACKAGE__->load_components("+Hydra::Component::ToJSON");
=head1 TABLE: C<runcommandlogs>
=cut
__PACKAGE__->table("runcommandlogs");
=head1 ACCESSORS
=head2 id
data_type: 'integer'
is_auto_increment: 1
is_nullable: 0
sequence: 'runcommandlogs_id_seq'
=head2 job_matcher
data_type: 'text'
is_nullable: 0
=head2 build_id
data_type: 'integer'
is_foreign_key: 1
is_nullable: 0
=head2 command
data_type: 'text'
is_nullable: 0
=head2 start_time
data_type: 'integer'
is_nullable: 1
=head2 end_time
data_type: 'integer'
is_nullable: 1
=head2 error_number
data_type: 'integer'
is_nullable: 1
=head2 exit_code
data_type: 'integer'
is_nullable: 1
=head2 signal
data_type: 'integer'
is_nullable: 1
=head2 core_dumped
data_type: 'boolean'
is_nullable: 1
=cut
__PACKAGE__->add_columns(
"id",
{
data_type => "integer",
is_auto_increment => 1,
is_nullable => 0,
sequence => "runcommandlogs_id_seq",
},
"job_matcher",
{ data_type => "text", is_nullable => 0 },
"build_id",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
"command",
{ data_type => "text", is_nullable => 0 },
"start_time",
{ data_type => "integer", is_nullable => 1 },
"end_time",
{ data_type => "integer", is_nullable => 1 },
"error_number",
{ data_type => "integer", is_nullable => 1 },
"exit_code",
{ data_type => "integer", is_nullable => 1 },
"signal",
{ data_type => "integer", is_nullable => 1 },
"core_dumped",
{ data_type => "boolean", is_nullable => 1 },
);
=head1 PRIMARY KEY
=over 4
=item * L</id>
=back
=cut
__PACKAGE__->set_primary_key("id");
=head1 RELATIONS
=head2 build
Type: belongs_to
Related object: L<Hydra::Schema::Result::Builds>
=cut
__PACKAGE__->belongs_to(
"build",
"Hydra::Schema::Result::Builds",
{ id => "build_id" },
{ is_deferrable => 0, on_delete => "CASCADE", on_update => "NO ACTION" },
);
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-11-18 12:35:52
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:N0G71diB8DNDgkYgaSQrFA
# You can replace this text with custom code or comments, and it will be preserved on regeneration
1;

View file

@ -562,6 +562,55 @@ create table TaskRetries (
);
create index IndexTaskRetriesOrdered on TaskRetries(retry_at asc);
-- Records of RunCommand executions
--
-- The intended flow is:
--
-- 1. Create a RunCommandLogs entry when the task is "queued" to run
-- 2. Update the start_time when it begins
-- 3. Update the end_time and exit_code when it completes
create table RunCommandLogs (
id serial primary key not null,
job_matcher text not null,
build_id integer not null,
-- TODO: evaluation_id integer not null,
-- can we do this in a principled way? a build can be part of many evaluations
-- but a "bug" of RunCommand, imho, is that it should probably run per evaluation?
command text not null,
start_time integer,
end_time integer,
error_number integer,
exit_code integer,
signal integer,
core_dumped boolean,
foreign key (build_id) references Builds(id) on delete cascade,
-- foreign key (evaluation_id) references Builds(id) on delete cascade,
constraint RunCommandLogs_not_started_no_exit_time_no_code check (
-- If start time is null, then end_time, exit_code, signal, and core_dumped should be null.
-- A logical implication operator would be nice :).
(start_time is not null) or (
end_time is null
and error_number is null
and exit_code is null
and signal is null
and core_dumped is null
)
),
constraint RunCommandLogs_end_time_has_start_time check (
-- If end time is not null, then end_time, exit_code, and core_dumped should not be null
(end_time is null) or (start_time is not null)
)
-- Note: if exit_code is not null then signal and core_dumped must be null.
-- Similarly, if signal is not null then exit_code must be null and
-- core_dumped must not be null. However, these semantics are tricky
-- to encode as constraints and probably provide limited actual value.
);
-- The output paths that have permanently failed.
create table FailedPaths (
path text primary key not null

View file

@ -38,6 +38,7 @@ make_schema_at("Hydra::Schema", {
"nrbuilds" => "NrBuilds",
"projectmembers" => "ProjectMembers",
"projects" => "Projects",
"runcommandlogs" => "RunCommandLogs",
"schemaversion" => "SchemaVersion",
"starredjobs" => "StarredJobs",
"systemstatus" => "SystemStatus",