本文整理匯總了Golang中code/cloudfoundry/org/bbs/models.Task類的典型用法代碼示例。如果您正苦於以下問題:Golang Task類的具體用法?Golang Task怎麽用?Golang Task使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Task類的13個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: FailTask
func (db *SQLDB) FailTask(logger lager.Logger, taskGuid, failureReason string) (*models.Task, error) {
logger = logger.Session("fail-task", lager.Data{"task_guid": taskGuid})
logger.Info("starting")
defer logger.Info("complete")
var task *models.Task
err := db.transact(logger, func(logger lager.Logger, tx *sql.Tx) error {
var err error
task, err = db.fetchTaskForUpdate(logger, taskGuid, tx)
if err != nil {
logger.Error("failed-locking-task", err)
return err
}
if err = task.ValidateTransitionTo(models.Task_Completed); err != nil {
if task.State != models.Task_Pending {
logger.Error("failed-to-transition-task-to-completed", err)
return err
}
}
return db.completeTask(logger, task, true, failureReason, "", tx)
})
return task, err
}
示例2: CompleteTask
func (db *SQLDB) CompleteTask(logger lager.Logger, taskGuid, cellID string, failed bool, failureReason, taskResult string) (*models.Task, error) {
logger = logger.Session("complete-task", lager.Data{"task_guid": taskGuid, "cell_id": cellID})
logger.Info("starting")
defer logger.Info("complete")
var task *models.Task
err := db.transact(logger, func(logger lager.Logger, tx *sql.Tx) error {
var err error
task, err = db.fetchTaskForUpdate(logger, taskGuid, tx)
if err != nil {
logger.Error("failed-locking-task", err)
return err
}
if task.CellId != cellID && task.State == models.Task_Running {
logger.Error("failed-task-already-running-on-different-cell", err)
return models.NewRunningOnDifferentCellError(cellID, task.CellId)
}
if err = task.ValidateTransitionTo(models.Task_Completed); err != nil {
logger.Error("failed-to-transition-task-to-completed", err)
return err
}
return db.completeTask(logger, task, failed, failureReason, taskResult, tx)
})
return task, err
}
示例3: completeTask
func (db *SQLDB) completeTask(logger lager.Logger, task *models.Task, failed bool, failureReason, result string, tx *sql.Tx) error {
now := db.clock.Now().UnixNano()
_, err := db.update(logger, tx, tasksTable,
SQLAttributes{
"failed": failed,
"failure_reason": failureReason,
"result": result,
"state": models.Task_Completed,
"first_completed_at": now,
"updated_at": now,
"cell_id": "",
},
"guid = ?", task.TaskGuid,
)
if err != nil {
logger.Error("failed-updating-tasks", err)
return db.convertSQLError(err)
}
task.State = models.Task_Completed
task.UpdatedAt = now
task.FirstCompletedAt = now
task.Failed = failed
task.FailureReason = failureReason
task.Result = result
task.CellId = ""
return nil
}
示例4: markTaskCompleted
func (db *ETCDDB) markTaskCompleted(task *models.Task, failed bool, failureReason, result string) {
now := db.clock.Now().UnixNano()
task.CellId = ""
task.UpdatedAt = now
task.FirstCompletedAt = now
task.State = models.Task_Completed
task.Failed = failed
task.FailureReason = failureReason
task.Result = result
}
示例5:
Context("when there is invalid data", func() {
BeforeEach(func() {
task1 := model_helpers.NewValidTask("a-guid")
insertTask(db, serializer, task1, true)
})
It("errors", func() {
_, err := sqlDB.TaskByGuid(logger, "a-guid")
Expect(err).To(Equal(models.ErrDeserialize))
})
})
})
Describe("StartTask", func() {
var (
expectedTask, beforeTask *models.Task
)
BeforeEach(func() {
expectedTask = model_helpers.NewValidTask("task-guid")
err := sqlDB.DesireTask(logger, expectedTask.TaskDefinition, expectedTask.TaskGuid, expectedTask.Domain)
Expect(err).NotTo(HaveOccurred())
})
JustBeforeEach(func() {
var err error
beforeTask, err = sqlDB.TaskByGuid(logger, expectedTask.TaskGuid)
Expect(err).NotTo(HaveOccurred())
})
It("starts the task", func() {
示例6:
Describe("Version", func() {
It("returns the timestamp from which it was created", func() {
Expect(migration.Version()).To(BeEquivalentTo(1451635200))
})
})
Describe("Down", func() {
It("returns a not implemented error", func() {
Expect(migration.Down(logger)).To(HaveOccurred())
})
})
Describe("Up", func() {
var (
task *models.Task
migrationErr error
)
Describe("Task Migration", func() {
BeforeEach(func() {
task = model_helpers.NewValidTask("task-guid-1")
task.Action = models.WrapAction(&models.TimeoutAction{Action: model_helpers.NewValidAction(),
DeprecatedTimeoutNs: 5 * int64(time.Second),
})
})
JustBeforeEach(func() {
taskData, err := serializer.Marshal(logger, format.ENCRYPTED_PROTO, task)
Expect(err).NotTo(HaveOccurred())
_, err = storeClient.Set(etcddb.TaskSchemaPath(task), taskData, 0)
Expect(err).NotTo(HaveOccurred())
示例7: ConvergeTasks
func (db *ETCDDB) ConvergeTasks(
logger lager.Logger,
cellSet models.CellSet,
kickTaskDuration, expirePendingTaskDuration, expireCompletedTaskDuration time.Duration,
) ([]*auctioneer.TaskStartRequest, []*models.Task) {
logger.Info("starting-convergence")
defer logger.Info("finished-convergence")
convergeTaskRunsCounter.Increment()
convergeStart := db.clock.Now()
defer func() {
err := convergeTaskDuration.Send(time.Since(convergeStart))
if err != nil {
logger.Error("failed-to-send-converge-task-duration-metric", err)
}
}()
logger.Debug("listing-tasks")
taskState, modelErr := db.fetchRecursiveRaw(logger, TaskSchemaRoot)
if modelErr != nil {
logger.Debug("failed-listing-task")
sendTaskMetrics(logger, -1, -1, -1, -1)
return nil, nil
}
logger.Debug("succeeded-listing-task")
logError := func(task *models.Task, message string) {
logger.Error(message, nil, lager.Data{
"task_guid": task.TaskGuid,
})
}
tasksToComplete := []*models.Task{}
scheduleForCompletion := func(task *models.Task) {
if task.CompletionCallbackUrl == "" {
return
}
tasksToComplete = append(tasksToComplete, task)
}
keysToDelete := []string{}
tasksToCAS := []compareAndSwappableTask{}
scheduleForCASByIndex := func(index uint64, newTask *models.Task) {
tasksToCAS = append(tasksToCAS, compareAndSwappableTask{
OldIndex: index,
NewTask: newTask,
})
}
tasksToAuction := []*auctioneer.TaskStartRequest{}
var tasksKicked uint64 = 0
pendingCount := 0
runningCount := 0
completedCount := 0
resolvingCount := 0
logger.Debug("determining-convergence-work", lager.Data{"num_tasks": len(taskState.Nodes)})
for _, node := range taskState.Nodes {
task := new(models.Task)
err := db.deserializeModel(logger, node, task)
if err != nil || task.Validate() != nil {
logger.Error("found-invalid-task", err, lager.Data{
"key": node.Key,
"value": node.Value,
})
keysToDelete = append(keysToDelete, node.Key)
continue
}
shouldKickTask := db.durationSinceTaskUpdated(task) >= kickTaskDuration
switch task.State {
case models.Task_Pending:
pendingCount++
shouldMarkAsFailed := db.durationSinceTaskCreated(task) >= expirePendingTaskDuration
if shouldMarkAsFailed {
logError(task, "failed-to-start-in-time")
db.markTaskFailed(task, "not started within time limit")
scheduleForCASByIndex(node.ModifiedIndex, task)
tasksKicked++
} else if shouldKickTask {
logger.Info("requesting-auction-for-pending-task", lager.Data{"task_guid": task.TaskGuid})
start := auctioneer.NewTaskStartRequestFromModel(task.TaskGuid, task.Domain, task.TaskDefinition)
tasksToAuction = append(tasksToAuction, &start)
tasksKicked++
}
case models.Task_Running:
runningCount++
cellIsAlive := cellSet.HasCellID(task.CellId)
if !cellIsAlive {
logError(task, "cell-disappeared")
db.markTaskFailed(task, "cell disappeared before completion")
scheduleForCASByIndex(node.ModifiedIndex, task)
tasksKicked++
//.........這裏部分代碼省略.........
示例8: demoteToCompleted
func demoteToCompleted(task *models.Task) *models.Task {
task.State = models.Task_Completed
return task
}
示例9:
import (
"encoding/json"
"strings"
"time"
"code.cloudfoundry.org/bbs/format"
"code.cloudfoundry.org/bbs/models"
"github.com/gogo/protobuf/proto"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
var _ = Describe("Task", func() {
var taskPayload string
var task models.Task
BeforeEach(func() {
taskPayload = `{
"task_guid":"some-guid",
"domain":"some-domain",
"rootfs": "docker:///docker.com/docker",
"env":[
{
"name":"ENV_VAR_NAME",
"value":"an environmment value"
}
],
"cell_id":"cell",
"action": {
"download":{
示例10:
"code.cloudfoundry.org/bbs/models/test/model_helpers"
"code.cloudfoundry.org/lager/lagertest"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/onsi/gomega/gbytes"
)
var _ = Describe("Task Handlers", func() {
var (
logger *lagertest.TestLogger
controller *fake_controllers.FakeTaskController
responseRecorder *httptest.ResponseRecorder
handler *handlers.TaskHandler
exitCh chan struct{}
task1 models.Task
task2 models.Task
requestBody interface{}
)
BeforeEach(func() {
logger = lagertest.NewTestLogger("test")
responseRecorder = httptest.NewRecorder()
exitCh = make(chan struct{}, 1)
controller = &fake_controllers.FakeTaskController{}
handler = handlers.NewTaskHandler(controller, exitCh)
})
示例11:
cfhttp.Initialize(timeout)
fakeServer = ghttp.NewServer()
logger = lagertest.NewTestLogger("test")
logger.RegisterSink(lager.NewWriterSink(GinkgoWriter, lager.INFO))
})
AfterEach(func() {
fakeServer.Close()
})
Describe("HandleCompletedTask", func() {
var (
callbackURL string
taskDB *dbfakes.FakeTaskDB
statusCodes chan int
task *models.Task
httpClient *http.Client
)
BeforeEach(func() {
httpClient = cfhttp.NewClient()
statusCodes = make(chan int)
fakeServer.RouteToHandler("POST", "/the-callback/url", func(w http.ResponseWriter, req *http.Request) {
w.WriteHeader(<-statusCodes)
})
callbackURL = fakeServer.URL() + "/the-callback/url"
taskDB = new(dbfakes.FakeTaskDB)
taskDB.ResolvingTaskReturns(nil)
示例12:
It("creates a task in sqldb for each task in etcd", func() {
Expect(migrationErr).NotTo(HaveOccurred())
rows, err := rawSQLDB.Query(`
SELECT
guid, domain, updated_at, created_at, first_completed_at, state,
cell_id, result, failed, failure_reason, task_definition
FROM tasks
`)
Expect(err).NotTo(HaveOccurred())
defer rows.Close()
tasks := []*models.Task{}
for rows.Next() {
var taskTest models.Task
var encryptedDefinition []byte
err := rows.Scan(&taskTest.TaskGuid, &taskTest.Domain,
&taskTest.UpdatedAt, &taskTest.CreatedAt, &taskTest.FirstCompletedAt,
&taskTest.State, &taskTest.CellId, &taskTest.Result,
&taskTest.Failed, &taskTest.FailureReason, &encryptedDefinition)
Expect(err).NotTo(HaveOccurred())
taskTest.TaskDefinition = &models.TaskDefinition{}
err = serializer.Unmarshal(logger, encryptedDefinition, taskTest.TaskDefinition)
Expect(err).NotTo(HaveOccurred())
tasks = append(tasks, &taskTest)
}
示例13: TaskSchemaPath
func TaskSchemaPath(task *models.Task) string {
return TaskSchemaPathByGuid(task.GetTaskGuid())
}