OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 package distributor |
| 6 |
| 7 import ( |
| 8 dm "github.com/luci/luci-go/common/api/dm/service/v1" |
| 9 "golang.org/x/net/context" |
| 10 ) |
| 11 |
| 12 // NewTaskDescription builds a new *TaskDescription. |
| 13 // |
| 14 // It's intended for use by the DM core logic, and not for use by distributor |
| 15 // implementations. |
| 16 func NewTaskDescription(c context.Context, payload *dm.Quest_Desc, exAuth *dm.Ex
ecution_Auth, |
| 17 state PersistentState) *TaskDescription { |
| 18 return &TaskDescription{ |
| 19 c: c, |
| 20 payload: payload, |
| 21 executionAuth: exAuth, |
| 22 previousState: state, |
| 23 } |
| 24 } |
| 25 |
| 26 // TaskDescription is the parameters for PrepareTask. |
| 27 type TaskDescription struct { |
| 28 c context.Context |
| 29 payload *dm.Quest_Desc |
| 30 executionAuth *dm.Execution_Auth |
| 31 previousState PersistentState |
| 32 } |
| 33 |
| 34 // PrepareTopic returns the pubsub topic that notifications should be sent to. |
| 35 // |
| 36 // It returns the full name of the topic and a token that will be used to route |
| 37 // PubSub messages back to the Distributor. The publisher to the topic must be |
| 38 // instructed to put the token into the 'auth_token' attribute of PubSub |
| 39 // messages. DM will know how to route such messages to D.HandleNotification. |
| 40 func (t *TaskDescription) PrepareTopic() (topic, token string, err error) { |
| 41 topic = pubsubTopic(t.c) |
| 42 token, err = encodeAuthToken(t.c, t.executionAuth.Id, |
| 43 t.payload.DistributorConfigName) |
| 44 return |
| 45 } |
| 46 |
| 47 // PreviousState is the current PersistentState of the Attempt (e.g. the |
| 48 // PersistentState returned by the previous Execution). This will be empty |
| 49 // for the first Execution. |
| 50 func (t *TaskDescription) PreviousState() PersistentState { |
| 51 return t.previousState |
| 52 } |
| 53 |
| 54 // Payload is description of the job to run. |
| 55 func (t *TaskDescription) Payload() *dm.Quest_Desc { |
| 56 ret := *t.payload |
| 57 meta := *ret.Meta |
| 58 retry := *meta.Retry |
| 59 |
| 60 meta.Retry = &retry |
| 61 ret.Meta = &meta |
| 62 return &ret |
| 63 } |
| 64 |
| 65 // ExecutionAuth is the combined execution_id+activation token that the |
| 66 // execution must use to call ActivateExecution before making further API calls |
| 67 // into DM. |
| 68 func (t *TaskDescription) ExecutionAuth() *dm.Execution_Auth { |
| 69 ret := *t.executionAuth |
| 70 return &ret |
| 71 } |
OLD | NEW |