func Queue() (monsterqueue.Queue, error) { queueData.RLock() if queueData.instance != nil { defer queueData.RUnlock() return queueData.instance, nil } queueData.RUnlock() queueData.Lock() defer queueData.Unlock() if queueData.instance != nil { return queueData.instance, nil } queueMongoUrl, _ := config.GetString("queue:mongo-url") if queueMongoUrl == "" { queueMongoUrl = "localhost:27017" } queueMongoDB, _ := config.GetString("queue:mongo-database") conf := mongodb.QueueConfig{ CollectionPrefix: "tsuru", Url: queueMongoUrl, Database: queueMongoDB, } var err error queueData.instance, err = mongodb.NewQueue(conf) if err != nil { return nil, fmt.Errorf("could not create queue instance, please check queue:mongo-url and queue:mongo-database config entries. error: %s", err) } shutdown.Register(&queueData) go queueData.instance.ProcessLoop() return queueData.instance, nil }
func Queue() (monsterqueue.Queue, error) { queueData.RLock() if queueData.instance != nil { defer queueData.RUnlock() return queueData.instance, nil } queueData.RUnlock() queueData.Lock() defer queueData.Unlock() if queueData.instance != nil { return queueData.instance, nil } queueMongoUrl, _ := config.GetString("queue:mongo-url") if queueMongoUrl == "" { queueMongoUrl = "localhost:27017" } queueMongoDB, _ := config.GetString("queue:mongo-database") pollingInterval, _ := config.GetFloat("queue:mongo-polling-interval") if pollingInterval == 0.0 { pollingInterval = 1.0 } conf := mongodb.QueueConfig{ CollectionPrefix: "tsuru", Url: queueMongoUrl, Database: queueMongoDB, PollingInterval: time.Duration(pollingInterval * float64(time.Second)), } var err error queueData.instance, err = mongodb.NewQueue(conf) if err != nil { return nil, errors.Wrap(err, "could not create queue instance, please check queue:mongo-url and queue:mongo-database config entries. error") } shutdown.Register(&queueData) go queueData.instance.ProcessLoop() return queueData.instance, nil }