@@ -163,9 +163,6 @@ module.exports = function (spec, spawnOptions, onNodeAbnormallyQuit, onTaskAdded
163
163
} ;
164
164
165
165
var addTask = function ( nodeId , task ) {
166
- tasks [ nodeId ] = tasks [ nodeId ] || { } ;
167
- tasks [ nodeId ] [ task . room ] = tasks [ nodeId ] [ task . room ] || [ ] ;
168
-
169
166
if ( tasks [ nodeId ] [ task . room ] . indexOf ( task . task ) === - 1 ) {
170
167
onTaskAdded ( task . task ) ;
171
168
}
@@ -228,26 +225,24 @@ module.exports = function (spec, spawnOptions, onNodeAbnormallyQuit, onTaskAdded
228
225
} ;
229
226
230
227
let findNodeUsedByRoom = ( nodeList , roomId ) => {
231
- return new Promise ( ( resolve , reject ) => {
232
228
for ( let i in nodeList ) {
233
229
let node_id = nodeList [ i ] ;
234
230
if ( tasks [ node_id ] !== undefined && tasks [ node_id ] [ roomId ] !== undefined ) {
235
- resolve ( node_id ) ;
231
+ return node_id ;
236
232
}
237
233
}
238
- reject ( 'Not found' ) ;
239
- } ) ;
234
+ return undefined ;
240
235
} ;
241
236
242
- let pickInIdle = ( ) => {
243
- return new Promise ( ( resolve , reject ) => {
237
+ let pickInIdle = ( room ) => {
244
238
if ( idle_nodes . length < 1 ) {
245
239
log . error ( 'getNode error:' , 'No available node' ) ;
246
- reject ( 'No available node' ) ;
247
- return ;
240
+ return undefined ;
248
241
}
249
242
250
243
let node_id = idle_nodes . shift ( ) ;
244
+ tasks [ node_id ] = tasks [ node_id ] || { } ;
245
+ tasks [ node_id ] [ room ] = tasks [ node_id ] [ room ] || [ ] ;
251
246
nodes . push ( node_id ) ;
252
247
setTimeout ( ( ) => {
253
248
if ( ( spec . maxNodeNum < 0 ) || ( ( nodes . length + idle_nodes . length ) < spec . maxNodeNum ) ) {
@@ -257,8 +252,7 @@ module.exports = function (spec, spawnOptions, onNodeAbnormallyQuit, onTaskAdded
257
252
}
258
253
} , 0 ) ;
259
254
260
- resolve ( node_id ) ;
261
- } ) ;
255
+ return node_id ;
262
256
} ;
263
257
264
258
that . getNode = ( task ) => {
@@ -267,31 +261,29 @@ module.exports = function (spec, spawnOptions, onNodeAbnormallyQuit, onTaskAdded
267
261
return Promise . reject ( 'Invalid task' ) ;
268
262
}
269
263
270
- let getByRoom ;
264
+ let nodeId = undefined ;
271
265
if ( spec . consumeNodeByRoom ) {
272
- getByRoom = findNodeUsedByRoom ( nodes , task . room )
273
- . then ( ( foundOne ) => {
274
- return foundOne
275
- } , ( notFound ) => {
276
- return findNodeUsedByRoom ( idle_nodes , task . room ) ;
277
- } ) ;
278
- } else {
279
- getByRoom = Promise . reject ( 'Not found' ) ;
266
+ nodeId = findNodeUsedByRoom ( nodes , task . room ) ;
267
+ if ( nodeId === undefined ) {
268
+ nodeId = findNodeUsedByRoom ( idle_nodes , task . room ) ;
269
+ }
270
+ }
271
+
272
+ if ( nodeId === undefined ) {
273
+ nodeId = pickInIdle ( task . room ) ;
280
274
}
281
275
282
- return getByRoom
283
- . then ( ( foundOne ) => {
284
- return foundOne ;
285
- } , ( notFound ) => {
286
- log . debug ( 'not found existing node' ) ;
287
- return pickInIdle ( ) ;
288
- } )
276
+ if ( nodeId === undefined ) {
277
+ return Promise . reject ( 'Not found' ) ;
278
+ }
279
+ return waitTillNodeReady ( nodeId , 1500 /*FIXME: Use a more reasonable timeout value instead of hard coding*/ )
289
280
. then ( ( nodeId ) => {
290
- log . debug ( 'got nodeId:' , nodeId ) ;
291
- return waitTillNodeReady ( nodeId , 1500 /*FIXME: Use a more reasonable timeout value instead of hard coding*/ ) ;
292
- } ) . then ( ( nodeId ) => {
293
281
addTask ( nodeId , task ) ;
294
282
return nodeId ;
283
+ } ) . catch ( function ( err ) {
284
+ tasks [ nodeId ] = undefined ;
285
+ tasks [ nodeId ] [ task . room ] = undefined ;
286
+ return Promise . reject ( err ) ;
295
287
} ) ;
296
288
} ;
297
289
0 commit comments