2013-09-05 13:52:04 +10:00

107 lines
3.1 KiB
ReStructuredText

:title:Introduction
Turbo Hipster
=============
Turbo Hipster is a gearman worker designed to run tests using zuul
as the gearman client. It is primarily aimed at running openstack
continuous integration tests but can be used to automate any tests
with zuul.
Overview
--------
The zuul server receives jobs from a trigger requesting particular
jobs/tests to be ran. Turbo Hipster is able to provide a worker for
each of those jobs or a subset and report the success/failure back to
zuul. zuul will then collate responses from multiple workers and
build a report.
Typical workflow diagram
------------------------
.. graphviz::
digraph overview {
subgraph cluster_1 {
label = "Gerrit"
style = filled;
color = lightgrey;
node [style=filled,color=white];
g000 [shape=Mdiamond label="start"];
g001 [shape=box, label="receive event"];
g002 [shape=box, label="notify listeners"];
g000 -> g001;
g001 -> g002;
g002 -> g001;
}
subgraph cluster_2 {
label = "Zuul pipeline";
color = blue
node [style=filled];
z000 [shape=Mdiamond label="start"];
z001 [shape=box, label="register gearman server"];
z002 [shape=box, label="register launchers"];
z003 [shape=box, label="listen for events"];
z004 [shape=box, label="receive event"];
z005 [shape=box, label="request jobs"];
z006 [shape=box, label="receive response"];
z007 [shape=box, label="send report"];
z000 -> z001 -> z002 -> z003 -> z004 -> z005;
z006 -> z007;
}
subgraph cluster_3 {
label = "Gearman";
style = filled;
color = lightgrey;
node [style=filled,color=white];
gm001 [shape=box, label="receive job method"];
gm002 [shape=box, label="request worker do method"];
gm003 [shape=box, label="receive results"];
gm004 [shape=box, label="return results"];
gms000 [label="register client"];
gms001 [label="register worker"];
gms002 [label="register method"];
gm001 -> gm002;
gm003 -> gm004;
}
subgraph cluster_4 {
label = "Turbo Hipster";
color = blue
node [style=filled];
th000 [shape=Mdiamond label="start"];
th001 [shape=box, label="register as worker"];
th002 [shape=box, label="find available tasks"];
th003 [shape=box, label="register available job methods"];
ths001 [shape=box, label="receive method request"];
ths002 [shape=box, label="run task"];
ths003 [shape=box, label="send results"];
th000 -> th001 -> th002 -> th003;
ths001 -> ths002 -> ths003;
}
z001 -> gms000;
z005 -> gm001;
gm004 -> z006;
z003 -> g002 [dir=both, style=dotted];
th001 -> gms001;
th003 -> gms002;
gm002 -> ths001;
ths003 -> gm003;
}