Skip to content

Commit

Permalink
fix(NODE-4557): randomize servers when there are only 2 eligible serv…
Browse files Browse the repository at this point in the history
…ers (#3390)
  • Loading branch information
baileympearson authored Sep 1, 2022
1 parent d2b3ce1 commit ddcfa49
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
4 changes: 1 addition & 3 deletions src/sdam/topology.ts
Original file line number Diff line number Diff line change
Expand Up @@ -904,9 +904,7 @@ function processWaitQueue(topology: Topology) {
} else if (selectedDescriptions.length === 1) {
selectedServer = topology.s.servers.get(selectedDescriptions[0].address);
} else {
// don't shuffle the array if there are only two elements
const descriptions =
selectedDescriptions.length === 2 ? selectedDescriptions : shuffle(selectedDescriptions, 2);
const descriptions = shuffle(selectedDescriptions, 2);
const server1 = topology.s.servers.get(descriptions[0].address);
const server2 = topology.s.servers.get(descriptions[1].address);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,30 @@ describe('operationCount-based Selection Within Latency Window - Prose Test', fu
expect(percentageToHost1).to.be.greaterThan(40).and.lessThan(60);
expect(percentageToHost2).to.be.greaterThan(40).and.lessThan(60);
});

it(
'equally distributes operations with both hosts when requests are in sequence',
TEST_METADATA,
/**
* note that this test is NOT a prose test, but it lives in this file because it uses the
* same setup as the operation count prose tests
*/
async function () {
const collection = client.db('test-db').collection('collection0');

const { insertedId } = await collection.insertOne({ name: 'bumpy' });

const n = 1000;

for (let i = 0; i < n; ++i) {
await collection.findOne({ _id: insertedId });
}

const [host1, host2] = seeds.map(seed => seed.split(':')[1]);
const percentageToHost1 = (counts[host1] / n) * 100;
const percentageToHost2 = (counts[host2] / n) * 100;
expect(percentageToHost1).to.be.greaterThan(40).and.lessThan(60);
expect(percentageToHost2).to.be.greaterThan(40).and.lessThan(60);
}
);
});

0 comments on commit ddcfa49

Please sign in to comment.