| OLD | NEW |
| 1 package db | 1 package db |
| 2 | 2 |
| 3 import ( | 3 import ( |
| 4 "sort" | 4 "sort" |
| 5 "sync" | 5 "sync" |
| 6 "time" | 6 "time" |
| 7 | 7 |
| 8 "github.com/satori/go.uuid" | 8 "github.com/satori/go.uuid" |
| 9 ) | 9 ) |
| 10 | 10 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 m.mtx.Unlock() | 54 m.mtx.Unlock() |
| 55 if !anyLeft { | 55 if !anyLeft { |
| 56 break | 56 break |
| 57 } | 57 } |
| 58 } | 58 } |
| 59 } | 59 } |
| 60 | 60 |
| 61 // TrackModifiedTask indicates the given Task should be returned from the next | 61 // TrackModifiedTask indicates the given Task should be returned from the next |
| 62 // call to GetModifiedTasks from each subscriber. | 62 // call to GetModifiedTasks from each subscriber. |
| 63 func (m *ModifiedTasks) TrackModifiedTask(t *Task) { | 63 func (m *ModifiedTasks) TrackModifiedTask(t *Task) { |
| 64 m.TrackModifiedTasks([]*Task{t}) |
| 65 } |
| 66 |
| 67 // TrackModifiedTasks calls TrackModifiedTask on each item. |
| 68 func (m *ModifiedTasks) TrackModifiedTasks(tasks []*Task) { |
| 64 m.mtx.Lock() | 69 m.mtx.Lock() |
| 65 defer m.mtx.Unlock() | 70 defer m.mtx.Unlock() |
| 66 » // Make a single copy, since GetModifiedTasks also copies. | 71 » for _, t := range tasks { |
| 67 » t = t.Copy() | 72 » » // Make a single copy, since GetModifiedTasks also copies. |
| 68 » for _, modTasks := range m.tasks { | 73 » » t = t.Copy() |
| 69 » » modTasks[t.Id] = t | 74 » » for _, modTasks := range m.tasks { |
| 75 » » » modTasks[t.Id] = t |
| 76 » » } |
| 70 } | 77 } |
| 71 } | 78 } |
| 72 | 79 |
| 73 // See docs for DB interface. | 80 // See docs for DB interface. |
| 74 func (m *ModifiedTasks) StartTrackingModifiedTasks() (string, error) { | 81 func (m *ModifiedTasks) StartTrackingModifiedTasks() (string, error) { |
| 75 m.mtx.Lock() | 82 m.mtx.Lock() |
| 76 defer m.mtx.Unlock() | 83 defer m.mtx.Unlock() |
| 77 if len(m.tasks) == 0 { | 84 if len(m.tasks) == 0 { |
| 78 // Initialize the data structure and start expiration goroutine. | 85 // Initialize the data structure and start expiration goroutine. |
| 79 m.tasks = map[string]map[string]*Task{} | 86 m.tasks = map[string]map[string]*Task{} |
| 80 m.expiration = map[string]time.Time{} | 87 m.expiration = map[string]time.Time{} |
| 81 go m.clearExpiredSubscribers() | 88 go m.clearExpiredSubscribers() |
| 82 } else if len(m.tasks) >= MAX_MODIFIED_BUILDS_USERS { | 89 } else if len(m.tasks) >= MAX_MODIFIED_BUILDS_USERS { |
| 83 return "", ErrTooManyUsers | 90 return "", ErrTooManyUsers |
| 84 } | 91 } |
| 85 id := uuid.NewV5(uuid.NewV1(), uuid.NewV4().String()).String() | 92 id := uuid.NewV5(uuid.NewV1(), uuid.NewV4().String()).String() |
| 86 m.tasks[id] = map[string]*Task{} | 93 m.tasks[id] = map[string]*Task{} |
| 87 m.expiration[id] = time.Now().Add(MODIFIED_BUILDS_TIMEOUT) | 94 m.expiration[id] = time.Now().Add(MODIFIED_BUILDS_TIMEOUT) |
| 88 return id, nil | 95 return id, nil |
| 89 } | 96 } |
| OLD | NEW |