Skip to content

Commit 4e8432e

Browse files
authored
fix monolith not removing the correct balancer on disconnect (#1174)
* fix `onBalancerDisconnect` so it actually removes the correct balancer from the list * add a unit test
1 parent f8655fd commit 4e8432e

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

server/balancer.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,12 @@ class BalancerManager {
8484
private onBalancerDisconnect(conn: BalancerConnection, code: number, reason: string) {
8585
log.debug(`Disconnected from balancer ${conn.id}: ${code} ${reason}`);
8686
this.emit("disconnect", conn);
87-
for (const conn of this.balancerConnections) {
88-
if (conn.id === conn.id) {
89-
this.balancerConnections.splice(this.balancerConnections.indexOf(conn), 1);
90-
break;
91-
}
87+
const idx = this.balancerConnections.indexOf(conn);
88+
if (idx === -1) {
89+
log.error(`Balancer ${conn.id} was not found in balancerConnections`);
90+
return;
9291
}
92+
this.balancerConnections.splice(idx, 1);
9393
}
9494

9595
private onBalancerMessage(conn: BalancerConnection, message: MsgB2M) {

server/tests/unit/clientmanager.spec.ts

+23
Original file line numberDiff line numberDiff line change
@@ -118,3 +118,26 @@ describe("ClientManager", () => {
118118
expect(joins2).toHaveLength(0);
119119
});
120120
});
121+
122+
describe("BalancerManager", () => {
123+
beforeEach(() => {
124+
balancerManager.balancerConnections.splice(0, balancerManager.balancerConnections.length);
125+
});
126+
127+
it("should remove the correct balancer from the list when it disconnects", () => {
128+
const con1 = new BalancerConnectionMock();
129+
const con2 = new BalancerConnectionMock();
130+
const con3 = new BalancerConnectionMock();
131+
132+
balancerManager.addBalancerConnection(con1);
133+
balancerManager.addBalancerConnection(con2);
134+
balancerManager.addBalancerConnection(con3);
135+
136+
expect(balancerManager.balancerConnections).toHaveLength(3);
137+
138+
con2.emit("disconnect", 1000, "reason");
139+
140+
expect(balancerManager.balancerConnections).toHaveLength(2);
141+
expect(balancerManager.balancerConnections).not.toContain(con2);
142+
});
143+
});

0 commit comments

Comments
 (0)