@@ -163,9 +163,6 @@ module.exports = function (spec, spawnOptions, onNodeAbnormallyQuit, onTaskAdded
163163 } ;
164164
165165 var addTask = function ( nodeId , task ) {
166- tasks [ nodeId ] = tasks [ nodeId ] || { } ;
167- tasks [ nodeId ] [ task . room ] = tasks [ nodeId ] [ task . room ] || [ ] ;
168-
169166 if ( tasks [ nodeId ] [ task . room ] . indexOf ( task . task ) === - 1 ) {
170167 onTaskAdded ( task . task ) ;
171168 }
@@ -228,26 +225,24 @@ module.exports = function (spec, spawnOptions, onNodeAbnormallyQuit, onTaskAdded
228225 } ;
229226
230227 let findNodeUsedByRoom = ( nodeList , roomId ) => {
231- return new Promise ( ( resolve , reject ) => {
232228 for ( let i in nodeList ) {
233229 let node_id = nodeList [ i ] ;
234230 if ( tasks [ node_id ] !== undefined && tasks [ node_id ] [ roomId ] !== undefined ) {
235- resolve ( node_id ) ;
231+ return node_id ;
236232 }
237233 }
238- reject ( 'Not found' ) ;
239- } ) ;
234+ return undefined ;
240235 } ;
241236
242- let pickInIdle = ( ) => {
243- return new Promise ( ( resolve , reject ) => {
237+ let pickInIdle = ( room ) => {
244238 if ( idle_nodes . length < 1 ) {
245239 log . error ( 'getNode error:' , 'No available node' ) ;
246- reject ( 'No available node' ) ;
247- return ;
240+ return undefined ;
248241 }
249242
250243 let node_id = idle_nodes . shift ( ) ;
244+ tasks [ node_id ] = tasks [ node_id ] || { } ;
245+ tasks [ node_id ] [ room ] = tasks [ node_id ] [ room ] || [ ] ;
251246 nodes . push ( node_id ) ;
252247 setTimeout ( ( ) => {
253248 if ( ( spec . maxNodeNum < 0 ) || ( ( nodes . length + idle_nodes . length ) < spec . maxNodeNum ) ) {
@@ -257,8 +252,7 @@ module.exports = function (spec, spawnOptions, onNodeAbnormallyQuit, onTaskAdded
257252 }
258253 } , 0 ) ;
259254
260- resolve ( node_id ) ;
261- } ) ;
255+ return node_id ;
262256 } ;
263257
264258 that . getNode = ( task ) => {
@@ -267,31 +261,29 @@ module.exports = function (spec, spawnOptions, onNodeAbnormallyQuit, onTaskAdded
267261 return Promise . reject ( 'Invalid task' ) ;
268262 }
269263
270- let getByRoom ;
264+ let nodeId = undefined ;
271265 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 ) ;
280274 }
281275
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*/ )
289280 . 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 ) => {
293281 addTask ( nodeId , task ) ;
294282 return nodeId ;
283+ } ) . catch ( function ( err ) {
284+ tasks [ nodeId ] = undefined ;
285+ tasks [ nodeId ] [ task . room ] = undefined ;
286+ return Promise . reject ( err ) ;
295287 } ) ;
296288 } ;
297289
0 commit comments