コード例 #1
0
ファイル: dpn_queue.go プロジェクト: APTrust/exchange
// queueTransfer adds a transfer task to NSQ and records info about
// when the item was queued in DPNWorkItem.QueuedAt, which is saved to Pharos.
func (dpnQueue *DPNQueue) queueTransfer(dpnWorkItem *apt_models.DPNWorkItem, taskType string) {
	queueTopic := ""
	if taskType == constants.DPNTaskReplication {
		// Copy is first step of replication
		queueTopic = dpnQueue.Context.Config.DPN.DPNCopyWorker.NsqTopic
	} else if taskType == constants.DPNTaskRestore {
		queueTopic = dpnQueue.Context.Config.DPN.DPNRestoreWorker.NsqTopic
	} else {
		dpnQueue.Context.MessageLog.Error("Illegal taskType '%s'", taskType)
		return
	}
	// Put the item into NSQ
	err := dpnQueue.Context.NSQClient.Enqueue(queueTopic, dpnWorkItem.Id)
	if err != nil {
		dpnQueue.err("Error queueing DPNWorkItem %d, %s %s: %v",
			dpnWorkItem.Id, taskType, dpnWorkItem.Identifier, err)
	} else {
		// Let Pharos know this item has been queued
		dpnQueue.Context.MessageLog.Info("Added %s %s (DPNWorkItem %d) to NSQ topic %s",
			taskType, dpnWorkItem.Identifier, dpnWorkItem.Id, queueTopic)
		utcNow := time.Now().UTC()
		dpnWorkItem.QueuedAt = &utcNow
		resp := dpnQueue.Context.PharosClient.DPNWorkItemSave(dpnWorkItem)
		if resp.Error != nil {
			dpnQueue.err("Error updating DPNWorkItem %d for %s %s to %s: %v",
				dpnWorkItem.Id, taskType, dpnWorkItem.Identifier, resp.Error)
			return
		}
		dpnWorkItem = resp.DPNWorkItem()
		dpnQueue.Context.MessageLog.Info("Set QueuedAt for %s %s (DPNWorkItem %d) to %s",
			taskType, dpnWorkItem.Identifier, dpnWorkItem.Id,
			dpnWorkItem.QueuedAt.Format(time.RFC3339))
	}
}