| OLD | NEW |
| 1 // Copyright 2016 The LUCI Authors. All rights reserved. | 1 // Copyright 2016 The LUCI Authors. All rights reserved. |
| 2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
| 3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
| 4 | 4 |
| 5 package dm | 5 package dm |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "time" | 8 "time" |
| 9 | 9 |
| 10 google_pb "github.com/luci/luci-go/common/proto/google" | 10 google_pb "github.com/luci/luci-go/common/proto/google" |
| 11 ) | 11 ) |
| 12 | 12 |
| 13 // NewAttemptNeedsExecution creates an Attempt in the NeedsExecution state. | 13 // NewAttemptScheduling creates an Attempt in the SCHEDULING state. |
| 14 func NewAttemptNeedsExecution(pending time.Time) *Attempt { | 14 func NewAttemptScheduling() *Attempt { |
| 15 return &Attempt{ | 15 return &Attempt{ |
| 16 Data: &Attempt_Data{ | 16 Data: &Attempt_Data{ |
| 17 » » » AttemptType: &Attempt_Data_NeedsExecution_{ | 17 » » » AttemptType: &Attempt_Data_Scheduling_{ |
| 18 » » » » NeedsExecution: &Attempt_Data_NeedsExecution{ | 18 » » » » &Attempt_Data_Scheduling{}}}} |
| 19 » » » » » google_pb.NewTimestamp(pending)}}}} | |
| 20 } | 19 } |
| 21 | 20 |
| 22 // NewAttemptExecuting creates an Attempt in the Executing state. | 21 // NewAttemptExecuting creates an Attempt in the EXECUTING state. |
| 23 func NewAttemptExecuting(curExID uint32) *Attempt { | 22 func NewAttemptExecuting(curExID uint32) *Attempt { |
| 24 return &Attempt{ | 23 return &Attempt{ |
| 25 Data: &Attempt_Data{ | 24 Data: &Attempt_Data{ |
| 25 NumExecutions: curExID, |
| 26 AttemptType: &Attempt_Data_Executing_{ | 26 AttemptType: &Attempt_Data_Executing_{ |
| 27 » » » » Executing: &Attempt_Data_Executing{ | 27 » » » » &Attempt_Data_Executing{curExID}}}} |
| 28 » » » » » curExID}}}} | |
| 29 } | 28 } |
| 30 | 29 |
| 31 // NewAttemptAddingDeps creates an Attempt in the AddingDeps state. | 30 // NewAttemptWaiting creates an Attempt in the WAITING state. |
| 32 func NewAttemptAddingDeps(numAdding, numWaiting uint32) *Attempt { | 31 func NewAttemptWaiting(numWaiting uint32) *Attempt { |
| 33 return &Attempt{ | 32 return &Attempt{ |
| 34 Data: &Attempt_Data{ | 33 Data: &Attempt_Data{ |
| 35 » » » AttemptType: &Attempt_Data_AddingDeps_{ | 34 » » » AttemptType: &Attempt_Data_Waiting_{ |
| 36 » » » » AddingDeps: &Attempt_Data_AddingDeps{ | 35 » » » » &Attempt_Data_Waiting{numWaiting}}}} |
| 37 » » » » » numAdding, numWaiting}}}} | |
| 38 } | 36 } |
| 39 | 37 |
| 40 // NewAttemptBlocked creates an Attempt in the Blocked state. | 38 // NewAttemptFinished creates an Attempt in the FINISHED state. |
| 41 func NewAttemptBlocked(numWaiting uint32) *Attempt { | 39 func NewAttemptFinished(expiration time.Time, jsonResultSize uint32, jsonResult,
finalPersistentState string) *Attempt { |
| 42 » return &Attempt{ | |
| 43 » » Data: &Attempt_Data{ | |
| 44 » » » AttemptType: &Attempt_Data_Blocked_{ | |
| 45 » » » » Blocked: &Attempt_Data_Blocked{ | |
| 46 » » » » » numWaiting}}}} | |
| 47 } | |
| 48 | |
| 49 // NewAttemptFinished creates an Attempt in the Finished state. | |
| 50 func NewAttemptFinished(expiration time.Time, jsonResultSize uint32, jsonResult
string) *Attempt { | |
| 51 return &Attempt{ | 40 return &Attempt{ |
| 52 Data: &Attempt_Data{ | 41 Data: &Attempt_Data{ |
| 53 AttemptType: &Attempt_Data_Finished_{ | 42 AttemptType: &Attempt_Data_Finished_{ |
| 54 » » » » Finished: &Attempt_Data_Finished{ | 43 » » » » &Attempt_Data_Finished{ |
| 55 » » » » » google_pb.NewTimestamp(expiration), json
ResultSize, jsonResult}}}} | 44 » » » » » google_pb.NewTimestamp(expiration), json
ResultSize, jsonResult, finalPersistentState}}}} |
| 45 } |
| 46 |
| 47 // NewAttemptAbnormalFinish creates an Attempt in the ABNORMAL_FINISH state. |
| 48 func NewAttemptAbnormalFinish(af *AbnormalFinish) *Attempt { |
| 49 » return &Attempt{ |
| 50 » » Data: &Attempt_Data{ |
| 51 » » » AttemptType: &Attempt_Data_AbnormalFinish{af}}} |
| 56 } | 52 } |
| 57 | 53 |
| 58 // State computes the Attempt_State for the current Attempt_Data | 54 // State computes the Attempt_State for the current Attempt_Data |
| 59 func (d *Attempt_Data) State() Attempt_State { | 55 func (d *Attempt_Data) State() Attempt_State { |
| 60 » switch d.AttemptType.(type) { | 56 » if d != nil { |
| 61 » case *Attempt_Data_Executing_: | 57 » » switch d.AttemptType.(type) { |
| 62 » » return Attempt_EXECUTING | 58 » » case *Attempt_Data_Scheduling_: |
| 63 » case *Attempt_Data_AddingDeps_: | 59 » » » return Attempt_SCHEDULING |
| 64 » » return Attempt_ADDING_DEPS | 60 » » case *Attempt_Data_Executing_: |
| 65 » case *Attempt_Data_Blocked_: | 61 » » » return Attempt_EXECUTING |
| 66 » » return Attempt_BLOCKED | 62 » » case *Attempt_Data_Waiting_: |
| 67 » case *Attempt_Data_Finished_: | 63 » » » return Attempt_WAITING |
| 68 » » return Attempt_FINISHED | 64 » » case *Attempt_Data_Finished_: |
| 65 » » » return Attempt_FINISHED |
| 66 » » case *Attempt_Data_AbnormalFinish: |
| 67 » » » return Attempt_ABNORMAL_FINISHED |
| 68 » » } |
| 69 } | 69 } |
| 70 » // NEEDS_EXECUTION is the default | 70 » return Attempt_SCHEDULING |
| 71 » return Attempt_NEEDS_EXECUTION | |
| 72 } | 71 } |
| 73 | 72 |
| 74 // NormalizePartial will nil out the Partial field for this Attempt if all | 73 // NormalizePartial will nil out the Partial field for this Attempt if all |
| 75 // Partial fields are false. | 74 // Partial fields are false. |
| 76 func (d *Attempt) NormalizePartial() { | 75 func (d *Attempt) NormalizePartial() { |
| 77 p := d.GetPartial() | 76 p := d.GetPartial() |
| 78 if p == nil { | 77 if p == nil { |
| 79 return | 78 return |
| 80 } | 79 } |
| 81 if !(p.Data || p.Executions || p.FwdDeps || p.BackDeps || | 80 if !(p.Data || p.Executions || p.FwdDeps || p.BackDeps || |
| 82 p.Result != Attempt_Partial_LOADED) { | 81 p.Result != Attempt_Partial_LOADED) { |
| 83 d.Partial = nil | 82 d.Partial = nil |
| 84 } | 83 } |
| 85 } | 84 } |
| 85 |
| 86 // Any returns true iff any of the Partial fields are true such that they could |
| 87 // be successfully loaded on a subsequent query. |
| 88 func (p *Attempt_Partial) Any() bool { |
| 89 return (p.BackDeps || p.Data || p.Executions || p.FwdDeps || |
| 90 p.Result == Attempt_Partial_NOT_LOADED) |
| 91 } |
| OLD | NEW |