// 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)) } }