Skip to content
This repository was archived by the owner on Oct 23, 2024. It is now read-only.

Commit 15073d9

Browse files
authored
Fix conference process abnormal issue when clients rush into multiple rooms (#1052)
1 parent 5841ada commit 15073d9

File tree

1 file changed

+24
-32
lines changed

1 file changed

+24
-32
lines changed

source/agent/nodeManager.js

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)