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

3.1 KiB

: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

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;

}