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