Fix race condition on creating instance directory

This commit is contained in:
Hornwitser committed 2022-06-23 00:09:28 +02:00
1 parent 393652c1d9
commit 826d89c7dc
1 file changed
+13 -2
+13 -2
View File
@@ -248,7 +248,19 @@ class Slave extends libLink.Link {
}
let instancesDir = this.config.get("slave.instances_directory");
return path.join(instancesDir, await libFileOps.findUnusedName(instancesDir, name));
for (let i = 0; i < 10; i++) { // Limit attempts in case this is somehow an infinite loop
let candidateDir = path.join(instancesDir, await libFileOps.findUnusedName(instancesDir, name));
try {
await fs.mkdir(candidateDir);
} catch (err) {
if (err.code === "EEXIST") {
continue;
}
throw err;
}
return candidateDir;
}
throw Error("Unable to create instance dir, retry threshold reached");
}
async forwardRequestToInstance(message, request) {
@@ -380,7 +392,6 @@ class Slave extends libLink.Link {
let instanceConfig = new libConfig.InstanceConfig("slave");
await instanceConfig.load(serialized_config, "master");
// XXX: race condition on multiple simultanious calls
let instanceDir = await this._createNewInstanceDir(instanceConfig.get("instance.name"));
await Instance.create(instanceDir, this.config.get("slave.factorio_directory"));