Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Side by Side Diff: appengine/cmd/dm/enums/execution/state.go

Issue 1537883002: Initial distributor implementation (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/luci-go@master
Patch Set: work in progress Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 //go:generate stringer -type=State 5 //go:generate stringer -type=State
6 6
7 package execution 7 package execution
8 8
9 import ( 9 import (
10 "fmt" 10 "fmt"
11 ) 11 )
12 12
13 // State is the state that a single Execution can be in. 13 // State is the state that a single Execution can be in.
14 type State int8 14 type State int8
15 15
16 // State values 16 // State values
17 const ( 17 const (
18 » UnknownState State = iota 18 » Unknown State = iota
19 19
20 // The execution has been accepted by the distributor, but is not runnin g yet
20 Scheduled 21 Scheduled
21 Running
22 22
23 // The execution is running
24 Started
25
26 // The execution was unable to be accepted by the distributor
23 Rejected 27 Rejected
28
29 // The execution was accepted by the distributor, but couldn't run in ti me.
30 TimedOut
31
32 // The execution ran and completed
24 Finished 33 Finished
25 » Crashed 34
35 » // The execution ran, but the distributor claims it did not complete
36 » Failed
37
38 » // The distributor claims to not know anything about this execution
39 » Missing
40
41 » // Some entity (DM, Human, Distributor) requested that this execution no t run.
42 » Cancelled
26 ) 43 )
27 44
28 // validStateEvolution defines all valid {From -> []To} state transitions. The 45 // validStateEvolution defines all valid {From -> []To} state transitions. The
29 // identity transition (X -> X) is implied, as long as X has an entry in this 46 // identity transition (X -> X) is implied, as long as X has an entry in this
30 // mapping. 47 // mapping.
31 var validStateEvolution = map[State][]State{ 48 var validStateEvolution = map[State][]State{
32 » Scheduled: {Running, Rejected, Crashed, Finished}, 49 » Scheduled: {Started, Finished, Missing, Cancelled, TimedOut},
33 » Running: {Crashed, Finished, Rejected}, 50 » Started: {Finished, Failed, Missing, Cancelled},
34 51
35 » Crashed: {}, 52 » Cancelled: {},
36 » Finished: {}, 53 » Finished: {},
37 » Rejected: {}, 54 » Failed: {},
55 » Missing: {},
56 » Rejected: {},
57 » TimedOut: {},
58 }
59
60 // FromString returns the State for it's equivalent string representation.
61 //
62 // All unknown state vals are converted to Unknown.
63 func FromString(val string) State {
64 » switch val {
65 » case "Scheduled":
66 » » return Scheduled
67 » case "Started":
68 » » return Started
69 » case "Rejected":
70 » » return Rejected
71 » case "TimedOut":
72 » » return TimedOut
73 » case "Finished":
74 » » return Finished
75 » case "Failed":
76 » » return Failed
77 » case "Missing":
78 » » return Missing
79 » case "Cancelled":
80 » » return Cancelled
81 » }
82 » return Unknown
83 }
84
85 // IsTerminal returns True if State has no more valid evolutions.
86 func (s State) IsTerminal() bool {
87 » return len(validStateEvolution[s]) == 0
38 } 88 }
39 89
40 // Evolve attempts to evolve the state of this Attempt. If the state 90 // Evolve attempts to evolve the state of this Attempt. If the state
41 // evolution is not allowed (e.g. invalid state transition), this returns an 91 // evolution is not allowed (e.g. invalid state transition), this returns an
42 // error. 92 // error.
43 func (s *State) Evolve(newState State) error { 93 func (s *State) Evolve(newState State) error {
44 nextStates := validStateEvolution[*s] 94 nextStates := validStateEvolution[*s]
45 if nextStates == nil { 95 if nextStates == nil {
46 return fmt.Errorf("invalid state transition: no transitions defi ned for %s", *s) 96 return fmt.Errorf("invalid state transition: no transitions defi ned for %s", *s)
47 } 97 }
(...skipping 12 matching lines...) Expand all
60 return fmt.Errorf("invalid state transition %v -> %v", *s, newState) 110 return fmt.Errorf("invalid state transition %v -> %v", *s, newState)
61 } 111 }
62 112
63 // MustEvolve is a panic'ing version of Evolve. 113 // MustEvolve is a panic'ing version of Evolve.
64 func (s *State) MustEvolve(newState State) { 114 func (s *State) MustEvolve(newState State) {
65 err := s.Evolve(newState) 115 err := s.Evolve(newState)
66 if err != nil { 116 if err != nil {
67 panic(err) 117 panic(err)
68 } 118 }
69 } 119 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698