MCPcopy Create free account
hub / github.com/CovenantSQL/CovenantSQL / run

Method run

cmd/cql-proxy/task/task.go:171–252  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

169}
170
171func (m *Manager) run() {
172 defer m.wg.Done()
173
174 for {
175 select {
176 case <-m.ctx.Done():
177 // kill pending tasks
178 for _, t := range m.taskMap {
179 t.cancel()
180 }
181
182 return
183 case wi := <-m.waitCh:
184 if _, ok := m.taskMap[wi.id]; ok {
185 m.waitMap[wi.id] = append(m.waitMap[wi.id], wi)
186 } else {
187 // trigger directly
188 if wi.ch != nil {
189 select {
190 case <-wi.ch:
191 default:
192 close(wi.ch)
193 }
194 }
195 }
196 case id := <-m.killCh:
197 // kill task
198 if t, ok := m.taskMap[id]; ok {
199 t.cancel()
200 }
201 case id := <-m.finishCh:
202 // finish task
203 if t, ok := m.taskMap[id]; ok {
204 m.cleanupTask(t)
205 }
206 case tsk := <-m.newCh:
207 // new task
208 if _, ok := m.taskMap[tsk.ID]; !ok {
209 m.runTask(tsk)
210 }
211 case <-time.After(10 * time.Second):
212 // poll database for existing task
213 tasks, err := model.ListIncompleteTask(m.db, MaxTaskPerRound)
214
215 if err != nil {
216 continue
217 }
218
219 for _, t := range tasks {
220 switch t.State {
221 case model.TaskWaiting:
222 // start job
223 if _, ok := m.taskMap[t.ID]; !ok {
224 m.runTask(t)
225 }
226 case model.TaskRunning:
227 // check running state
228 if _, ok := m.taskMap[t.ID]; !ok {

Callers 1

StartMethod · 0.95

Calls 6

cleanupTaskMethod · 0.95
runTaskMethod · 0.95
ListIncompleteTaskFunction · 0.92
DebugfFunction · 0.92
LogDataMethod · 0.80
NewMethod · 0.65

Tested by

no test coverage detected