@@ -19,7 +19,6 @@ import (
19
19
"github.com/crawlab-team/crawlab-db/mongo"
20
20
grpc "github.com/crawlab-team/crawlab-grpc"
21
21
"github.com/crawlab-team/go-trace"
22
- "github.com/joeshaw/multierror"
23
22
"github.com/spf13/viper"
24
23
"go.mongodb.org/mongo-driver/bson"
25
24
"go.mongodb.org/mongo-driver/bson/primitive"
@@ -93,140 +92,6 @@ func (svc *Service) Enqueue(t interfaces.Task) (err error) {
93
92
return nil
94
93
}
95
94
96
- func (svc * Service ) DequeueAndSchedule () {
97
- for {
98
- if svc .IsStopped () {
99
- return
100
- }
101
-
102
- // wait
103
- time .Sleep (svc .interval )
104
-
105
- if err := mongo .RunTransaction (func (sc mongo2.SessionContext ) error {
106
- // dequeue tasks
107
- tasks , err := svc .Dequeue ()
108
- if err != nil {
109
- return trace .TraceError (err )
110
- }
111
-
112
- // skip if no tasks available
113
- if tasks == nil || len (tasks ) == 0 {
114
- return nil
115
- }
116
-
117
- // schedule tasks
118
- if err := svc .Schedule (tasks ); err != nil {
119
- return trace .TraceError (err )
120
- }
121
-
122
- return nil
123
- }); err != nil {
124
- trace .PrintError (err )
125
- }
126
- }
127
- }
128
-
129
- func (svc * Service ) Dequeue () (tasks []interfaces.Task , err error ) {
130
- // get task queue items
131
- tqList , err := svc .getTaskQueueItems ()
132
- if err != nil {
133
- return nil , err
134
- }
135
- if tqList == nil {
136
- return nil , nil
137
- }
138
-
139
- // match resources
140
- tasks , nodesMap , err := svc .matchResources (tqList )
141
- if err != nil {
142
- return nil , err
143
- }
144
- if tasks == nil {
145
- return nil , nil
146
- }
147
-
148
- // update resources
149
- if err := svc .updateResources (nodesMap ); err != nil {
150
- return nil , err
151
- }
152
-
153
- // update tasks
154
- if err := svc .updateTasks (tasks ); err != nil {
155
- return nil , err
156
- }
157
-
158
- // delete task queue items
159
- if err := svc .deleteTaskQueueItems (tasks ); err != nil {
160
- return nil , err
161
- }
162
-
163
- return tasks , nil
164
- }
165
-
166
- func (svc * Service ) Schedule (tasks []interfaces.Task ) (err error ) {
167
- var e multierror.Errors
168
-
169
- // nodes cache
170
- nodesCache := sync.Map {}
171
-
172
- // wait group
173
- wg := sync.WaitGroup {}
174
- wg .Add (len (tasks ))
175
-
176
- // iterate tasks and execute each of them
177
- for _ , t := range tasks {
178
- go func (t interfaces.Task ) {
179
- var err error
180
-
181
- // node of the task
182
- var n interfaces.Node
183
- res , ok := nodesCache .Load (t .GetNodeId ())
184
- if ! ok {
185
- // not exists in cache
186
- n , err = svc .modelSvc .GetNodeById (t .GetNodeId ())
187
- if err == nil {
188
- nodesCache .Store (n .GetId (), n )
189
- }
190
- } else {
191
- // exists in cache
192
- n , ok = res .(interfaces.Node )
193
- if ! ok {
194
- err = errors .ErrorTaskInvalidType
195
- }
196
- }
197
- if err != nil {
198
- e = append (e , err )
199
- svc .handleTaskError (n , t , err )
200
- wg .Done ()
201
- return
202
- }
203
-
204
- // schedule task
205
- if n .GetIsMaster () {
206
- // execute task on master
207
- err = svc .handlerSvc .Run (t .GetId ())
208
- } else {
209
- // send to execute task on worker nodes
210
- err = svc .svr .SendStreamMessageWithData ("node:" + n .GetKey (), grpc .StreamMessageCode_RUN_TASK , t )
211
- }
212
- if err != nil {
213
- e = append (e , err )
214
- svc .handleTaskError (n , t , err )
215
- wg .Done ()
216
- return
217
- }
218
-
219
- // success
220
- wg .Done ()
221
- }(t )
222
- }
223
-
224
- // wait
225
- wg .Wait ()
226
-
227
- return e .Err ()
228
- }
229
-
230
95
func (svc * Service ) Cancel (id primitive.ObjectID , args ... interface {}) (err error ) {
231
96
// user
232
97
u := utils .GetUserFromArgs (args ... )
0 commit comments