Fix: Starts meiden hochfahrende Hosts, Messerrunde zählt nicht als Map-Ende
- Neue Server meiden Hosts, auf denen gerade ein Container per SteamCMD lädt (Warteschlange im Prozess und laufende Starts laut Datenbank). Vorher warteten alle Starts hinter einem langen Download, obwohl andere Hosts frei waren. - Vor dem Einrichten des Matches wird eine laufende Messerrunde in die Aufwärmphase gesetzt, und Logzeilen zählen erst, wenn die Map eingerichtet ist. Vorher wurde das Ende der Messerrunde als Ende von Map 1 gewertet und die nächste Map automatisch geladen.
This commit is contained in:
1 parent
148cd99856
commit
d36dcacd39
6 files changed
+83
-8
No files matched your search
@@ -107,3 +107,29 @@ test('Alter Handle ohne passenden Host-Namen wird über die Adresse dem richtige
|
||||
assert.equal(p.adapterFor({ hostName: 'default', rconHost: '10.0.0.2' }).options.name, 'b');
|
||||
assert.throws(() => p.adapterFor({ hostName: 'weg', rconHost: '10.9.9.9' }), /nicht \(mehr\) konfiguriert/);
|
||||
});
|
||||
|
||||
test('Neue Server meiden Hosts, auf denen gerade ein Server hochfährt (SteamCMD)', async () => {
|
||||
const starting = { '10.0.0.2': 1 };
|
||||
const p = new DockerHostPool(options([hostA, hostB]), {
|
||||
getUsedPorts: () => new Set(),
|
||||
getStarting: (publicHost, exclude) => (exclude === 'self' ? 0 : starting[publicHost] ?? 0),
|
||||
runDocker: fakeDocker().run,
|
||||
});
|
||||
// b hat mehr Plätze, aber dort lädt gerade ein Container: a gewinnt
|
||||
assert.equal(p.pickHost().name, 'a');
|
||||
// Der hochfahrende Server selbst zählt nicht gegen seinen eigenen Neustart
|
||||
assert.equal(p.pickHost('self').name, 'b');
|
||||
// Warteschlange im Prozess zählt genauso
|
||||
starting['10.0.0.2'] = 0;
|
||||
p.adapters.get('b').pendingStarts = 1;
|
||||
assert.equal(p.pickHost().name, 'a');
|
||||
// Starts zählen hoch und nach dem Update-Check wieder herunter
|
||||
const a = p.adapters.get('a');
|
||||
let done;
|
||||
a.waitForUpdateCheck = () => new Promise((r) => { done = r; });
|
||||
await a.start({ matchId: 'm1', mode: 'competitive', secrets });
|
||||
assert.equal(a.pendingStarts, 1);
|
||||
done();
|
||||
await new Promise((r) => setImmediate(r));
|
||||
assert.equal(a.pendingStarts, 0);
|
||||
});
|
||||
Reference in new issue
Block a user