您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

setting.go 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package queue
  5. import (
  6. "encoding/json"
  7. "fmt"
  8. "code.gitea.io/gitea/modules/log"
  9. "code.gitea.io/gitea/modules/setting"
  10. )
  11. func validType(t string) (Type, error) {
  12. if len(t) == 0 {
  13. return PersistableChannelQueueType, nil
  14. }
  15. for _, typ := range RegisteredTypes() {
  16. if t == string(typ) {
  17. return typ, nil
  18. }
  19. }
  20. return PersistableChannelQueueType, fmt.Errorf("Unknown queue type: %s defaulting to %s", t, string(PersistableChannelQueueType))
  21. }
  22. func getQueueSettings(name string) (setting.QueueSettings, []byte) {
  23. q := setting.GetQueueSettings(name)
  24. opts := make(map[string]interface{})
  25. opts["Name"] = name
  26. opts["QueueLength"] = q.Length
  27. opts["BatchLength"] = q.BatchLength
  28. opts["DataDir"] = q.DataDir
  29. opts["Addresses"] = q.Addresses
  30. opts["Network"] = q.Network
  31. opts["Password"] = q.Password
  32. opts["DBIndex"] = q.DBIndex
  33. opts["QueueName"] = q.QueueName
  34. opts["Workers"] = q.Workers
  35. opts["MaxWorkers"] = q.MaxWorkers
  36. opts["BlockTimeout"] = q.BlockTimeout
  37. opts["BoostTimeout"] = q.BoostTimeout
  38. opts["BoostWorkers"] = q.BoostWorkers
  39. cfg, err := json.Marshal(opts)
  40. if err != nil {
  41. log.Error("Unable to marshall generic options: %v Error: %v", opts, err)
  42. log.Error("Unable to create queue for %s", name, err)
  43. return q, []byte{}
  44. }
  45. return q, cfg
  46. }
  47. // CreateQueue for name with provided handler and exemplar
  48. func CreateQueue(name string, handle HandlerFunc, exemplar interface{}) Queue {
  49. q, cfg := getQueueSettings(name)
  50. if len(cfg) == 0 {
  51. return nil
  52. }
  53. typ, err := validType(q.Type)
  54. if err != nil {
  55. log.Error("Invalid type %s provided for queue named %s defaulting to %s", q.Type, name, string(typ))
  56. }
  57. returnable, err := NewQueue(typ, handle, cfg, exemplar)
  58. if q.WrapIfNecessary && err != nil {
  59. log.Warn("Unable to create queue for %s: %v", name, err)
  60. log.Warn("Attempting to create wrapped queue")
  61. returnable, err = NewQueue(WrappedQueueType, handle, WrappedQueueConfiguration{
  62. Underlying: typ,
  63. Timeout: q.Timeout,
  64. MaxAttempts: q.MaxAttempts,
  65. Config: cfg,
  66. QueueLength: q.Length,
  67. }, exemplar)
  68. }
  69. if err != nil {
  70. log.Error("Unable to create queue for %s: %v", name, err)
  71. return nil
  72. }
  73. return returnable
  74. }